- 断言
使用代码自动的判断预期结果和实际结果是否相符
assertEqual(预期结果,实际结果)
- 判断预期结果 和 实际结果是否相等,如果相等,用例通过,如果不想等,抛出异常,用例不通过
assertIn(预期结果,实际结果)
- 判断预期结果是否包含在 实际结果中,如果存在,用例通过,如果不存在,抛出异常,用例不通过
- hm_01_assert.py(断言用例)
import unittestclass TestAssert(unittest.TestCase):def test_equal_1(self):self.assertEquals(10, 10) # 用例通过def test_assert_2(self):self.assertEquals(10, 11) # 用例不通过def test_in(self):# self.assertIn('admin', '欢迎 admin 登录') # 包函 通过# self.assertIn('admin', '欢迎 adminnnnnnnnn 登录') # 包函 通过# self.assertIn('admin', '欢迎 aaaaaaadminnnnnnnnn 登录') # 包函 通过self.assertIn('admin', '欢迎 addddmin 登录') # 不包函 不通过# self.assertIn('admin', 'admin')
- hm_01_suite.py(执行用例)
import unittestfrom testDemo8.hm_01_assert import TestAssertsuite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestAssert))runner = unittest.TextTestRunner()
runner.run(suite)
- 作业
- tools.py
# 这是开发的代码,测试写测试用例测试
def add(a, b):return a + b
- hm_02_test_add.py(测试用例)
import unittest
from testDemo8.tools import add
class TestAdd(unittest.TestCase):def test_1(self):self.assertEquals(2, add(1, 1))def test_2(self):self.assertEquals(3, add(1, 2))def test_3(self):self.assertEquals(7, add(3, 4))def test_4(self):self.assertEquals(9, add(4, 5))
- 参数化
- 通过参数的方式来传递数据,从而实现数据和脚本分离。并且可以实现用例的重复执行。(在书写用例方法的时候**,测试数据使用变量代替,在执行的时候进行参数传递**)
- unittest 测试框架,本身不支持参数化,但是可以通过安装unittest扩展插 件 parameterized 来实现。
- 环境准备
因为参数化的插件 不是 unittest 自带的,所以想要使用 需要进行安装
Python 中 包(插件,模块) 的安装,使用 pip 工具
pip3 install parameterized
pip install -i https://pypi.douban.com/simple/ parameterized在终端(cmd)中执行
pip3 list # 查看安装的所有的插件
from pa… import pa…
from parameterized import parameterized
- 使用
- 导包
from para... import para...
- 修改测试方法,将测试方法中的
测试数据使用 变量表示
- 组织测试数据,格式
[(), (), ()],
一个元组就是一组测试数据
- 参数化,在
测试方法上方使用装饰器 @parameterized.expand(测试数据)
- 运行(直接 TestCase 或者
使用 suite 运行
)
import unittest
from testDemo8.tools import add
from parameterized import parameterizeddata = [(1, 1, 2), (1, 2, 3), (2, 3, 5), (4, 5, 9)]class TestAdd(unittest.TestCase):"""expect:预期结果"""@parameterized.expand(data)def test_add(self, a, b, expect):print(f'a:{a}, b:{b}, expect:{expect}')self.assertEquals(expect, add(a, b))if __name__ == '__main__':unittest.main()
- 练习
将测试数据 定义为 json 文件*(列表数据格式)*, 读取 json 文件,完成参数化
使用round保留2为小数,
- 练习进阶
**json测试数据是列表字典格式 [{},{},{},……]
1)测试数据.json
2)read_data_1.py(读取测试数据)
import json
def build_data_1():with open('add_data_1.json', 'r', encoding='utf-8') as f:data_list = json.load(f) # [{},{},{},{}]new_list = []for data in data_list: # 字典a = data.get('a')b = data.get('b')expect = data.get('expect')# c = (a, b, expect) # 元组# new_list.append(c) # 元组放入列表中 [(),(),()]new_list.append((a, b, expect)) # 也可以一步到位,元组放入列表中 [(),(),()]return new_listdef build_data_2():with open('add_data_1.json', 'r', encoding='utf-8') as f:data_list = json.load(f) # [{},{},{},{}]new_list = []for data in data_list: # 字典# 字典的值,是否都需要# 获取所有字典的值 data.values()# 将一组字典的值放入元组中 ,tuple(data.values())转换# 放到新列表中new_list.append(tuple(data.values()))return new_listif __name__ == '__main__':print(build_data_1())print(build_data_2())
3)hm_03_test_add_pa1_1.py(执行测试用例)
import unittest
from testDemo8.tools import add
from parameterized import parameterized
from read_data_1 import build_data_1,build_data_2# data = [(1, 1, 2), (1, 2, 3), (2, 3, 5), (4, 5, 9)]class TestAdd(unittest.TestCase):"""expect:预期结果"""# @parameterized.expand(build_data_1())@parameterized.expand(build_data_2())def test_add(self, a, b, expect):print(f'a:{a}, b:{b}, expect:{expect}')self.assertEquals(expect, add(a, b))if __name__ == '__main__':unittest.main()