day16 python(4)——UnitTest
【没有所谓的运气🍬,只有绝对的努力✊】
目录
1、UnitTest框架介绍
1.1 UnitTest框架
1.2 unitTest的组成(5部分)
1.2.1 TestCase(测试用例)
1.2.2 TestSuit 和 TestRunner
【方法1】
【方法2】
1.2.3 查看结果
1.2.4 案例练习
1.2.5 TestLoader测试加载
1.2.6 Fixture测试夹具
3、断言
3.1 断言练习
4、参数化
5、跳过
6、测试报告HTMLTestRunner
7、小结
1、UnitTest框架介绍
参考文档:unittest --- 单元测试框架 — Python 3.13.1 文档
1.1 UnitTest框架
1.2 unitTest的组成(5部分)
1.2.1 TestCase(测试用例)
"""
使用 unittest 练习 TestCase用例
"""
# 1、导入包
import unittest# 2、定义测试类
class TestDemo(unittest.TestCase):# 3、写测试方法def test_method1(self):print('测试方法1')def test_method2(self):print('测试方法2')# 4、执行测试用例 (鼠标右键即可)
1.2.2 TestSuit 和 TestRunner
【方法1】
"""使用 testSuit 和 testRunner 完成练习
"""
import unittestfrom day01_testcase import TestDemo1
from day01_testcase2 import TestDemo2suite = unittest.TestSuite()# 方法1 套件对象.addTest(测试类名('方法名'))
suite.addTest(TestDemo1('test_method1'))
suite.addTest(TestDemo1('test_method2'))
suite.addTest(TestDemo2('test_method1'))
suite.addTest(TestDemo2('test_method2'))runner = unittest.TextTestRunner()
runner.run(suite)
【方法2】
"""使用 testSuit 和 testRunner 完成练习
"""
import unittestfrom day01_testcase import TestDemo1
from day01_testcase2 import TestDemo2suite = unittest.TestSuite()# 方法1
# suite.addTest(TestDemo1('test_method1'))
# suite.addTest(TestDemo1('test_method2'))
# suite.addTest(TestDemo2('test_method1'))
# suite.addTest(TestDemo2('test_method2'))# 方法2
suite.addTest(unittest.makeSuite(TestDemo1)) # makeSuite 在python的3.13版本中已经被去除了。
suite.addTest(unittest.makeSuite(TestDemo2))runner = unittest.TextTestRunner()
runner.run(suite)
1.2.3 查看结果
1.2.4 案例练习
1.2.5 TestLoader测试加载
1.2.6 Fixture测试夹具
import unittestclass TestLogin(unittest.TestCase):def setUp(self) -> None: # 每个用例执行前都会执行print('打开网页。。。。。')def tearDown(self) -> None: # 每个用例执行结束都会执行print('关闭页面。。')@classmethoddef setUpClass(cls) -> None:print('1、打开浏览器')@classmethoddef tearDownClass(cls) -> None:print("5、关闭浏览器")def test_login1(self):print('执行登录01')def test_login2(self):print('执行登录02')
3、断言
3.1 断言练习
4、参数化
pip install parameterized
import unittest
from parameterized import parameterized
from case.login import login# 4、准备测试数据 并传参 (使用装饰器 @)
data = [('admin','123456','登录成功'),('test','123456','登录失败'),('admin','1234566','登录失败'),('test','1234567','登录失败')
]
# 1、定义测试类
class TestLogin(unittest.TestCase):# 2、书写测试方法@parameterized.expand(data)def test_login(self,username,password,expect):self.assertEqual(expect,login(username,password))
import unittest
from parameterized import parameterized
from case.login import login
import json# 4、准备测试数据 并传参 (使用装饰器 @)
# data = [
# ('admin','123456','登录成功'),
# ('test','123456','登录失败'),
# ('admin','1234566','登录失败'),
# ('test','1234567','登录失败')
# ]def buildData():data = []with open('info.json', 'r', encoding='utf-8') as f:json_list = json.load(f)for i in json_list:data.append((i['username'], i['password'], i['expect']))return data
# 4、读取json文件,并转换成 [(),(),()] 格式
data = buildData()# 1、定义测试类
class TestLogin(unittest.TestCase):# 2、书写测试方法@parameterized.expand(data)def test_login(self,username,password,expect):self.assertEqual(expect,login(username,password))
[{"desc": "正确的用户名和密码","username": "admin","password": "123456","expect": "登录成功"},{"desc": "错误的用户名","username": "test","password": "123456","expect": "登录失败"},{"desc": "错误的密码","username": "admin","password": "1234567","expect": "登录失败"},{"desc": "错误的用户名和密码","username": "test","password": "1234567","expect": "登录失败"}
]
5、跳过
import unittestversion = 30class TestDemo(unittest.TestCase):@unittest.skip('没有原因,就是测试下跳过')def test_01(self):print('测试01')@unittest.skipIf(version >= 30,"版本大于30的跳过执行")def test_02(self):print('测试02')def test_03(self):print('测试03')
6、测试报告HTMLTestRunner
代码流程:
7、小结
黑马的python课程到此结束啦。但是感觉 unitTest那块,还需要加强下,准备找其他unitTest视频补充下。