要在测试报告中添加统计测试用例失败以及失败原因的功能,你可以对测试用例执行过程中的断言进行扩展,以捕获失败的断言并记录失败原因。然后,将这些信息添加到测试报告中的适当部分。
以下是一个示例:
```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 = [] 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) # 生成测试报告 generate_test_report(failed_tests) 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): # 创建测试报告 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) # 生成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) ```
在上述代码中,我们首先在`test_api`方法中定义了一个空的列表`failed_tests`,用于存储失败的测试用例。当断言失败时,我们捕获`AssertionError`异常,并将断言失败的测试用例、请求参数、预期结果、实际结果和失败原因保存到字典`test_case`中,然后将其添加到`failed_tests`列表中。
在`generate_test_report`函数中,我们创建了一个空的列表`report`,用于存储测试报告的数据。然后,我们遍历`failed_tests`列表中的测试用例,将每个测试用例的相关信息以字典的形式添加到`report`列表中。
最后,在生成HTML格式的测试报告时,我们调用`runner.generateReport(report)`方法,将`report`列表传递给`HTMLTestRunner`的`generateReport`函数,以将测试用例的结果添加到测试报告中。
请注意,以上代码仅为示例,你可以根据自己的需求进行修改和扩展。你可以根据实际情况自定义测试报告的格式和内容,并根据需要修改和完善失败原因的记录方式。