Unittest框架测试报告TestResult

本文介绍了如何使用Python的Unittest框架运行测试用例并生成测试报告。对比了TextTestRunner的简单报告和HTMLTestRunner_PY3提供的详细HTML报告,后者不仅展示测试结果,还能追踪失败原因。通过示例展示了HTMLTestRunner_PY3的安装和使用,以及生成的美观报告。

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

1、使用 Unittest运行测试用例之后会生成测试报告,可以将测试报告保存到文件中。

1)TextTestRunner生成的报告

缺点:显示的结果比较粗糙、不显示错误的测试用例运行结果

例子如下:

unittest_testresult.demo.py

import unittest

def testXX(aa):
  print("编外的测试用例")

class TestSuiteDemo1(unittest.TestCase):
 def test01(self):
   print("执行测试用例aaaa")

 def test02(self):
   print("执行测试用例bbbb")

class TestSuiteDemo2(unittest.TestCase):
   def test01(self):
     print("执行测试用例xxxx")
   def test02(self):
     print("执行测试用例yyyy")

class TestSuiteDemo3(unittest.TestCase):
   def test01(self):
     print("执行接口测试")
   def test02(self):
     print("执行单元测试")
   def test03(self):
     print("执行安全测试")


if __name__ == '__main__':
  t1 = unittest.TestLoader()
  # suite = t1.discover("./", "*.py") # 使用discover来寻找测试用例
  suite = t1.loadTestsFromTestCase(TestSuiteDemo3)
  # 使用TextTestRunner来生成测试报告
  # 第一步打开要保存的测试报告文件

  # 这一行相当于f=open('./result.txt', mode='w')
  with open('./result.txt', mode='w') as f:

      # 第二步实例化TextT
