unittest测试框架
单元测试
单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
单元测试介入越早,效果越好。
大前提
根据需求\设计的逻辑写测试用例
单元测试框架
Unittest
Python内置的标准类库。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很相似
Pytest
丰富、灵活的测试框架,语法简单,可以结合allure生成一个炫酷的测试报告,现在比较主流
Nose
Nose是对unittest的扩展,使得python的测试更加简单。
Mock
unittest.mock是用来测试python的库。这个是一个标准库(出现在python3.3版本以后)
单元覆盖率
代码覆盖率也被用于自动化测试和手工测试来度量测试是否全面的指标之一,应用覆盖率的思想增强测试用例的设计
单元覆盖率类型
- 语句覆盖
- 条件覆盖
- 判断覆盖
- 路径覆盖
例子
待测语句
def demo_method(a, b, x):
if (a > 1 and b == O):
x = xl a
if (a == 2 or x > 1):
x =x +1
return x
语句覆盖
- 通过设计一定量的测试用例,保证被测试的方法每一行代码都会被执行一遍
- 运行测试用例的时候被击中的代码行即称为被覆盖的语句
- 测试用例
a=2,b=0,x=3 - 漏洞
and->or
判断覆盖
- 运行测试用例过程中被击中的判定语句
- 测试用例
- 缺陷
测试用例指数级增加
条件覆盖
- 与判定判定类似,不过条件覆盖关注某个判断条件
- 缺陷
测试用例指数级增加
路径覆盖
- 覆盖所有可能执行的路径
- 测试用例
- 主流设计测试用例的方法
unittest 框架介绍
- python自带的单元测试框架,常用在单元测试
- 在自动化测试中提供用例组织与执行
- 提供丰富的断言方法-验证函数等功能
- 加上HTMLTestRunner可以生成html的报告
- 现在依然有一些公司在用这个框架
编写与规范
- unittest 提供了test cases、test suites、test fixtures、test runner等相关组件
- 测试模块首先 import unittest
- 测试类必须继承unitteset.TestCase
- 测试方法必须易“test_”开头
- 模块名字,类名没有特殊要求
测试框架结构
- setUp 用来为测试准备环境,tearSown用来清理环境
import unittest
class demo(unittest.TestCase):
def setUp(self) -> None:
print("setup")
def tearDown(self) -> None:
print("teardown")
def test_case01(self):
print("testcase01")
self.assertEqual(1,2,"判断相等")
if __name__=='__main__':
unittest.main() #把当前.py下测试用例全都执行
-
setUp():每个测试方法运行前运行,测试前的初始化工作。一条用例执行一次,若N次用例就执行N次,根据用例的数量来定。
-
setUpClass():所有的测试方法运行前运行,为单元测试做前期准备,但必须使用@classmethod装饰器进行修饰,整个测试过程中只执行一次。
-
tearDown():每个测试方法运行结束后运行,测试后的清理工作。一条用例执行一次,若N次用例就执行N次。
-
tearDownClass():所有的测试方法运行结束后运行,为单元测试做后期清理工作,但必须使用@classmethod装饰器进行修饰,整个测试过程中只执行一次。
在测试用例前添加
@unittest.skip
可跳过本条测试用例
unittest 断言