在上一篇《定时更新SVN完成构建》中讲了定时从SVN拉取最新的测试脚本,并自动构建的过程。这篇我将介绍怎么配置测试robot报告,并发送给指定人群。
1、要发给指定人,首先需要在job配置,构建后操作中增加“Editable Email Notification”。(我在安装Jenkins中已经安装上了该插件,如果没有,你可以在 系统管理->管理插件 中搜索安装)
这里面大部分都采用默认,主要注意 Default Content ,这里为报告的内容,通常默认的报告非常简单,我这里采用了模板 robot.template, 模板后面我将告诉大家怎么设置
2、要发邮件,一定要设置邮件SMTP服务,设置位置在 系统管理->系统设置 中 邮件通知 栏配置。配置好后,可以勾选“通过发送测试邮件测试配置”,填写收件人进行测试。
3、是不是上面配置好就OK,这里千万要注意,这里面的用户名(即邮箱账号)要与配置中 系统管理员邮件地址 一致,否则最后在构建中,发送邮件会失败! (以前我可是折腾了半天,才找到了失败的原因)
4、在第一步中,我们看到有些默认配置,这些默认配置变量值也是在 系统设置中 Extended E-mail Notification 设置。包括邮件发送人,抄送人等。
到了这一步,基本就搞定了,但是我们最关键的一步来了,怎么配置模板?
5、配置模板
1)在Jenkins安装根目录下 确保(或新建)一文件夹 email-templates ,我们把自己的模板(如上面提到的robot.template)放置在下面即可。
2)这里笔者友情提供自己通过改写制作的模板robot.template,希望有用多支持下51ste部落,^_^。内容具体如下:
<%
import java.text.DateFormat
import java.text.SimpleDateFormat
%>
<!-- Robot Framework Results -->
<div style="margin-bottom:20px;width:100%;">
<% def res = build.result.toString().toLowerCase()
if (res=="success") {%>
<p style="font-size:30px;margin:0px;background:#ccc;color:green;"><img alt="ROBOT" src="http://i39.tinypic.com/2z3uk4j.jpg"/>构建状态:<%= build.result.toString().toLowerCase()%>
<% } else{ %>
<p style="font-size:30px;margin:0px;background:#ccc;color:red;"><img alt="ROBOT" src="http://i39.tinypic.com/2z3uk4j.jpg"/>构建状态:<%= build.result.toString().toLowerCase()%>s
<%}%>
<p>项目名称:${project.name}</p>
<p>构建时间:${it.timestampString}</p>
<p>构建轮次:<a href="${rooturl}${build.url}">${build.displayName}(点击查看此轮构建信息)</a></p>
<p>构建时长:${build.durationString}</p>
</div>
<%
def robotResults = false
def actions = build.actions // List<hudson.model.Action>
actions.each() { action ->
if( action.class.simpleName.equals("RobotBuildAction") ) { // hudson.plugins.robot.RobotBuildAction
robotResults = true %>
<div style="width:100%;float:left">
<table cellspacing="0" cellpadding="4" border="1" align="left" style="width:40%">
<thead>
<tr bgcolor="#F3F3F3">
<td style="text-align:center" colspan="4"><b>自动化测试汇总报告</b></td>
</tr>
<tr>
<td bgcolor="#F3F3F3" style="width:80px"><b>详细报告:</b></td>
<td colspan="4"><a href="${rooturl}${build.url}robot/report/report.html">点击查看报告详情</a></td>
</tr>
<tr bgcolor="#F3F3F3">
<td><b>用例总数</b></td>
<td><b>通过</b></td>
<td style="width:60px"><b>不通过</b></td>
<td style="width:100px"><b>通过率</b></td>
</tr>
<tr>
<td><%= action.result.overallTotal %></td>
<td><b><span style="color:#66CC00"><%= action.result.overallPassed %></span></b></td>
<td><b><span style="color:#FF3333"><%= action.result.overallFailed %></span></b></td>
<td><%= action.overallPassPercentage %>%</td>
</tr>
<tr bgcolor="#F3F3F3">
<td colspan="2"><b>用例名称</b></td>
<td><b>测试结果</b></td>
<td><b>耗费时长</b></td>
</tr>
</thead>
<tbody>
<% def suites = action.result.allSuites
suites.each() { suite ->
def currSuite = suite
def suiteName = currSuite.displayName
// ignore top 2 elements in the structure as they are placeholders
while (currSuite.parent != null && currSuite.parent.parent != null) {
currSuite = currSuite.parent
suiteName = currSuite.displayName + "." + suiteName
} %>