【没有所谓的运气🍬,只有绝对的努力✊】
目录
[1.1 UnitTest框架](#1.1 UnitTest框架)
[1.2 unitTest的组成(5部分)](#1.2 unitTest的组成(5部分))
[1.2.1 TestCase(测试用例)](#1.2.1 TestCase(测试用例))
[1.2.2 TestSuit 和 TestRunner](#1.2.2 TestSuit 和 TestRunner)
[1.2.3 查看结果](#1.2.3 查看结果)
[1.2.4 案例练习](#1.2.4 案例练习)
[1.2.5 TestLoader测试加载](#1.2.5 TestLoader测试加载)
[1.2.6 Fixture测试夹具](#1.2.6 Fixture测试夹具)
[3.1 断言练习](#3.1 断言练习)

1、UnitTest框架介绍
1.1 UnitTest框架

1.2 unitTest的组成(5部分)
1.2.1 TestCase(测试用例)


python
"""
使用 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】
python
"""
使用 testSuit 和 testRunner 完成练习
"""
import unittest
from day01_testcase import TestDemo1
from day01_testcase2 import TestDemo2
suite = 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】
python
"""
使用 testSuit 和 testRunner 完成练习
"""
import unittest
from day01_testcase import TestDemo1
from day01_testcase2 import TestDemo2
suite = 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测试夹具



python
import unittest
class TestLogin(unittest.TestCase):
def setUp(self) -> None: # 每个用例执行前都会执行
print('打开网页。。。。。')
def tearDown(self) -> None: # 每个用例执行结束都会执行
print('关闭页面。。')
@classmethod
def setUpClass(cls) -> None:
print('1、打开浏览器')
@classmethod
def tearDownClass(cls) -> None:
print("5、关闭浏览器")
def test_login1(self):
print('执行登录01')
def test_login2(self):
print('执行登录02')

3、断言


3.1 断言练习


4、参数化


python
pip install parameterized

python
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))
python
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))
python
[
{
"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、跳过

python
import unittest
version = 30
class 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视频补充下。