unittest:是python自带的一个单元测试框架,也是最基本的单元测试框架,存在在python安装目录下的Lib目录下。
unittest的四个核心概念:
test case:测试用例
test fixture:测试夹具
test runner:测试执行
test suite:测试套件
unittest的书写规范:
1.测试文件必须以test开头;
2.测试类必须继承unittest.TestCase类;
3.测试类必须以Test开头,如:class TestLogin(unittest.TestCase)
4.测试方法最好以test开头,如:def test_01_login(self)
5.在测试的py文件里面去执行代码,必须使用unittest.main()
6.在测试类里面,可以有普通方法需要被测试方法调用
test fixture 测试夹具:
方法级别:setUp() 在每一个方法执行之前,执行setUp的代码
teardown() 在每一个方法执行之后,执行teardown的代码
类级别: setUpClass() 在每一个测试类执行之前执行的方法,用@classmethod装饰器来装饰
teardownClass() 在每一个测试类执行之后执行的方法,用classmethod装饰器来装饰
用例执行的顺序:在unittest里,用例执行顺序默认是按照ASCⅡ码的顺序来执行;
可以通过给每条用例加上编号,来控制执行的顺序
断言: 判断预期结果与实际结果是否相等
self.assertEqual(a,b,msg='错误描述') 判断a==b,成立,则通过
self.assertTrue(x,msg='错误描述') 判单表达式x是否为True,为True则通过
self.assertIn(a in b,msg='错误描述') 判断a in b 则通过
跳过测试:当某些用例在一些情况下不需要被执行,可以跳过
当系统更行之后,部分的测试用例失效,但是不确定后面是否还会再改回来,就直接跳过
装饰器实现跳过测试用例:
@unittest.skip(原因) 没有条件,直接跳过
@unittest.skipIf(表达式,原因) 表达式为真,跳过测试
@unittest.skipunless(表达式,原因) 表达式为假,跳过测试
test suite 测试套件:把需要执行的测试用例放到一个套子里
test runner 测试执行: 使用测试执行值执行套件里的测试用例
添加不同的测试用例:
suite = unittest.TestCase()
suite.addTest(测试类('测试方法'))
实例化测试执行:
runner = unittest.TextTestRunner()
runner.run(suite)
添加所有的测试用例
suite = unittest.defaultTestLoader.discover('目录',pattern='测试用例匹配规则')
HTMLTestRunner 第三方插件
生成的报告应该存放在Report里,报告的名字以.html结尾:
report_path = os.path.dirname(__file__) + '/'
report_name = os.path.dirname(__file__) + now + 'Report.html'
suite = unittest.defaultTestLoader.discover('../Case')
with open(report_name, 'wb') as fq:
runner = HTMLTestRunnerPlugins.HTMLTestRunner(
stream=fq,
verbosity=2,
title='',
description='',
tester=''
)
runner.run(suite)
数据驱动
有的用例只是参数不一样,其他代码完全一样,就可以通过改变测试参数来实现一条用例方法执行多种不同的测试场景,在unittest里使用ddt
列表嵌套列表读取:
类前面 @ddt.ddt
方法前: @ddt.data(*data_list)
@ddt.unpack
列表嵌套字典读取
类前面 @ddt.ddt
方法前 @ddt.data(*data_dict) 方法里只用一个参数来接收 data_dict