1、unittest简介
UnitTest是Python自带的一个单元测试框架,用它来做单元测试。也经常应用到UI自动化测试和接口自动化测试中,用来管理和维护测试用例脚本
使用UnitTest框架的好处:
1. 能够组织多个用例去执行(可以把多条测试用例封装成一个测试套件,实现批量执行测试用例)
2. 提供了丰富的断言方法,方便对用例执行的结果进行判断
3. 能够生成HTML格式的测试报告
4. 使用Fixture功能可以减少代码的冗余
UnitTest核心要素:
TestCase:通过继承TestCase类,我们可以创建一个test,或者一组tests
TestFixtures:setup + test_case + teardown结构
TestSuite:测试套件:多条测试用例集合在一起,就是一个TestSuite使用
TestRunner:TextTestRunner是用来执行测试用例和测试套件的
2、TestCase
如何定义测试用例
1.导包:import unittest
2.定义测试类:新建测试类必须继承unittest.TestCase
3.定义测试方法:测试方法名称命名必须以test开头
如何执行测试用例
方式一:使用pycharm在代码上点击鼠标右键,选择使用UnitTest运行
方式二:调用unittest.main()来运行
3、TextFixture
Fixture是一个概述,对一个测试用例环境的初始化和销毁就是一个Fixture。
方法级别使用:
1.初始化 ( 前置处理 ):def setUp(self) --> 首先自动执行
2. 销毁 ( 后置处理 ):def tearDown(self) --> 最后自动执行
3. 运行于测试方法的始末,即:运行一次测试 方法就会运行一次 setUp 和 tearDown
类级别使用:
1.初始化 ( 前置处理 ):@classmethoddef setUpClass(cls): --> 首先自动执行
2. 销毁 ( 后置处理 ):@classmethoddef tearDownClass(cls): --> 最后自动执行
3. 运行于测试类的始末,即:每个测试类只会 运行一次 setUpClass 和 tearDownClass
4、TestSuite和TestRunner
TestSuite的使用
实例化:suite=unittest.TestSuite() (suite:为TestSuite实例化的名称)
添加用例:suite.addTest(ClassName(“MethodName”))(ClassName:为类名;MethodName:为方法名)
添加扩展:suite.addTest(unittest.makeSuite(ClassName))(搜索指定ClassName内test开头的方法并添加到测试套件中)
提示:TestSuite需要配合TestRunner才能被执行
TextTestRunner的使用
1.实例化:runner=unittest.TextTestRunner()
2.执行:runner.run(suite)#suite:为测试套件名称
5、断言
什么是断言?
概念:让程序代替人为判断测试程序执行结果是否符合预期结果的过程。UnitTest 中提供了非常丰富的断言方法,但是常用的也就那么几个,并且使用起来也比较简单
6、参数化
UnitTest 参数化
通过参数的方式来传递数据,从而实现数据和脚本分离,也可以把测试数据定义到数据文件或者数据库中。
针对同一个测试方法,可以实现用例的重复执行,减少代码冗余,提高测试效率。
unittest测试框架,本身不支持参数化,但是可以通过安装 unittest 扩展插件parameterized 来实现。
parameterized 使用方式
导包:from par ameterized import par ameterized
使用@parameterized.expand 装饰器可以为测试函数的参数进行参数化
7、跳过用例
在执行测试用例时,有时候有些用例是不需要执行的,那我们怎么办呢?
难道删除这些用例?那下次执行时如果又需要执行这些用例时,又把它补回来?这样操作就太麻烦了。
unittest提供了一些跳过指定用例的方法
@unittest.skip(reason):强制跳转。reason是跳转原因
@unittest.skipIf(condition, reason):condition为True的时候跳转
@unittest.skipUnless(condition, reason):condition为False的时候跳转
@unittest.expectedFailure
8、生成HTML报告
测试脚本执行完后,可以生成以 HTML( 网页 ) 格式的测试报告
为什么要生成测试报告?
(1)测试报告是本次测试结果的体现形态
(2)测试报告内包含了有关本次测试用例的详情
使用HTMLTestRunner 生成测试报告
使用方法:
1.复制 HTMLTestRunner.py 文件到项目文件夹
2. 导入 HTMLTestRunner 、 unittest 包
3. 生成测试套件suite = unittest.TestSuite()
suite.addTest(TestAdd("test_01"))
4. 设置报告生成路径和文件名 file_name = "./report/report.html“
5. 打开报告 with open(file_name,'wb') a s f:
6 . 实例化 HTMLTestRunner 对象: runner = HTMLTestRunner(stream=f,[title],[description])
参数说明:
stream :文件流,打开写入报告的名称及 写入编码格式 )
title : [ 可选参数 ] ,为报告标题
description : [ 可选参数 ] ,为报告描 述信息
7. 执行: runner.run(suite)
注:执行测试报告的文件应该写在run.py文件里,不能写在test_*文件里,否则无法生成报告。