unittest——TextTestRunner与HTMLTestRunner 生成测试报告的区别

本文对比了TextTestRunner与HTMLTestRunner两种测试报告生成工具的特点及使用方法。TextTestRunner适用于控制台输出,可通过调整详细程度改变输出信息的多少;而HTMLTestRunner则能生成更为直观的HTML格式测试报告。

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

TextTestRunner与HTMLTestRunner区别 

它们都是调用父类(TestRunner )的方法来执行测试用例,但生成的测试报告样式不同。

一、TextTestRunner用法:

TextTestRunner(stream=None, descriptions=None, verbosity=1)

  • verbosity 分别三个级别: 0 1 2 它们输出的测试报告详细程度不同。【默认值为1】。

    =0的时候,不输出信息;
    =1的时候,不限制完整结果,即单个用例成功输出 ’.’ ,失败输出’F’,错误输出’E’;
    =2的时候,需要打印详细的返回信息。

  • stream 测试报告写入文件的存储区域,如果默认为None的话,测试报告会输出到控制台。
  • descriptions 测试报告的描述。

通过TextTestRunner类实例的run方法去执行的用例或用例集。

TextTestRunner测试报告样式:

文件result.txt,内容如下:

test01 (__main__.TestSuite1) ... ok
test02 (__main__.TestSuite1) ... ok
test03 (__main__.TestSuite1) ... ok
test04 (__main__.TestSuite1) ... ok

----------------------------------------------------------------------
Ran 4 tests in 0.001s

OK

二、HTMLTestRunner用法:

HTMLTestRunner(self, stream = sys.stdout, verbosity=1,title='',description=None| '')

  • self:是代表本类的意思。
  • stream: 测试报告写入文件的存储区域。stream 默认值sys.stdout可以配报告存储路径输出到指定位置,但是要先用open()方法打开文件,是以一种文件流的方式。
  • verbosity:同TextTestRunner一样。
  • title: 测试报告的主题。默认None。
  • description:测试报告的描述。默认None,也可以是字符串类型(例如下图中“项目测试概述”)。

HTMLTestRunner模块中的HTMLTestRunner方法,构建一个运行器对象,通过HTMLTestRunner类实例的run方法完成测试用例的运, 将参数将结果写入之前新建的报告test.html文件之中,标题为测试报告,描述为详情。

HTMLTestRunner是以HTML形式存放测试结果的,并会以报告的形式保存。

HTMLTestRunner测试报告样式:

文件result.html,内容如下:

 

 

