Pycharm — UnitTest
UnitTest框架
介绍
是Python⾃带的一个单元测试框架,可以用来做单元测试
测试⼈员⽤来做⾃动化测试,作为⾃动化测试的执⾏框架,即管理和执⾏⽤例的
使用好处
- 1. 能够组织多个⽤例去执⾏
- 2. 提供丰富的断⾔⽅法
- 3. 能够⽣成测试报告
UnitTest核心要素(组成)
- 1. TestCase测试⽤例,⽤来书写真正的⽤例代码(脚本)
- 2. TestSuite测试套件,⽤来组装(打包)TestCase(测试⽤例)的,即可以将多个⽤例脚本⽂件组装到⼀起
- 3. TestRunner测试执⾏(测试运⾏),用来执⾏TestSuite(测试套件)
- 4. TestLoader测试加载,是对 TestSuite(测试套件) 功能的补充,⽤来组装(打包) TestCase(测试⽤例)
- 5. Fixture测试夹具,是⼀种代码结构,书写前置⽅法(执⾏⽤例之前的⽅法)代码和后置⽅法(执⾏⽤例之后的⽅法)代码,即⽤例执⾏顺序:前置 ---> ⽤例 ---> 后置
TestCase测试用例
一个测试用例就是一个.py文件,文件中可创建多个测试类,类中可创建多个测试方法。
测试用例编写示例:
- 1. 导包:import unittest
- 2. 定义测试类:新建测试类必须继承:unittest.TestCase
- 3. 定义测试方法:测试方法名称命名必须以test开头
- 4. 执行
TestSuite测试套件
将多条⽤例脚本集合在⼀起,就是套件,即⽤来组装⽤例的。
使用步骤:
1. 实例化测试套件:suite = unittest.TestSuite()
2. (方式一)添加一个测试类中的一个测试方法:
suite.addTest(ClassName("MethodName"))
其中,ClassName:类名;MethodName:方法名
(方式二)添加一个测试类:
suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(ClassName))
suite.addTest(unittest.makeSuite(ClassName))
把指定ClassName测试类中的测试用例全部添加到测试套件中
使用示例:
创建cal.py文件,编写TestAdd类和TestSub类,及类内方法
编写 hm_02_testsuite.py文件,右键运行
测试结果:
TestRunner测试执⾏
用来执⾏TestSuite(测试套件)
使用步骤:(示例看上图)
- 1. 导包 import unittest
- 2. 实例化 执⾏对象:unittest.TextTestRunner()
- 3. 执⾏对象.run(套件对象)
TestLoader测试加载
TestSuite一次只能添加单个测试方法或单个测试类,而TestLoader能一次添加多个测试用例(.py文件)
用来加载TestCase到TestSuite中,即加载满足条件的测试用例,并把测试用例封装成测试套件。
使用unittest.TestLoader,通过该类下面的discover()方法自动搜索指定目录下指定开头的.py文件,并将查找到的测试用例组装到测试套件。
Fixture测试夹具
在⽤例执⾏前后会⾃动执⾏的代码结构
⽅法级别Fixture
在每个测试方法执⾏前后,会执行一次setUp和tearDown
比如:登录需要先验证码,可以把获取验证码的请求放在前置方法里。
类级别Fixture
在每个测试类执行前后,会执行一次setUpClass和tearDownClass
模块级别Fixture(了解)
模块,就是代码⽂件
在每个模块执⾏前后,会执⾏⼀次setUpModule和tearDownModule
示例:
UnitTest断言
使用代码自动的判断预期结果和实际结果是否相符
常用断言方法
assertEqual(预期结果,实际结果)
判断预期结果和实际结果是否相等,如果相等,用例通过;如果不相等,抛出异常,用例不通过。
assertIn(预期结果,实际结果)
判断预期结果是否包含在实际结果中,如果存在,用例通过,如果不存在,抛出异常,用例不通过。
断言使用方式
断言方法已经在unittest.TestCase类中定义了,我们自定义的测试类已经继承了TestCase,所以在测试方法中直接调用父类中的断言方法即可。
parameterized 参数化
安装 parameterized 插件
因为参数化的插件不是unittest自带的,所以想要使用,需要进行安装。
安装方式有多种,可以在终端Terminal通过代码安装;可以在Settings设置通过搜索来安装,还可以通过导入离线安装包来安装。
使用步骤
- 1. 导包 from parameterized import parameterized
- 2. 修改测试方法,将测试方法中的测试数据使用变量表示
- 3. 组织测试数据,格式 [(), (), ()],一个元组就是一组测试数据
- 4. 参数化,在测试方法上方使用装饰器 @parameterized.expand(测试数据)
- 5. 运行(直接 TestCase 或者使用 suite 运行)
注意:测试数据的格式为列表内嵌元组:[(), (), ()],一个元组就是一组测试数据。
方法一:get()方法把需要的值取出,组成元组,再添加进列表。
方法二:values()方法获取所有值,转为元组,再添加到列表。(推荐)
测试报告
生成测试报告需要第三方工具插件,插件有很多。比如 HTMLTestReport 插件。
安装命令:pip install HTMLTestReport
使用步骤
- 1. 导包:from htmltestreport import HTMLTestReport
- 2. 封装测试套件:TestSuite或者TestLoader
- 3. 实例化 HTMLTestReport 对象
- 4. 执行测试套件
举例:登录用例测试,生成测试报告
1、创建一个目录:login_report
2、编写测试数据(login_data.json)
3、配置路径(config.py)
4、定义方法:读取测试数据、登录判断
5、编写测试用例,参数化
6、生成测试报告
跳过
对于一些未完成的或者不满足测试条件的测试函数和测试类,可以跳过执行。
使用方式
1.直接将测试函数标记成跳过
@unittest.skip('跳过的原因描述')
2.根据条件判断测试函数是否跳过
@unittest.skipIf(判断条件, reason='原因') # 判断条件为 True, 执行跳过
举例