介绍前,思考以下问题
- 测试数据如何自动化清除(运行前和运行后)
- 多个测试用例,如何组织在一起执行
- 多个测试用例的结果,如何展示在一份报告上
01:什么是Unittest
是python自带的单元测试框架(不需要安装),主要适用于单元测试,可以对多个测试用例进行管理和封装
Unittest也叫pyunit,它提供了很多类和方法来处理各种测试工作
单元测试-用一部分代码测试另一部分代码
02:四大功能组成
(一)测试用例----testcase
- 测试用例必须在类中
- 测试用例所在的类,必须继承Unittest.TestCase
- 测试用例的方法名称必须以test开头
- 测试用例的执行顺序,按照Ascill码顺序(0~9,A~Z,a~z)
- 利用父类TestCase的assertXXXX方法来断言
- 用@unittest.skip(reason)装饰来跳过测试用例
(二)测试固件----testfixture
- 也叫测试夹件,主要工作是【初始化和善后】
- 测试固件分为两种,一种是类级别的,一种是方法级别的
- 类级别的测试固件,所有测试用例执行之前与之后运行一次
- 方法级别的测试固件,每个测试用例执行之前与之后都运行一次
1.示例一代码(方法级别):
运行结果(鼠标顶格运行 ):
2.示例二代码(类级别):
运行结果:
3.断言assert
断言失败的话,用例2之后的测试用例不执行
由此得出Unittest缺点--不能批量执行测试用例
改造Unittest自己的assert:self.assertEqual
报错后可继续执行下面的用例,且打印到测试报告中
4.跳过某个测试用例
使用@unittest.skip(reason)装饰
(三)测试套件----testsuite
- 是用来组织测试用例的
- 如:
方法一:用例逐个添加到suite
import unittest # 1构建测试套件test_suite # 1-1 方法一:逐个添加到suite suit = unittest.TestSuite() suit.addTest(UnittestDemo('test_001')) suit.addTest(UnittestDemo('test_002'))
方法二:用例放入列表中,再添加到suite
suite = unittest.TestSuite() list=[类名1("方法名1"),类名2("方法名2")] suite.addTests(list) 例: list=[UnittestDemo('test_001'),UnittestDemo('test_002')] suite.addTests(list)
方法三:通过TestLoader类的discover 方法来
suite = unittest.defaultTestLoader.discover('用例所在的模块', pattern="*通配*.py")
discover(start_dir,pattern='test*.py',top_level_dir=None)
-case_dir:这个是待执行用例的目录。
-pattern:这个是匹配脚本名称的规则,test*.py 意思是匹配 test 开头的所有脚本。
-top_level_dir:这个是顶层目录的名称,一般默认等于 None 就行了。
(四)测试运行器----testrunner
- 是用来执行测试用例的
- 第一种输出方法
runner=unittest.TextTestRunner() #实例化TestRunner类 runner.run(suite)#执行用例
03: HTMLTestRunner--输出报告
ClassicHTMLTestRunner下载解压
放在此下目录,整个项目可通用
导入:
from ClassicHTML.TestRuner import HTML.TestRunner
- 第二种输出方法,使用HTMLTestRunner
runner = HTML.TestRunner(tester = '测试报告人','title'='测试报告', description='接口测试报告'.stream = '文件路径',verbosity=2#详细描述) runner.run(suite)
04:DDT数据驱动
解决问题:如何解决批量运行问题
ddt官方文档地址:https://pypi.org/project/ddt/
安装:
pip install ddt
导入:
from ddt import ddt,data,unpack
- ddt.ddt:装饰类,也就是继承TestCase的类。
- ddt.data:装饰测试方法,参数是一系列的值。
- ddt.unpack:传递的是复杂的数据结构时使用,比如使用列表或者元组,添加unpack后,ddt会自动把元组或者列表对应到多个参数上
代码中加入:
@ddt #类上面加上ddt class UnittestDemo(unittest.TestCase): #测试用例 @data(放参数) def test_005(self,data):