下面来介绍怎么实现的,首先先说一下我实现的思路。对于这个我们的测试报告而言,我只想调整一下他的展示样式,丰富两列内容。所以先去想怎么去把他的样式给修改了。然后再往修改后的样式表格里面添加数据。
也就是分两步做:
1改样式
2加数据
改样式
改样式,这里只需要会基础的HTML
中行、列标识就可以了。我们要在界面中加两列,那么很简单,就是加两个就可以了。
看源码部分:
从395行左右开始就是存储HTML代码展示的部分,找到table标签和第一行列头展示内容。
脚本片段1:
REPORT_TMPL = “”” …… “”” 代码段里面包含了
的结构内容如:
<table id="result\_table">
<colgroup>
<col align="left" />
<col align="right" />
<col align="right" />
<col align="right" />
<col align="right" />
<col align="right" />
</colgroup>
<tr id="header\_row">
<td colspan="2">Test Group/Test case</td>
<td>Count</td>
<td>Pass</td>
<td>Fail</td>
<td>Error</td>
<td>View</td>
<td>Screenshot</td>
</tr>%(test_list)s <tr id="total\_row">
<td colspan="2">Total</td>
<td>%(count)s</td>
<td>%(Pass)s</td>
<td>%(fail)s</td>
<td>%(error)s</td>
<td> </td>
<td> </td>
</tr>
</table>
table标签中的第一个就是第一行,中的每一个代表一列。标签中间的文本是直接显示在界面的。
<tr id='header\_row'>
//这里添加colspan='2' 是合并2个列。
//因为下面的行中的caseid需要占一列,
//但是标题列头部分显示是一个整体,所以做了合并
<td colspan='2'>Test Group/Test case</td>
<td>Count</td>
<td>Pass</td>
<td>Fail</td>
<td>Error</td>
<td>View</td>
<td>Screenshot</td> //图片快照的列头标题
</tr>
脚本片段2:
REPORT_CLASS_TMPL = “”” … “””代码段 是 展示calss的行,可以叫做测试模块的类,它是单独放在一行中的,每个模块一行。因为要跟上面的第一行标题中的列数对应,所以修改如下:
<tr class='%(style)s'>
//添加的caseid 的标题,这一行不在主列头,
//而是放在测试模块用例统计所在的行里面。 <td>case_id</td>
<td>%(desc)s</td>
<td>%(count)s</td>
<td>%(Pass)s</td>
<td>%(fail)s</td>
<td>%(error)s</td>
<td><a href="javascript:showClassDetail('%(cid)s',%(count)s)">Detail</a></td>
<td> </td> //保持列数统一,加入空白列
</tr>
脚本片段3:
REPORT_TEST_WITH_OUTPUT_TMPL = “”” … “”” 是测试用例展示部分代码,这段内容是展开测试模块后进行显示的
REPORT_TEST_WITH_OUTPUT_TMPL = r"""<tr id='%(tid)s' class='%(Class)s'>
// %(caseid)s 是python转译html代码中变量替换方式。// caseid 会在python脚本中定义。 <td align='center'>%(caseid)s</td> <td class='%(style)s'>
<div class='testcase'>%(desc)s</div>
</td>
<td colspan='5' align='center'>
<!--css div popup start-->
<a class="popup\_link" onfocus='this.blur();' href="javascript:showTestDetail('div\_%(tid)s')" >
%(status)s </a>
<div id='div\_%(tid)s' class="popup\_window">
<div style='text-align: right; color:red;cursor:pointer'>
<a onfocus='this.blur();' onclick="document.getElementById('div\_%(tid)s').style.display = 'none' " >
[x]</a>
</div>
<pre>%(script)s</pre>
</div>
<!--css div popup end-->
</td>
<td align='center'>
<a href="%(image)s" title="%(image)s">
//这一列内容加入图片快照的链接访问路径 %(image)s 中替换链接地址
<img src="..\data\img.png" height=20 width=20 border=0 /></a>
//链接图标
</td></tr>
单从HTML界面样式展示来看,上面所有代码段中修改都是在每个加入两个。
这样我们的样式就改完了。然后开始加入数据。
加数据
先想一下我们要加什么数据.从样式中看我们增加了两个列,那么有两列的数据是需要增加的,具体加什么呢?想一下?我们在改样式的时候加的两个列中使用到了变量,那么变量取值是需要实现的。那么首先定义变量。
定义报告输出两个变量的取值,放在 REPORT_TEST_OUTPUT_TMPL定义的下面:
脚本片段4:
REPORT_TEST_OUTPUT_TMPL = r"""%(id)s: %(output)s"""
<!--添加内容-->REPORT\_TEST\_OUTPUT\_IMAGE = r"""%(screenshot)s"""REPORT\_TEST\_OUTPUT\_CASEID = r"""%(case\_id)s"""
然后找到 _generate_report_test 函数,在这个函数中定义我们要替换html变量,并实现变量的取值。
脚本片段5:
<!—在原有的script下面分别添加caseid和image变量并赋值,此处不用在意为什么怎么实现的,这么用就对了,script内容展示的其实就是我们case执行时 控制台输出的内容 所以如果你想获取自己在case中print出来的数据就这么做–>