<think>我们有两个目标:1. 设置测试用例描述 2. 生成测试报告unittest框架中,测试用例的描述通常可以通过两种方式设置: a. 在测试方法中使用文档字符串(docstring),即方法内的第一个多行字符串。当运行测试时,这些描述可以被测试运行器捕获并显示在报告中。 b. 通过测试用例的`__doc__`属性,即类或方法的文档字符串。 对于生成测试报告unittest本身支持文本格式的报告,但通常我们使用HTML测试报告更直观。可以使用第三方库如`HTMLTestRunner`或`BeautifulReport`来生成HTML报告。 步骤: 1. 编写测试用例,为每个测试方法添加文档字符串作为描述。 2. 使用测试套件组织测试用例。 3. 使用HTMLTestRunner运行测试套件并生成报告。 注意:由于HTMLTestRunner不是标准库,需要先安装或下载。可以通过pip安装:`pip install html-testRunner`(注意:包名可能是`html-testRunner`或`HtmlTestRunner`,具体看PyPI) 但是,根据引用[2]和[3],我们也可以看到使用unittest自带的文本报告和简单的HTML报告生成方法。 具体操作: 1. 设置测试用例描述: 在每个测试方法中,可以在方法内部的第一行添加一个字符串(通常用三引号多行字符串),这就是该测试用例的文档字符串。测试报告生成器可以提取这个字符串作为描述。 例如: def test_login_01(self): """测试登录功能:正确的用户名和密码""" ... 2. 生成HTML测试报告: 我们可以使用`HTMLTestRunner`模块(需要单独下载或安装)来生成报告。 由于引用[2]提到了HTML测试报告,引用[3]也提到了测试报告,我们可以参考。 示例代码: 步骤1:编写测试用例,添加描述 步骤2:创建测试套件 步骤3:使用HTMLTestRunner运行测试套件并输出报告文件 注意:HTMLTestRunner的使用方法。 如果不想使用第三方库,unittest自带的`TextTestRunner`可以生成文本报告,但不够美观。 这里我们以使用`HTMLTestRunner`为例。 安装HTMLTestRunner(如果尚未安装): 在命令行中执行:pip install html-testRunner 或者,如果安装失败,也可以手动下载HTMLTestRunner.py文件(从网上搜索)并放在项目目录中。 代码示例: ```python import unittest import HtmlTestRunner class TestLogin(unittest.TestCase): def test_login_01(self): """测试登录功能:正确的用户名和密码""" print('test_login_01') self.assertEqual(1, 1) def test_login_02(self): """测试登录功能:错误的密码""" print('test_login_02') self.assertEqual(1, 2) if __name__ == '__main__': # 使用HtmlTestRunner运行测试 # 输出报告到当前目录的reports目录下,报告文件名包含当前时间 import os import datetime # 创建报告目录 report_dir = './reports' os.makedirs(report_dir, exist_ok=True) # 生成带时间戳的报告文件名 now = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") report_file = os.path.join(report_dir, f"report_{now}.html") # 运行测试用例 unittest.main( testRunner=HtmlTestRunner.HTMLTestRunner( output=report_dir, # 报告输出目录 report_name=f'report_{now}', # 报告文件名(不带后缀) combine_reports=True, # 是否将多个测试类合并成一个报告 add_timestamp=True, # 在报告中添加时间戳 report_title='登录功能测试报告' # 报告标题 ) ) ``` 注意:不同版本的HTMLTestRunner可能参数略有不同,以上是较新版本的用法。如果遇到问题,请参考具体库的文档。 另一种方法是使用`unittest`的测试发现(test discovery)来收集所有测试,然后生成报告: ```python import unittest import HtmlTestRunner # 创建测试套件 suite = unittest.TestLoader().discover('.', pattern='test_*.py') # 生成报告 runner = HtmlTestRunner.HTMLTestRunner( output='reports', report_title='测试报告' ) runner.run(suite) ``` 在报告中,每个测试用例的描述就是测试方法的文档字符串(docstring)。 另外,如果测试类也有文档字符串,那么整个测试类的描述就是类的文档字符串。 例如: ```python class TestLogin(unittest.TestCase): """登录模块的测试用例""" ... ``` 这样,在报告中,测试类会显示为“登录模块的测试用例”。 总结: - 为测试类和测试方法添加文档字符串,即可设置描述。 - 使用HtmlTestRunner生成HTML测试报告。 注意:如果使用其他测试报告生成工具(如BeautifulReport),方法类似,具体请参考相应文档。 引用说明: - 引用[2]和[3]提到了unittest测试用例的编写和测试报告,所以我们在回答中参考了这些内容。</think>在unittest框架中设置测试用例描述并生成测试报告,可以通过以下步骤实现: ### 一、设置测试用例描述 在unittest中,可以通过以下3种方式为测试用例添加描述: 1. **使用文档字符串(Docstring)** 在测试方法开头添加三引号字符串,这会被测试报告捕获为描述: ```python def test_login_success(self): """测试登录功能:使用正确的用户名和密码""" self.assertEqual(login("admin", "123456"), True) ``` 2. **使用`shortDescription()`方法** 覆盖基类方法返回自定义描述: ```python def shortDescription(self): return "边界值测试:用户名为空时的登录行为" ``` 3. **在断言中添加消息参数** 直接在断言方法中添加描述信息: ```python def test_password_length(self): self.assertTrue(len(password) >= 8, "密码长度必须至少8个字符") ``` ### 二、生成测试报告 推荐使用第三方库生成更直观的HTML报告: #### 方法1:使用HTMLTestRunner 1. 安装库: ```bash pip install html-testRunner ``` 2. 修改测试执行代码: ```python import unittest import HtmlTestRunner class LoginTests(unittest.TestCase): def test_valid_login(self): """成功登录场景测试""" # 测试代码... if __name__ == '__main__': unittest.main( testRunner=HtmlTestRunner.HTMLTestRunner( output='reports', # 报告保存目录 report_name='登录测试报告', # 报告名称 combine_reports=True, # 合并多个测试类 add_timestamp=True # 添加时间戳 ) ) ``` #### 方法2:使用BeautifulReport 1. 安装库: ```bash pip install BeautifulReport ``` 2. 生成报告: ```python from BeautifulReport import BeautifulReport suite = unittest.TestLoader().discover('tests') result = BeautifulReport(suite) result.report( description='登录模块测试报告', filename='login_test_report', log_path='./reports' ) ``` ### 三、报告效果说明 生成的HTML报告将包含: 1. 测试用例描述(来自docstring) 2. 执行状态(通过/失败) 3. 错误堆栈信息 4. 执行时间统计 5. 饼图展示成功率 ### 四、完整示例 ```python import unittest from HtmlTestRunner import HTMLTestRunner class LoginTests(unittest.TestCase): """登录功能测试套件""" def test_valid_credentials(self): """测试有效凭证登录""" self.assertTrue(login("user", "p@ssw0rd")) def test_invalid_password(self): """测试错误密码登录""" self.assertFalse(login("user", "wrong")) def test_empty_username(self): """测试用户名为空的情况""" with self.assertRaises(ValueError, msg="用户名不能为空"): login("", "password") if __name__ == '__main__': unittest.main(testRunner=HTMLTestRunner( output='test_reports', report_title='系统登录测试报告', report_name='Login_Test_Results' )) ``` 执行后将在`test_reports`目录生成包含所有测试描述的HTML报告[^2][^3]。 ### 五、最佳实践建议 1. **描述规范**:保持描述简洁明确,使用"测试...当..."格式 2. **目录管理**:按日期组织报告目录 3. **持续集成**:结合Jenkins自动生成报告 4. **历史对比**:保存历史报告进行回归对比 > 通过测试描述和可视化报告,可以快速定位问题所在,提高测试效率[^1][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

软件测试大田

你的赞赏是大田更新的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值