断言的类型
assertEqual(预期结果,实际结果)
判断预期结果和实际结果是否相等,如果相等, 用例通过,如果不相等,抛出异常, 用例不通过
assertIn(预期结果,实际结果)
判断预期结果是否包含在 实际结果中, 如果存在,用例通过, 如果不存在,抛出异常,用例不通过
import unittest
class TestAssert(unittest.TestCase):
def test_equal_1(self):
self.assertEqual(10, 10) # 用例通过
def test_assert_2(self):
self.assertEqual(10, 11) # 用例不通过
def test_in(self):
# self.assertIn('admin', '欢迎 admin 登录') # 包含 通过
# self.assertIn('admin', '欢迎 adminnnnnnnn 登录') # 包含 通过
# self.assertIn('admin', '欢迎 aaaaaadminnnnnnnn 登录') # 包含 通过
# self.assertIn('admin', '欢迎 adddddmin 登录') # 不包含 不通过
self.assertIn('admin', 'admin') # 包含 通过
import unittest
# 导入需要使用的 assert 语句
from hm_02_assert import TestAssert
# 创建一个测试用例集合
suite = unittest.TestSuite()
# 添加测试用例
suite.addTest(unittest.makeSuite(TestAssert))
# 使用 Python 的单元测试运行器(TextTestRunner)运行测试用例
unittest.TextTestRunner().run(suite)
参数化
通过参数的方式来传递数据,从而实现数据和脚本分离。并且可以实现用例的重复执行。(在书写用例方法的时候,测试数据使用变量代替,在执行的时候进行据说传递)
环境准备
因为参数化的插件 不是 unittest 自带的,所以想要使用 需要进行安装
Python 中 包(插件,模块) 的安装,使用 pip 工具
pip install parameterized
pip install -i https://pypi.douban.com/simple/ parameterized
使用
- 导包 from para… import para…
- 修改测试方法,将测试方法中的测试数据使用 变量表示
组织测试数据,格式 [(), (), ()]
, 一个元组就是一组测试数据- 参数化,
在测试方法上方使用装饰器 @parameterized.expand(测试数据)
- 运行(直接
TestCase
或者 使用suite
运行)
import unittest
#1. 导包 from para... import para...
from tools import add
from parameterized import parameterized
#3. 组织测试数据,格式 [(), (), ()], 一个元组就是一组测试数据
data = [(1, 1, 2), (1, 2, 3), (2, 3, 5), (4, 5, 9)]
# 定义一个测试用例类
class TestAdd(unittest.TestCase):
# 定义一个测试函数
#4. 参数化,在测试方法上方使用装饰器 @parameterized.expand(测试数据)
@parameterized.expand(data)
def test_add(self, a, b, expect):
print(f'a:{a}, b:{b}, expect:{expect}')
#2. 修改测试方法,将测试方法中的测试数据使用 变量表示
self.assertEqual(expect, add(a, b))
if __name__ == '__main__':
unittest.main()
参数化练习
json 文件
[
[1, 1, 2],
[1, 2, 3],
[2, 3, 5],
[4, 5, 9],
[10, 20, 30]
]
读取 json 文件
import json
def build_add_data():
with open('add_data.json') as f:
data = json.load(f) # [[], [], []] ---> [(), ()]
return data
代码文件
import unittest
from read_data import build_add_data
from tools import add
from parameterized import parameterized
data = [(1, 1, 2), (1, 2, 3), (2, 3, 5), (4, 5, 9)]
class TestAdd(unittest.TestCase):
@parameterized.expand(build_add_data())
def test_add(self, a, b, expect):
print(f'a:{a}, b:{b}, expect:{expect}')
self.assertEqual(expect, add(a, b))
if __name__ == '__main__':
unittest.main()