【unittest】TestSuite搭建测试用例一

一、unittest 框架中的 TestSuite

1.1 基本概念

unittest 框架中的 TestSuite 起着至关重要的作用,它主要用于组织和分组测试用例。当你需要运行多个测试用例时,将它们组织成一个或多个 TestSuite 可以让你更容易地管理这些测试用例。

1.2 作用场景
  • 测试用例编写:TestSuite 允许你将多个测试用例(TestCase 实例)组织在一起。这有助于你将相关的测试用例分组,例如,你可以将所有与数据库交互的测试用例放在一个 TestSuite 中,将所有与用户界面相关的测试用例放在另一个 TestSuite

  • 批量运行测试: 使用 TestSuite 可以让你一次性运行多个测试用例。这对于节省时间和资源非常有用,因为它减少了测试过程中需要的手动干预。

  • 测试分层: 在某些情况下,你可能想要根据测试用例的优先级或复杂性来组织它们。通过使用 TestSuite,你可以创建多个层级的测试集,并在需要时运行特定的层级。

  • 模块化测试: 将测试用例组织成 TestSuite 可以促进测试的模块化。每个 TestSuite 可以看作是一个独立的测试模块,你可以在不同的测试场景或测试阶段中重用它们。

  • 集成式测试: TestSuite 可以与 unittest 框架的其他部分(如 TestLoaderTestRunnerTestResult)无缝集成,以提供完整的测试环境。这意呀着你可以使用 TestLoader 来加载测试用例到 TestSuite,然后使用 TestRunner 来运行这些测试用例,并收集 TestResult 来查看测试结果。

  • 条件性测试: 在某些情况下,你可能只想在满足特定条件时运行某些测试用例。通过创建多个 TestSuite 并根据条件选择性地运行它们,你可以实现这种灵活性。

二、常用的API接口

2.1 addTest(test)
  • 作用: 将单个测试用例(TestCase 实例)添加到测试套件(TestSuite)中。

  • 参数: 需要添加的测试用例,必须为TestCase的实例。

  • 示例如下:

import unittest  
  
class MyTestCase(unittest.TestCase):  
    def test_case_1(self):  
        self.assertEqual(1 + 1, 2, "1 + 1 应该等于 2")  
  
    def test_case_2(self):  
        self.assertTrue(2 > 1, "2 应该大于 1")  
  
    def test_case_3(self):  
        self.assertIn('a', 'abc', "'a' 应该在 'abc' 中")
# 创建 TestSuite 实例  
suite = unittest.TestSuite()  
  
# 向 TestSuite 中添加测试用例  
# 方式一:逐个添加  
suite.addTest(MyTestCase('test_case_1'))  
suite.addTest(MyTestCase('test_case_2'))

其中assertEqual 是 Python 的 unittest 测试框架中用于断言两个值是否相等的方法。如果在测试中,你期望某个表达式的结果与某个特定的值相等,你可以使用 assertEqual 方法来验证这一点。如果两个值相等,测试将继续执行;如果不相等,assertEqual 会抛出一个 AssertionError 异常,指出测试失败,并显示预期值和实际值,以便开发者能够快速定位和修复问题。其他两个根据后面结尾则可判断出其含义。

2.2 addTests(tests)
  • 作用: 将多个测试用例或测试套件(可迭代对象,包含 TestCaseTestSuite 实例)一次性添加到测试套件中。

  • 参数: 可迭代对象,包含要添加的测试用例或测试套件。

  • 示例如下:

#采用刚才创建的测试用例
suite = unittest.TestSuite()
tests_to_add = [MyTestCase('test_case_1'),MyTestCase('test_case_2'),MyTestCase('test_case_3')]  
suite.addTests(tests_to_add) 
2.3 run(result)
  • 作用: 运行测试套件中的所有测试用例,并将结果收集到 TestResult 实例中。

  • 参数: result–TestResult 实例,用于收集测试结果。

  • 注意:与 TestCase.run() 不同,TestSuite.run() 需要传递一个 TestResult 实例。

2.4 debug()
  • 作用:运行测试套件中的所有测试用例,但不收集结果。这允许测试引发的异常传播到调用方,并可用于在调试器下运行测试。

  • 示例:

#采用刚才创建的测试用例
suite = unittest.TestSuite()
tests_to_add = [MyTestCase('test_case_1'),MyTestCase('test_case_2'),MyTestCase('test_case_3')]  
suite.addTests(tests_to_add)
suite.debug()
2.5 TestRunner
  • 基本概念: TestRunner是一种测试执行过程管理平台或工具,它主要用于执行测试套件(TestSuite)中的测试用例(TestCase),并管理和跟踪测试过程。TestRunner在自动化测试领域扮演着重要角色,特别是在处理大量回归测试时,能够显著提高测试效率和准确性。

  • 生成测试报告: 测试执行完成后,TestRunner会生成测试报告,包括测试用例的执行情况、测试结果等信息。

#采用刚才创建的测试用例
suite = unittest.TestSuite()
tests_to_add = [MyTestCase('test_case_1'),MyTestCase('test_case_2'),MyTestCase('test_case_3')]  
suite.addTests(tests_to_add)

# 实例化TestRunner  
runner = unittest.TextTestRunner()  

# 执行测试  
runner.run(suite)

也可创建report文件夹,输出测试报告html,示例如下所示:

import unittest
from unittestreport import TestRunner
import os
  
class MyTestCase(unittest.TestCase):  
    def test_case_1(self):  
        self.assertEqual(1 + 2, 2, "1 + 1 应该等于 2")  
  
    def test_case_2(self):  
        self.assertTrue(2 > 1, "2 应该大于 1")  
  
    def test_case_3(self):  
        self.assertIn('a', 'abc', "'a' 应该在 'abc' 中")

# 创建 TestSuite 实例  
suite = unittest.TestSuite()  
  
# 向 TestSuite 中添加测试用例  
# 方式一:逐个添加  
suite.addTest(MyTestCase('test_case_1'))  
suite.addTest(MyTestCase('test_case_2'))


BasePath = os.path.dirname(__file__)#获取当前文件所在路径
if __name__ == "__main__":
    if not os.path.isdir("report"):
        os.mkdir("report")
    fp = BasePath + "\\report" #特别需要注意的是 report文件是已存在的,否则会报错
    #filename为文件名称,report_dir报告输出位置,title测试标题,tester测试测试人员,desc描述
    runner = TestRunner(suite,filename="TEST测试报告.html",report_dir=fp,title="TEST测试报告",tester="USER1",desc="20240731执行测试")
    runner.run()

运行结果如下:

在这里插入图片描述

则可在report文件夹下找到对应的测试报告

在这里插入图片描述

可用浏览器打开,如下图所示:

在这里插入图片描述在这里插入图片描述

可点击详情,进行查看测试用例成功/失败原因。

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

落淼喵_G

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

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

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

打赏作者

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

抵扣说明:

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

余额充值