要在测试报告中添加其他信息,如测试用例的执行时间和通过率,你可以对测试用例的执行过程进行计时,并在测试报告中添加相关统计信息。
以下是一个示例:
```python import json import csv import requests import unittest import HTMLTestRunner class APITestCase(unittest.TestCase): def setUp(self): # 初始化测试环境 self.base_url = "http://api.example.com" self.headers = {"Content-Type": "application/json"} def tearDown(self): # 清理测试环境 pass def test_api(self): test_data = load_test_data("test_data.csv") failed_tests = [] start_time = time.time() for data in test_data: # 从测试数据中读取请求参数和预期结果 request_data = data["request_data"] expected_result = data["expected_result"] # 发送API请求 response = requests.post(self.base_url, headers=self.headers, json=request_data) try: # 断言API响应与预期结果是否一致 self.assertEqual(response.json(), expected_result) except AssertionError as e: # 断言失败时,记录失败的测试用例和失败原因 test_case = { "request_data": request_data, "expected_result": expected_result, "actual_result": response.json(), "error_message": str(e) } failed_tests.append(test_case) end_time = time.time() execution_time = end_time - start_time # 计算通过率 total_tests = len(test_data) passed_tests = total_tests - len(failed_tests) pass_rate = (passed_tests / total_tests) * 100 if total_tests > 0 else 0 # 生成测试报告 generate_test_report(failed_tests, execution_time, pass_rate) def load_test_data(file_path): test_data = [] with open(file_path, "r") as file: reader = csv.DictReader(file) for row in reader: test_data.append(row) return test_data def generate_test_report(failed_tests, execution_time, pass_rate): # 创建测试报告 report = [] # 添加测试用例结果到测试报告 for test_case in failed_tests: result = { "Request Data": json.dumps(test_case["request_data"]), "Expected Result": json.dumps(test_case["expected_result"]), "Actual Result": json.dumps(test_case["actual_result"]), "Error Message": test_case["error_message"] } report.append(result) # 添加其他信息到测试报告 report.append({"Execution Time": f"{execution_time:.2f} seconds"}) report.append({"Pass Rate": f"{pass_rate:.2f}%"}) # 生成HTML格式的测试报告 with open("test_report.html", "w") as report_file: runner = HTMLTestRunner.HTMLTestRunner(stream=report_file, title="API Test Report", description="Test Results") runner.generateReport(report) if __name__ == "__main__": # 加载测试用例 test_suite = unittest.TestLoader().loadTestsFromTestCase(APITestCase) # 执行测试 unittest.TextTestRunner().run(test_suite) ```
在上述代码中,我们首先使用`time.time()`函数获取测试开始和结束的时间戳,然后计算执行时间。在测试用例执行完成后,我们计算通过率,即通过的测试用例数量与总测试用例数量的比例。
在`generate_test_report`函数中,我们添加了两个字典到`report`列表中,分别包含执行时间和通过率的信息。
最后,我们使用`runner.generateReport(report)`将`report`列表传递给`HTMLTestRunner`的`generateReport`函数,以将测试用例的结果和其他信息添加到测试报告中。
请注意,以上代码仅为示例,你可以根据自己的需求进行修改和扩展。你可以根据实际情况自定义测试报告的格式和内容,并根据需要添加其他统计信息。