day16 python(4)——UnitTest

【没有所谓的运气🍬,只有绝对的努力✊】

目录

1、UnitTest框架介绍

[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】

[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、断言

[3.1 断言练习](#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(测试用例)

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视频补充下。

相关推荐
m0_640309304 分钟前
如何将 sticky 元素精确定位到父容器的右上角
jvm·数据库·python
带娃的IT创业者7 分钟前
深度解析 Claude Design:如何利用 Anthropic 最新设计范式构建 AI 原生应用
人工智能·python·llm·claude·应用开发·anthropic·ai原生应用
是梦终空10 分钟前
计算机毕业设计271—基于python+深度学习+YOLOV7的车牌识别系统(源代码+数据库+3万字论文)
python·深度学习·opencv·yolo·毕业设计·pyqt5·车牌识别系统
m0_3776182317 分钟前
c++如何将双精度浮点数以科学计数法写入文件_scientific标志【详解】
jvm·数据库·python
weixin_4249993620 分钟前
如何检测SQL注入风险_利用模糊测试技术发现漏洞
jvm·数据库·python
2301_7751481523 分钟前
如何用正则具名捕获组 (-) 提升复杂数据的提取效率
jvm·数据库·python
2501_9142459327 分钟前
Go语言如何在VSCode中开发_Go语言VSCode配置教程【避坑】.txt
jvm·数据库·python
2301_7826591831 分钟前
MongoDB如果有一个分片完全宕机集群还能用吗_受影响数据的不可读与分片隔离感知
jvm·数据库·python
justjinji32 分钟前
JavaScript中严格模式use-strict对引擎解析的辅助
jvm·数据库·python
Absurd58734 分钟前
CSS如何使用-default获取默认选项样式_通过状态伪类突出预选表单项
jvm·数据库·python