python testcase,实例的Python unittest.TestCase的带参数

本文介绍如何在Python的unittest框架中实现参数化测试。通过定义基类并在子类中设置特定属性来实现不同测试用例的参数化。这种方法避免了重复代码,并使测试更加灵活。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I would like to iterate over a list of items, and run an assertion on each of them. One example might be checking whether each number in a list is odd.

TestCase:

class TestOdd(unittest.TestCase):

def runTest(self):

"""Assert that the item is odd"""

self.assertTrue( NUMBER %2==1, "Number should be odd")

Test suite:

if __name__ == '__main__':

suite = unittest.TestSuite()

suite.addTest(TestOdd())

# I would like to have:

# suite.addTest(TestOdd(1))

# suite.addTest(TestOdd(2))

# suite.addTest(TestOdd(3))

# ...

unittest.main()

How can I instantiate a TestOdd object with an argument - for example, the number to be tested?

Update: According to a blog post from 2011 (posted as answer), there is no built-in mechanism for parametrized tests. I will be happy to accept any cleaner solutions.

解决方案

Same can be achieved using class attributes.

class TestOdd1(unittest.TestCase):

NUMBER=1

def runTest(self):

"""Assert that the item is odd"""

self.assertTrue( self.NUMBER % 2 == 1, "Number should be odd")

class TestOdd2(TestOdd1):

NUMBER=2

if __name__ == '__main__':

unittest.main()

The unittesting will discover them automatically, so no need to create a suite.

If you want to avoid using a TestCase for base class, you can use multiple inheritance:

from unittest import TestCase, main

class TestOdd:

def runTest(self):

"""Assert that the item is odd"""

self.assertTrue( self.NUMBER % 2 == 1, "Number should be odd")

class TestOdd1(TestOdd, TestCase):

NUMBER=1

class TestOdd2(TestOdd, TestCase):

NUMBER=2

if __name__ == '__main__':

main()

<think>我们参考用户提供的多个引用,特别是引用[3]中的示例代码,来详细解释如何使用unittest和HTMLTestRunner生成测试报告。步骤分解:1.准备HTMLTestRunner.py文件:这是一个第三方库,需要先下载并放在Python的lib目录或项目目录中(引用[1]和引用[3]都提到了)。2.编写测试用例:使用unittest框架编写测试类,每个测试方法以test开头(引用[5]示例)。3.组织测试套件:将测试用例添加到测试套件(suite)中,可以使用TestLoader的discover方法自动发现测试用例(引用[2]和引用[3]),也可以手动添加(引用[5])。4.定义报告文件路径:通常以当前时间命名报告,避免覆盖(引用[2]和引用[3])。5.实例化HTMLTestRunner:设置报告文件流、标题、描述等信息,并运行测试套件。6.关闭文件流:生成报告后关闭文件(引用[2]和引用[5])。下面我们根据引用[3]中的代码进行解释:代码示例(结合引用[3]和引用[5]的写法):```python#导包importunittestimporttime#导入HTMLTestRunner,注意:需要先下载HTMLTestRunner.py文件并放在可导入的位置fromHTMLTestRunnerimportHTMLTestRunner#定义测试套件#使用discover方法自动加载指定目录下的测试用例,pattern用于匹配文件名suite=unittest.defaultTestLoader.discover("../case",pattern="test*.py")#定义报告存放路径及文件名称,使用时间戳确保每次报告不覆盖report_dir="../report/{}.html".format(time.strftime("%Y_%m_%d%H_%M_%S"))#打开报告文件(以二进制写入模式),注意:在Windows下需要二进制写入withopen(report_dir,"wb")asf:#实例化HTMLTestRunner,传入文件流和报告的其他配置runner=HTMLTestRunner(stream=f,#文件流title="XX项目自动化测试报告",#报告标题description="操作系统win11",#报告描述#还可以设置tester参数,如:tester="测试人员姓名")#运行测试套件,生成测试报告runner.run(suite)#注意:使用withopen会自动关闭文件,所以不需要fp.close()```关键点解释:1.`unittest.defaultTestLoader.discover`:从指定目录("../case")中递归查找以"test*.py"模式命名的测试模块,并自动加载所有测试用例。2.报告文件名:使用`time.strftime`生成包含当前时间的文件名,避免重复。3.`open(report_dir,"wb")`:以二进制写模式打开文件,因为HTMLTestRunner输出的是字节数据。4.`HTMLTestRunner`参数:-stream:文件流对象-title:测试报告标题-description:测试报告描述-tester:(可选)测试人员姓名,在引用[2]中有使用5.`runner.run(suite)`:运行测试套件,并将结果输出到报告中。注意:在引用[5]中,使用了手动添加测试用例的方式(`suite.addTest`),而引用[2][3]使用了自动发现。自动发现更加方便。另外,引用[4]提到HTMLTestRunner还支持在报告中添加截图图片和失败重试,但上述示例代码中未体现,需要查看HTMLTestRunner的具体扩展功能。因此,使用unittest和HTMLTestRunner生成测试报告的主要步骤如上。相关问题:1.如何安装或配置HTMLTestRunner?2.除了HTMLTestRunner,还有哪些生成测试报告的工具?3.如何在测试报告中添加截图?4.如何实现测试失败重试并记录在报告中?</think> ### 使用unittest和HTMLTestRunner生成测试报告的步骤详解 #### 1. **环境准备** 首先需下载`HTMLTestRunner.py`文件(第三方库),将其放在Python的`Lib`目录或项目目录中[^1][^3]。 #### 2. **核心代码结构** ```python import unittest import time from HTMLTestRunner import HTMLTestRunner # 关键导入 # 1. 创建测试套件 suite = unittest.defaultTestLoader.discover( "./testcase/", # 测试用例目录 pattern="test_*.py" # 匹配测试文件 ) # 2. 配置报告路径(含时间戳防覆盖) report_path = f"report/{time.strftime('%Y%m%d_%H%M%S')}_Report.html" # 3. 生成测试报告 with open(report_path, "wb") as f: # 二进制写入模式 runner = HTMLTestRunner( stream=f, # 文件流 title="自动化测试报告", # 报告标题 description="系统版本v1.0", # 描述信息 tester="测试人员" # 测试者姓名(可选) ) runner.run(suite) # 执行测试套件 ``` #### 3. **关键参数说明** - `discover()`:自动发现指定目录下的测试用例[^2][^3] - 时间戳格式:`%Y%m%d_%H%M%S`确保报告唯一性[^2] - `HTMLTestRunner`参数: - `stream`:报告输出位置(文件流) - `verbosity=2`:显示详细用例执行信息[^2] - `tester`:指定测试人员(会显示在报告中)[^2] #### 4. **目录结构建议** ``` project/ ├── testcase/ # 存放测试用例 │ ├── test_login.py │ └── test_api.py ├── report/ # 报告输出目录 └── run_tests.py # 执行脚本(含上述代码) ``` #### 5. **生成报告效果** 报告包含以下关键信息[^3][^5]: 1. 用例执行状态(通过/失败) 2. 错误堆栈信息 3. 测试执行时间统计 4. 可添加截图功能(需额外扩展)[^4] #### 6. **与其他库结合** 可与`selenium`或`requests`配合,生成: - Web自动化测试报告[^4] - 接口自动化测试报告[^5] > 注意:需确保`HTMLTestRunner.py`文件在Python可识别路径中,否则会出现导入错误[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值