文章信息
技术前提
本文提供了一种使用pyunit测试框架进行 判定类的测试 后,如何提取测试结果数据,并呈现出测试报告方法。
在进行本文后续工作之前,请读者保证自己具备如下能力:
会Python编程
能使用pyunit写 判定类测试
了解测试结果相关类和函数
主要内容
TextTestResult 结果中包含的如下内容:
errors 错误详细信息列表
failures 运行失败详细信息列表
skipped 跳过的详细信息列表
testsRun 运行的用例总数
TextTestResult内容
具体条目
以 failures为例子:
failures
本测试用例的描述:
编号索引为0的数据:
_testMethodName 测试函数名称
_testMethodDoc 测试函数的文档,这里面一般陈述本测试的功能
打印出来的堆栈错误信息:
编号索引为1的数据。
提取测试结果代码
通过加入:
测试执行时间
项目ID
项目版本号
def dict_encode_test_results(test_results, **kwargs):
"""
将测试结果进行json编码
:param test_results:
:type test_results: unittest.TestResult
:return:
"""
run_time = kwargs.get('run_time', None)
pro_id = kwargs.get('pro_id', None)
pro_version = kwargs.get('pro_version', None)
# 主体部分
res_dict = dict(
# was_successful=True if test_results.wasSuccessful() else False,
was_successful=test_results.wasSuccessful(),
total=test_results.testsRun,
failures=len(test_results.failures),
errors=len(test_results.errors),
skipped=len(test_results.skipped),
run_time=run_time,
pro_id=pro_id,
pro_version=pro_version
)
# 详细信息部分
failure_list = [] # 失败的内容
for x in test_results.failures:
note_data = {
'test_case': x[0]._testMethodName,
'explain': x[0]._testMethodDoc.rstrip('\n :return:'),
'status': 'failures',
'note': x[1]
}
failure_list.append(note_data)
for i in test_results.errors:
note_data = {
'test_case': i[0]._testMethodName,
'explain': i[0]._testMethodDoc.rstrip('\n :return:'),
'status': 'errors',
'note': i[1]
}
failure_list.append(note_data)
res_dict['details'] = failure_list
return res_dict
可以提到一个如下的字典对象:
test_res_dict = {
"pro_version": "1.16.10.10.1",
"was_successful": False,
"skipped": 2,
"errors": 1,
"failures": 1,
"pro_id": "57fa12ec47fc894ee04a2c69", # 在后台管理系统中组织信息详细信息里面可以查看到:项目ID
"total": 5,
"run_time": 51.772,
"details": [
{
"status": "failures",
"note": "AssertionError: 404 != 403 : gt不等于32位,返回404",
"explain": "只是用于测试的Demo,没有太多意义",
"test_case": "test_getfrontlib_gt_not32"
}
]
}
然后调用测试报告系统提供的API文档,即可将判定测试的结果上传到 测试报告系统服务器 数据库。