<think>好的,我现在需要回答用户的问题:如何将unittest框架HTMLTestRunner结合生成测试报告,并通过邮件发送给指定收件人。首先,我得回忆一下相关的步骤和组件。 首先,用户提到了unittest框架和HTMLTestRunner。我记得HTMLTestRunner是一个第三方库,用于生成HTML格式的测试报告。所以第一步应该是安装这个库,可能需要通过pip来安装,或者手动下载。然后,在测试脚本中导入HTMLTestRunner模块。 接下来是如何整合unittest。用户需要编写测试用例,这些用例应该继承自unittest.TestCase。然后,使用TestLoader来加载这些测试用例,可能用到discover()方法来自动发现测试用例。这一步需要确保测试用例的目录结构正确,以便discover能够找到它们。 生成测试报告的部分,需要创建一个测试套件(TestSuite),将加载的测试用例添加到套件中。然后,用HTMLTestRunner运行这个套件,并输出到指定的HTML文件中。这里可能需要用open函数打开一个文件,将报告写入其中。需要注意的是文件路径的处理,比如使用绝对路径或者相对路径,确保文件能够正确生成。 然后是发送邮件的部分。用户希望将生成的HTML报告作为附件发送到指定邮箱。这里需要使用Python的smtplib和email库。需要配置SMTP服务器的信息,比如服务器地址、端口,以及发件人的邮箱和密码。然后构造邮件内容,包括主题、正文,以及附件。附件部分需要读取之前生成的HTML文件,并添加到邮件中。 在代码实现时,可能需要将这两个部分整合到一个脚本中。首先运行测试并生成报告,然后发送邮件。需要注意的是异常处理,比如测试失败时如何处理,邮件发送失败时的重试机制等。 另外,引用中的内容提到了一些注意事项,比如工具的限制和自动化需求。用户可能希望整个过程自动化,所以可能需要定时任务或持续集成工具的支持,但当前问题可能只需要脚本层面的整合。 还需要考虑安全性问题,比如邮箱密码的处理,最好不要硬编码在脚本中,而是通过环境变量或配置文件来管理。不过示例代码中可能会简化这一步,直接写入密码,但实际应用中需要注意。 最后,需要验证整个流程是否正确。编写测试用例,运行脚本,检查是否生成HTML报告,以及邮件是否成功发送。如果有错误,需要检查日志或报错信息,调试代码。 可能遇到的问题包括:HTMLTestRunner未正确安装导致导入失败,测试用例未被正确发现,文件路径错误导致报告无法生成,SMTP服务器配置错误导致邮件发送失败,附件未正确添加等。需要逐一排查这些问题,确保每个环节都正确无误。 总结步骤应该是:安装HTMLTestRunner,编写测试用例,生成测试报告,配置邮件参数,发送带附件的邮件。将这些步骤用代码实现,并确保各部分衔接正确。</think>以下是整合 unittest 框架 HTMLTestRunner 生成测试报告并发送邮件的完整方案: ### 一、整合 unittest HTMLTestRunner 1. **安装依赖** ```python # 安装HTMLTestRunner(需手动下载或使用以下命令) pip install html-testRunner ``` 2. **测试用例结构示例** ```python import unittest class TestDemo(unittest.TestCase): def test_add(self): self.assertEqual(1+1, 2) def test_sub(self): self.assertNotEqual(5-3, 1) if __name__ == "__main__": unittest.main() ``` 3. **生成HTML测试报告** ```python import unittest import HTMLTestRunner import os import time # 创建测试套件 test_dir = "./test_case" # 测试用例目录 discover = unittest.defaultTestLoader.discover(test_dir, pattern="test*.py") # 生成报告路径 report_dir = os.path.abspath("./report") timestamp = time.strftime("%Y%m%d%H%M%S") filename = f"TestReport_{timestamp}.html" report_path = os.path.join(report_dir, filename) with open(report_path, "wb") as f: runner = HTMLTestRunner.HTMLTestRunner( stream=f, title="接口测试报告", description="用例执行情况" ) runner.run(discover) ``` [^1] ### 二、邮件发送功能实现 ```python import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart def send_email(report_path): # 邮件配置 smtp_server = "smtp.163.com" # SMTP服务器 port = 465 # 端口 sender = "sender@163.com" # 发件人 password = "your_password" # 授权码 receivers = ["receiver@qq.com"] # 收件人 # 创建邮件对象 msg = MIMEMultipart() msg["Subject"] = "自动化测试报告" msg["From"] = sender msg["To"] = ",".join(receivers) # 添加正文 body = MIMEText("附件为最新生成测试报告,请查收", "plain", "utf-8") msg.attach(body) # 添加附件 with open(report_path, "rb") as f: att = MIMEText(f.read(), "base64", "utf-8") att["Content-Type"] = "application/octet-stream" att["Content-Disposition"] = f"attachment; filename={os.path.basename(report_path)}" msg.attach(att) # 发送邮件 try: smtp = smtplib.SMTP_SSL(smtp_server, port) smtp.login(sender, password) smtp.sendmail(sender, receivers, msg.as_string()) print("邮件发送成功") except Exception as e: print(f"邮件发送失败: {str(e)}") finally: smtp.quit() ``` [^3] ### 三、完整整合代码 ```python import unittest import HTMLTestRunner import os import time import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # 生成测试报告部分 test_dir = "./test_case" report_dir = os.path.abspath("./report") if not os.path.exists(report_dir): os.makedirs(report_dir) discover = unittest.defaultTestLoader.discover(test_dir, pattern="test*.py") timestamp = time.strftime("%Y%m%d%H%M%S") filename = f"TestReport_{timestamp}.html" report_path = os.path.join(report_dir, filename) with open(report_path, "wb") as f: runner = HTMLTestRunner.HTMLTestRunner( stream=f, title="自动化测试报告", description="用例执行详情", verbosity=2 ) runner.run(discover) # 发送邮件部分 def send_email(report_path): # 配置信息保持不变... # (此处插入上述邮件发送函数) # 执行发送 send_email(report_path) ``` [^2] **注意事项:** 1. 邮箱需开启SMTP服务并获取授权码 2. 测试用例目录需脚本路径匹配 3. 建议使用日志模块记录执行过程 4. 生产环境应将密码等敏感信息存储在环境变量中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

释梦燃

你的鼓励是我创作的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值