一、TestCase用法
1、新建一个py文件,要有含义,比如登录,baidu_login,文件里新增一个类,要继承unittest.TestCase,
下面函数是用例,要以test开头
2、命令行的方式执行:python -m unittest -v 模块名.类名.方法名
-m以脚本方式运行一个模块
-v要更详细的输出结果
-k匹配执行,-k *_mm 运行以_mm结尾的,-k mm,运行包含mm的
3、执行结果:.成功、F失败、E错误、S跳过
4、执行规则:Ascll码,0-9,A-Z,a-z
二、套件运行
1、创建一个套件:suite=unittest.TestSuite
2、加载用例:suite.addTest(用例路径),加载单个用例,可加载多次
testcases=[用例路径,用例路径] suite.addTests(testcases),加载多个用例
testcases=unittest.defaultTestLoader.discover(start_dir='要加载用例的路径',pattern='要匹配的用例,如*.py'
匹配加载很多用例,suite.addTests(testcases)
3、执行套件:unittest.main(defaultTest='suite')或者unittest.TextTestRunner().run(suite)
三、测试固件或测试夹具初始化函数
1、setUP:在每个用例执行前运行,如打开浏览器,加载网页
2、tearDown:在每个用例执行后运行,如测试用例扫尾工作,关闭浏览器
3、setUpClass:在每个类执行前执行一次,如创建数据库,生成日志对象,需要在前面加装饰器,@classmethod
4、tearDownClass:在每个类执行后执行一次,如关闭数据库连接,销毁日志对象需要在前面加装饰器,@classmethod
5、setUpModule:在每个模块执行前执行一次,如创建数据库,生成日志对象,需要在前面加装饰器,@classmethod
4、tearDownModule:在每个模块执行后执行一次
四、封装初始化方法
1、新建一个testInit类,继承unittest.TestCase,然后把初始化函数写在这个类里
2、新建测试用例的类,继承testInit类,这样就可以让测试用例执行初始化方法和继承unittest.TestCase类
五、跳过用例
1、无条件忽略(跳过): 在用例前面加装饰器@unittest.skip("忽略理由")
2、满足条件忽略(跳过):在用例前面加装饰器@unittest.skipIf("条件""忽略理由"),条件满足时忽略
3、不满足条件忽略(跳过):在用例前面加装饰器@unittest.skipUnless("条件""忽略理由"),条件不满足时忽略
4、整个类跳过:可以在类前面加装饰器@unittest.skip("忽略理由")
六、断言
assertEqual(a,b) 断言a=b
assertNotEqual(a,b) 断言a!=b
assertTrue(a) 断言a为真
assertFalse(a) 断言a为假
assertIn(a,b) 断言a在b里面
assertNotIn(a,b) 断言a不在b里面
七、生成测试报告
1、加载用例:suite=unittest.TestSuite
testcases=unittest.defaultTestLoader.discover(start_dir='要加载用例的路径',pattern='要匹配的用例,如*.py'
匹配加载很多用例,suite.addTests(testcases)
2、把HTMLTestRunner.py放在python/lib 目录下
3、在运行的py文件下,打开一个文件file2=open("文档目录","wb")
4、runner=HTMLTestRunner(stream=file2,verbosity=1,title='自动化测试报告',description='测试环境:chrome')
5、执行runner.run(suite)
八、数据驱动DDT
1、ddt是通过装饰器进行调用的
2、@ddt类装饰器,声明这个类使用ddt框架
3、@data函数装饰器,用于给测试用例传递数据
4、@unpack将传输的数据包解包,一般用于元组tuple和列表list
5、@file_data函数装饰器,可直接读取yaml/json文件
6、ddt使用:在类前面加上装饰器@ddt
在用例前面加上@data(数据),用例加上接收数据的变量,如def 1 (self,args)
如果传入多个值时,用例会执行多次
如果传入元组tuple或者列表list,在用例前面加上@unpack解包
比如@data((1,2),(3,4)) @unpack def jiafa(self,a,b):print(a+b)
7、数字或者字符串,不需要@unpack解包,
元组和列表可以通过@unpack解包,但是参数的个数必须和解完包后的值的个数一样
集合无法解包
字典可以通过@unpack解包,但是参数的名字和个数必须和字典的键保持一致
九、csv文件,excel文件打开
csv文件
1、file=open("文件名","r") rows=csv.reader(file)
excel文件
2、使用openpyxl打开excel
加载工作簿:workbook=openpyxl.load_workbook(文件名)
获取sheet页:sheet=workbook[sheet页名]
alllist=[]
for row in range(1,sheet.max_row+1):
list=[]
for col in range(1,sheet.max_coiumn+1):
list.append(sheet.cell(row,col).value)
alllist.append(list)
十、使用不定长参数时
比如: def get_ele(self,data,*args):
driver.find_element(*args).send_keys(data)
正常参数data要写在*args前面
十一、自动化测试框架设计
1、基础框架类:使用selenium
2、封装工具类:这个类主要包括连接数据库、读取配置文件、读取excel文件等基本工具类,
还包括对selenium框架进行二次封装的类
3、封装业务类:这一层采用关键字驱动的自动化测试思想,根据被测对象的特性,设计很多
个不同的业务类,比如登录操作,如果很多个登录的入口,就写一个登录基类,不同入口继承
基类分别实现子类。如果是接口自动化,这个设计起来就比较简单了,有多少个接口就设计多
少个业务类
4、自动化脚本:结合业务测试类进行调用