文档章节

python+unittest框架第三天unittest之分离测试固件和公共代码,跳过案例的执行

o
 osc_g8254g7s
发布于 2019/08/19 21:49
字数 1613
阅读 6
收藏 0

精选30+云产品,助力企业轻松上云!>>>

  我们在时间工作中,会将整个项目的代码分别放置多个模块中去编写。方便后期项目维护,比如,我们的web项目可能有多个IP地址,每个IP地址代表不同的测试环境。测试环境与Bat环境或者验收环境等。这就需要我们频繁更换测试地址 ;或者我们需要验证web 项目在不同的浏览器上面的兼容性,需要我们更换浏览器测试,这样我们必须切换代码中的浏览器驱动。

  我们可以将公共代码放在另一个.py文件中,就像这样:

我们将测试固件分离出去,这样方便我们在公共模块下维护测试需要的初始化环境,方便切换浏览器或者更改地址

 1 import unittest   #导入unittest库
 2 from selenium import webdriver    #导入selenium中的webdriver浏览器驱动
 3 import time as t
 4 
 5 
 6 class public_baidu(unittest.TestCase):    #我们写的测试固件类,里面有初始化方法setup()和tearDown()
 7     @classmethod  # 使用 @classmethod  装饰器函数,把方法变成类方法,可以直接调用方法,类本身就不在需要实例化类对象就可以调用此方法
 8     def setUp(cls):
 9         cls.driver = webdriver.Chrome()               #比如切换其他浏览器,我们都可以在这里更改
10         cls.driver.maximize_window()
11         cls.driver.implicitly_wait(15)
12         cls.driver.get(r'http://www.baidu.com')       #比如我们的测试地址有好几套,我们可以直接在这里跟换地址
13         t.sleep(2)
14 
15     @classmethod
16     def tearDown(cls):
17         cls.driver.quit()

name我们在另一个.py模块中肯定是主要存放测试案例,我们看下代码:

 1 import unittest                     #导入unittest
 2 from bokeyuan.bokeyuan_public import *    #注意这是我们自己创建的模块 .py文件,该模有公共代码
 3 
 4 class page_baidu_sousuo(public_baidu):       #定义一个类,并继承我们写的公共模块文件里面的public_baidu类
 5 
 6     '''以下案例是测试百度首页链接'''
 7     def test_baidu_001(self):     #案例001  测试进入百度新闻界面
 8         '''测试百度首新闻链接'''
 9         self.driver.find_element_by_link_text('新闻').click()    #点击百度页面,超链接【新闻】两个字
10         t.sleep(2)     #设置强制等待2秒,就是必须等待,用导入的time中的sleep方法,不是全局性,哪里需要设置到哪里,局部的
11         self.driver.back()
12 
13
14 def test_baidu_002(self): #案例002 测试进入百度地图界面 15 '''测试百度首地图链接''' 16 self.driver.find_element_by_link_text('地图').click() ##点击百度页面,超链接【地图】两个字 17 t.sleep(2) 18 self.driver.back() 19 20 '''以下案例是测试百度首页搜索功能''' 21 def test_baidu_003(self): 22 '''测试百度首页搜索功能''' 23 self.driver.find_element_by_id('kw').send_keys('你好朋友') 24 t.sleep(2) 25 26 @staticmethod #静态方法分离测试套件,不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。类.方法().看最后的代码调用:page_baidu_lianjie.suite() 27 def suite(): 28 suite = unittest.TestSuite(unittest.makeSuite(page_baidu_sousuo)) #将测试套件单独分离出,封装成方法,直接调用,以后就不用再每次都写 29 return suite #将测试套件返回,如果不写return返回,那么将不会将内容返回给调用方下面的run() 30 31 if __name__ =='__main__': 32 unittest.TextTestRunner(verbosity=2).run(page_baidu_sousuo.suite()) #run()接收封装的测试套件suite()方法的返回参数,进行测试套件的执行载入,然后生成报告

这样我们就可以试试两个文件维护后进行执行了:

比如今天发现有一条案例最近需求被推翻了,我们在需求没有拍板的时候,我们可以跳过该条案例的执行,注释代码是一种方法,但是并不是很友好,我们看下unittest提供的skip()方法  :

