Unittest加载测试用例居然没有标签功能,怪我咯?那我自己封装一个,那都不是事!

需求分析

  • 假设当前4条用例,需要执行test02和test04用例,那么可以通过测试套件的方式去实现这个需求
  • 如果当前有100条用例,只需执行其中某些用例。怎么办呢?
#! /usr/bin/python3
# -*- coding:utf-8 -*-
# @公众号  : 码上开始

import unittest

class TestCase(unittest.TestCase):

    def test01(self):
        print("执行第1条用例")

    def test02(self):
        print("执行第2条用例")

    def test03(self):
        print("执行第3条用例")

    def test04(self):
        print("执行第4条用例")

解决思路

给用例打标签,只运行某些具有标签的用例
unittest没有标签功能

  1. 在测试方法后面加标签的名称
  2. 获取该类所有定义的方法名(即以test开头的用例)
  3. add动态添加用例

封装代码

#! /usr/bin/python3
# -*- coding:utf-8 -*-

# @FileName: day5.py
# @Time    : 2020/8/9 20:57
# @公众号  : 码上开始

import unittest

class TestCase(unittest.TestCase):

    def test01(self):
        print("执行第1条用例")

    def test02_smoke(self):
        print("执行第2条用例")

    def test03(self):
        print("执行第3条用例")

    def test04_smoke(self):
        print("执行第4条用例")
if __name__ == "__main__":
    # 测试套件
    testcases = unittest.TestSuite()
    list_case = [ ]
    for case in dir(TestCase):
        # endswith如果方法名以smoke结尾添加到用例
        if case.endswith("smoke") and case.startswith("test"):
            list_case.append(case)
    # 只有符合条件的才会加到用列表里
    # print(list_case)
    # 列表的用例然后加到套件
    for smoke in list_case:
        testcases.addTest(TestCase(smoke))
    # 最后执行用例
    runner = unittest.TextTestRunner().run(testcases)

运行结果

执行第2条用例
执行第4条用例
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK

如果对软件测试、接口测试、自动化测试、持续集成、面试经验。感兴趣可以进到893694563,群内会有不定期的分享测试资料。还会有技术大牛,业内同行一起交流技术

