一、背景
RF的结果报告可以方便我们查看每一条用例集、用例的执行结果统计,但是有的项目涉及到一些数据的比对,希望能够直观到看到数据,原生的测试报告就无法满足这个需求了。
- 原生的报告
- 项目需求报告格式
二、解决方案
2.1 流程图
![20200904150324](https://i-blog.csdnimg.cn/blog_migrate/7c0dad9d6d44e7ca5421f770d3a03274.png)
- 解析output.xml,将用例的相关信息和执行结果获取
- 通过API和数据库获取需要展示的数据
- 将上述两步的数据封装到一个数据列表中,方便后面进行模板渲染
- 根据需求画HTML的报告模板
- 对模板进行数据填充渲染,生成报告文件
- 邮件发送报告
2.2 output.xml解析
测试用例相关的信息和运行结果,我们可以通过解析RF的output.xml文件来进行获取
2.2.1获取用例运行情况的统计
![20200904151717](https://i-blog.csdnimg.cn/blog_migrate/4737933a4fbc042f0a5b2efc5684a2d8.png)
import xml.dom.minidom
import xml.etree.ElementTree
# 打开xml文档
dom = xml.dom.minidom.parse('E:\\robot\\fightdata_yuce\\results\\output.xml')
root2 = xml.etree.ElementTree.parse('E:\\robot\\fightdata_yuce\\results\\output.xml')
# 得到文档元素对象
root = dom.documentElement
total = root.getElementsByTagName('total');
total_len = len(total)
# total的stat节点个数
total2 = root2.getiterator("total")
total_stat_num = len(total2[total_len-1].getchildren())
statlist = root.getElementsByTagName('stat');
def get_total_statistics():
list = []
for i in range(0,total_stat_num):
d = dict()
d['fail'] = int(statlist[i].getAttribute("fail"))#失败用例数
d['pass'] = int(statlist[i].getAttribute("pass"))#成功用例数
d['total'] = d['fail']+d['pass']#用例总数
d['percent'] = ('{:.2%}'.format(d['pass'] / d['total']))#用例百分比
list.append(d)
return list
2.2.2 获取用例信息
- 用例的组织结构
- 获取用例信息和执行结果
用例结构是多个suite,每个suite下有4条case