注意,如果你单独复制代码是不行的,需要把案例一里面的公共模块也赋值走哦!!!

 1 import unittest                     #导入unittest
 2 from bokeyuan.bokeyuan_public import *    #注意这是我们自己创建的模块 .py文件,该模有公共代码
 3 
 4 class page_baidu_sousuo(public_baidu):       #定义一个类,并继承我们写的公共模块文件里面的public_baidu类
 5 
 6     '''以下案例是测试百度首页链接'''
 7     def test_baidu_001(self):     #案例001  测试进入百度新闻界面
 8         '''测试百度首新闻链接'''
 9         self.driver.find_element_by_link_text('新闻').click()    #点击百度页面,超链接【新闻】两个字
10         t.sleep(2)     #设置强制等待2秒,就是必须等待,用导入的time中的sleep方法,不是全局性,哪里需要设置到哪里,局部的
11         self.driver.back()
12 
13     @unittest.skip('地图链接,正在更改昨天的bug,今天先不执行')       #用unittest提供的skip()方法,跳过测试案例,执行下一条案例
14     def test_baidu_002(self):      #案例002  测试进入百度地图界面
15         '''测试百度首地图链接'''
16         self.driver.find_element_by_link_text('地图').click()   ##点击百度页面,超链接【地图】两个字
17         t.sleep(2)
18         self.driver.back()
19 
20     '''以下案例是测试百度首页搜索功能'''
21     def test_baidu_003(self):
22         '''测试百度首页搜索功能'''
23         self.driver.find_element_by_id('kw').send_keys('你好朋友')
24         t.sleep(2)
25 
26     @staticmethod   #静态方法分离测试套件,不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。类.方法().看最后的代码调用:page_baidu_lianjie.suite()
27     def suite():
28         suite = unittest.TestSuite(unittest.makeSuite(page_baidu_sousuo))   #将测试套件单独分离出,封装成方法,直接调用,以后就不用再每次都写
29         return suite  #将测试套件返回,如果不写return返回,那么将不会将内容返回给调用方下面的run()
30 
31 if __name__ =='__main__':
32     unittest.TextTestRunner(verbosity=2).run(page_baidu_sousuo.suite())   #run()接收封装的测试套件suite()方法的返回参数,进行测试套件的执行载入,然后生成报告

 

 今天的东西不太多,明天开始笔记断言的部分。

总结今天的知识:

     1、 分离测试固件,将公共部分放在另一.py文件模块中,方便后期维护
2、 利用unittest中的skip()方法忽略不需要执行的案例
来自子努力学习的新手,有错误的地方,请帮忙指点。有不理解的小伙伴,可以直接留言哦。一起学习,希望我的笔记对你也有帮助~
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

以太坊智能合约开发常见的10个安全问题

本文介绍CheckMarx安全研究小组通过扫描公开的以太坊智能合约所发现的Solidity智能合约开发中常见的十大安全问题,其中__未检查的外部调用__ 和 高成本循环 分列排行榜前两名。该安全问题排行...

区块链教程
55分钟前
17
0
Android Studio写flutter快捷键

1.stl :代表StatelessWidget 2.stf :StatefulWidget 3.cmd + shift + 减号 :折叠所有代码 4.cmd + 减号 :折叠当前代码块 5.ctrl + r :编译运行 6.cmd + s :hot reload 7.cmd + { :回到...

一代码农码一代
今天
21
0
远程桌面如何修改登录密码

打开运行, C:\Windows\explorer.exe shell:::{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0} 即可 https://www.itexperience.net/10-ways-to-change-password-in-remote-desktop-session/......

ethanleellj
今天
17
0
easyui的menu接收后台集合,并且根据集合利用appendItem动态生成菜单项,判断菜单项的字数大于指定长度,则多余字符以。。。显示,并且悬浮提示

JSP: <a id="bb" href="javascript:void(0);" class="easyui-menubutton" data-options="menu:'#layout_north_stMenu222',iconCls:'icon-cologne-sign-out'" >导出</a><div id="aaa" style......

文文1
今天
13
0
Mysql主从同步

1主从同步 1.1Master 1.1.1配置--编辑 my.cnf #编辑 mysql 的 /etc/my.cnf 配置文件vi /etc/my.cnf#添加如下配置server-id=1 #设置服务 IDlog_bin=mysql-bin #启动 binlog...

风雪满弓刀
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部