### unittest框架搭建 Python安装时已默认封装UnitTest框架,调用框架时只需使用`import`语句即可,示例代码如下: ```python import unittest ``` ### 测试用例前后置 在unittest中,`setUp`作为前置条件,用于测试用例之前的准备工作;`tearDown`作为后置条件,用于测试用例之后的扫尾工作。这两个函数命名必须依照此格式和名称。示例代码如下: ```python import unittest class TestExample(unittest.TestCase): def setUp(self): print("这是前置条件") def tearDown(self): print("这是后置条件") def test_case(self): print("这是测试用例") if __name__ == '__main__': unittest.main() ``` ### 批量加载测试用例并运行 可以使用`TestSuite`和`TestLoader`来批量加载测试用例并运行。示例代码如下: ```python import unittest from unittest_Demo2 import TestDemo from unittest_Demo1 import Demo suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestDemo)) suite.addTest(unittest.makeSuite(Demo)) runner = unittest.TextTestRunner() runner.run(suite) ``` 也可以使用`defaultTestLoader.discover`方法批量加载测试用例,示例代码如下: ```python import unittest suite = unittest.defaultTestLoader.discover("./Case", pattern='test_03*.py') runner = unittest.TextTestRunner() runner.run(suite) ``` ### 生成测试报告 可以使用`HTMLTestRunner`来生成HTML格式的测试报告。首先需要安装`HTMLTestRunner`,然后使用以下示例代码生成报告: ```python import unittest from HTMLTestRunner import HTMLTestRunner suite = unittest.defaultTestLoader.discover("./Case", pattern='test_*.py') with open('test_report.html', 'wb') as f: runner = HTMLTestRunner(stream=f, title='测试报告', description='测试用例执行情况') runner.run(suite) ``` ### 根据已有数据设计测试用例(单独设计和数据驱动设计)及断言处理 #### 单独设计 单独设计测试用例时,每个测试用例函数命名必须以`test_`开头。示例代码如下: ```python import unittest class TestSingle(unittest.TestCase): def test_case1(self): result = 2 + 2 self.assertEqual(result, 4) def test_case2(self): result = 5 - 3 self.assertEqual(result, 2) if __name__ == '__main__': unittest.main() ``` #### 数据驱动设计 使用`ddt`库可以实现数据驱动设计。首先需要安装`ddt`库,示例代码如下: ```python import unittest from ddt import ddt, data, unpack @ddt class TestDataDriven(unittest.TestCase): @data((2, 2, 4), (5, 3, 2)) @unpack def test_case(self, a, b, expected): result = a + b self.assertEqual(result, expected) if __name__ == '__main__': unittest.main() ``` #### 断言处理 unittest封装好了成熟的断言方法,可以直接调用。常见的断言方法有: - `assertEqual(a, b)`:判断`a`和`b`是否相等。 - `assertTrue(x)`:判断`x`是否为`True`。 - `assertFalse(x)`:判断`x`是否为`False`。 - `assertIsNone(x)`:判断`x`是否为`None`。 - `assertIsNotNone(x)`:判断`x`是否不为`None`。 ### unittest框架基本规则 1. 编写代码时需遵循一定规则。 2. `setUp`(前置条件)和`tearDown`(后置条件)这两个函数,命名必须依照此格式和名称。 3. `Test_Case`在编写时,函数命名必须以`test_`开头。 4. unittest在运行时,需要通过调用`unittest.main()`进行运行。 ### 测试套件使用方法 测试套件`TestSuite`用于将多个测试用例集合起来。可以使用`addTest`方法添加测试用例,示例代码如下: ```python import unittest class TestDemo(unittest.TestCase): def test_case(self): pass suite = unittest.TestSuite() suite.addTest(TestDemo("test_case")) runner = unittest.TextTestRunner() runner.run(suite) ``` ### 基本断言方法 常见的基本断言方法如下: - `assertEqual(a, b)`:判断`a`和`b`是否相等。 - `assertNotEqual(a, b)`:判断`a`和`b`是否不相等。 - `assertTrue(x)`:判断`x`是否为`True`。 - `assertFalse(x)`:判断`x`是否为`False`。 - `assertIs(a, b)`:判断`a`和`b`是否为同一个对象。 - `assertIsNot(a, b)`:判断`a`和`b`是否不是一个对象。 ### ddt使用规则 1. 安装`ddt`库。 2. 使用`@ddt`装饰测试类。 3. 使用`@data`装饰测试方法,并传入测试数据。 4. 如果测试数据是元组或列表,可以使用`@unpack`解包数据。 ### 生成和解析测试报告方法 #### 生成测试报告 使用`HTMLTestRunner`生成HTML格式的测试报告,示例代码如下: ```python import unittest from HTMLTestRunner import HTMLTestRunner suite = unittest.defaultTestLoader.discover("./Case", pattern='test_*.py') with open('test_report.html', 'wb') as f: runner = HTMLTestRunner(stream=f, title='测试报告', description='测试用例执行情况') runner.run(suite) ``` #### 解析测试报告 可以使用Python的`BeautifulSoup`库解析HTML格式的测试报告,示例代码如下: ```python from bs4 import BeautifulSoup with open('test_report.html', 'r', encoding='utf-8') as f: soup = BeautifulSoup(f, 'html.parser') # 解析报告内容 pass ``` ### 实验步骤和截图 由于无法直接提供截图,以下是实验步骤: 1. 安装Python和必要的库(`ddt`、`HTMLTestRunner`)。 2. 编写测试用例代码,包括单独设计和数据驱动设计的测试用例。 3. 使用`TestSuite`和`TestLoader`批量加载测试用例。 4. 使用`HTMLTestRunner`生成测试报告。 5. 运行代码,查看测试结果和生成的测试报告。 6. 使用`BeautifulSoup`解析测试报告。 ### 实验总结 通过本次实验,掌握了unittest框架的搭建、测试用例前后置、批量加载测试用例并运行、生成测试报告的方法。学会了根据已有数据设计测试用例(单独设计和数据驱动设计)及断言处理方法。了解了unittest框架的基本规则、测试套件使用方法、基本断言方法和`ddt`使用规则。同时,掌握了使用`HTMLTestRunner`生成并使用`BeautifulSoup`解析测试报告的方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上开始

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值