Jenkins上配置Robot Framework测试邮件通知模板
邮件效果
测试成功如下所示:
测试失败如下所示:
通过这个模板,我们能够很直观地看出测试的执行情况,以及相关的统计信息。接下来我们详细介绍如何配置邮件模板
配置邮件模板
第一步编写邮件模板
我们的邮件模板是基于groovy脚本编写的。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<style type="text/css">
/*base css*/
a{color:#4a72af}
body{background-color:#e4e4e4}
body,p{margin:0;padding:0}
img{display:block}
h1,h2,h3,h4,h5,h6{margin:0 0 .8em 0}
h3{font-size:28px;color:#444!important;font-family:Arial,Helvetica,sans-serif}
h4{font-size:22px;color:#4a72af!important;font-family:Arial,Helvetica,sans-serif}
h5{font-size:18px;color:#444!important;font-family:Arial,Helvetica,sans-serif}
p{font-size:12px;color:#444!important;font-family:"Lucida Grande","Lucida Sans","Lucida Sans Unicode",sans-serif;line-height:1.5}
table.robotstat {
border: 1px solid black;
border-collapse: collapse;
empty-cells: show;
margin: 0px 1px;
table-layout: fixed;
word-wrap: break-word;
font-size: 1em;
border-width:1px;
}
tr.test_column_robot {
background-color:#C6C6C6;
}
ol li img{display:inline;height:20px}
/*div styles*/
.news{text-align:center;padding-top:15px;}
.content{width:720px;margin:0 auto;background-color:white}
.round_border{margin-bottom:5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;margin-top:0;font-size:14px;padding:6px;border:1px solid #ccc}
.status{background-color:<%=
build.result.toString() == "SUCCESS" ? 'green' : 'red' %>;font-size:28px;font-weight:bold;color:white;width:720px;height:52px;margin-bottom:18px;text-align:center;vertical-align:middle;border-collapse:collapse;background-repeat:no-repeat}
.status .info{color:white!important;text-shadow:0 -1px 0 rgba(0,0,0,0.3);font-size:32px;line-height:36px;padding:8px 0}
.main img{width:38px;margin-right:16px;height:38px}
.main table{font-size:14px;}
.main table th{text-align:right;}
.bottom-message{width:720px;cellpadding:5px;cellspacing:0px}
.bottom-message .message{font-size:13px;color:#aaa;line-height:18px;text-align:center}
.bottom-message .designed{font-size:13px;color:#aaa;line-height:18px;font-style: italic;text-align:right}
img.cartoon {width: 36px; display:inline}
</style>
<body>
<div class="content round_border">
<div class="status">
<p class="info">构建状态 <%= build.result.toString().toLowerCase() %></p>
</div>
<!-- status -->
<div class="main round_border">
<table>
<tbody>
<tr>
<th>项目名称:</th>
<td>${project.name}</td>
</tr>
<tr>
<th>构建轮次:</th>
<td><a
href="${rooturl}${build.url}">${build.displayName}(点击查看此轮构建信息)</a></td>
</tr>
<tr>
<th>构建时间:</th>
<td>${it.timestampString}</td>
</tr>
<tr>
<th>构建时长:</th>
<td>${build.durationString}</td>
</tr>
<tr>
<th>构建缘由:</th>
<td><% build.causes.each() { cause -> %> ${cause.shortDescription} <% } %></td>
</tr>
<tr>
<th>测试报告:</th>
<td><a
href="${rooturl}${build.url}robot">点击查看测试报告详情</a></td>
</tr>
<tr>
<!-- test stat -->
<th>测试统计:</th></br>
<td>
<table id="robotstat" class="robotstat">
<thead>
<tr id="test_column_robot" class="test_column_robot">
<th>测试总用例数</th>
<th>失败用例数</th>
<th>测试通过率</th>
</tr>
</thead>
<tbody>
<tr>
<% def robotTestResultAction = it.getAction("hudson.plugins.robot.RobotBuildAction") %>
<td>${robotTestResultAction.getTotalCount()}</td>
<td>${robotTestResultAction.getFailCount()}</td>
<td>${robotTestResultAction.getOverallPassPercentage()}%</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<th>变更记录:</th>
<td><a
href="${rooturl}${build.url}changes">点击查看变更记录</a></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</tbody>
</table>
</div>
<!-- main -->
<% def artifacts = build.artifacts
if(artifacts != null && artifacts.size() > 0) { %>
<div class="artifacts round_border">
<b>Build Artifacts:</b>
<ul>
<% artifacts.each() { f -> %>
<li><a href="${rooturl}${build.url}artifact/${f}">${f}</a></li>
<% } %>
</ul>
</div>
<% } %>
<!-- artifacts -->
<% def changeSet = build.changeSet
if(changeSet != null) {
def hadChanges = false
def count = 0 %>
<div class="details round_border">
<b>变更详细:</b>
<ol>
<% changeSet.each() { cs ->
hadChanges = true
def aUser = cs.author %>
<li>${cs.msgAnnotated} (${aUser.displayName})
(<a href="${rooturl}${build.url}changes#detail${count}">detail</a>)</li>
<% count ++
} %>
</ol>
</div>
<% } %>
<!-- details -->
</div>
<!-- content -->
<table class="bottom-message" align="center">
<tr>
<td class="message">You are receiving this email because you
are relavent with this build<br>
</td>
</tr>
<tr>
<td colspan="2" class="designed">designed by @wangyang </td>
</tr>
</table>
<!-- bottom message -->
</body>
这个邮件模板是基于groovy-html-larry.template模板改造的,我们将模板文件放到$JENKINS_HOME/email-templates目录下,如果没有这个目录,自己创建该目录。
第二步配置邮件
这里,我们需要在Jenkins安装email-ext插件,配置如下图所示:
这样的话,我们就完成了邮件模板的配置了。如果邮件发送设置正确的话,我们应该可以收到测试邮件通知。
其他
我们还可以自己编写HTML的邮件模板,而不用email-ext插件,下面是我配置效果, 执行完成后,会收到这样的邮件通知。
作者:wywincl
链接:http://www.jianshu.com/p/9368b6627a6d
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Jenkins上配置Robot Framework测试邮件通知模板的更多相关文章
- 用 Python 写 Robot Framework 测试
Robot Framework 框架是基于 Python 语言开发的,所以,它本质上是 Python 的一个库. 1.你懂 Python 语言. 2.又想使用 Robot Framework 测试框架 ...
- 【转】jenkins上配置robotframeworkride自动化脚本任务
jenkins上配置robotframeworkride自动化脚本任务 编写好的自动化脚本,集成在jenkins上进行自动运行于监控,这里采用分布式构建,在一台slave上进行任务构建与自动化脚本的运 ...
- Jenkins进阶系列之——02email-ext邮件通知模板
发现一个很好的邮件通知模板,根据我的需求定制了一些.分享一下. Default Subject: 构建通知:${BUILD_STATUS} - ${PROJECT_NAME} - Build # ${ ...
- 配置Robot Framework 环境时如何查看wxPython是否成功安装
配置Robot Framework,win10系统,安装版本分别如下:
- Jenkins email-ext邮件通知模板
http://blog.csdn.net/houyefeng/article/details/51344337 示例 以html格式发送送如下内容:邮件内容为项目名称.构建次数.触发原因.构建日志前1 ...
- Jenkins+Gitlab CE+Robot Framework持续集成
环境 Ubuntu 14.04.3 LTS Desktop 前提 1.在本地能执行测试脚本(pybot yourTestSuit.txt),本文不讲解如何学习使用RF框架 2.已有Gitlab环境,本 ...
- Robot Framework测试框架用例脚本设计方法
Robot Framework介绍 Robot Framework是一个通用的关键字驱动自动化测试框架.测试用例以HTML,纯文本或TSV(制表符分隔的一系列值)文件存储.通过测试库中实现的关键字驱动 ...
- Robot FrameWork测试案例
Robot FrameWork是一个自动测试框架,可到官网查看详细介绍. 安装 Robot Framework 本文中的Robot framework安装在Win7 (32 bit) 平台上. 接下来 ...
- Robot Framework测试框架学习笔记
一.Robot Framework框架简介 Robot Framework是一种基于Python的可扩展关键字驱动自动化测试框架,通常用于端到端的可接收测试和可接收测试驱动的开发.可以 ...
随机推荐
- hadoop SecondNamenode 详解
SecondNamenode名字看起来很象是对第二个Namenode,要么与Namenode一样同时对外提供服务,要么相当于Namenode的HA. 真正的了解了SecondNamenode以后,才发 ...
- 如何使用Navicat备份数据库脚本
Navicat是一个实用的工具,可以用来备份数据库(Oracle.MySQL.SQLServer)脚本. 备份步骤如下: 1.打开已建立的数据库连接,鼠标右键点击,选择[转储SQL文件]->[结 ...
- Codeforces Round #523 (Div. 2) A. Coins
A. Coins 题目链接:https://codeforc.es/contest/1061/problem/A 题意: 给出n和s,要在1-n中选数(可重复),问最少选多少数可以使其和为s. 题解: ...
- HTTP中的URL长度限制
首先,其实http 1.1 协议中对url的长度是不受限制的,协议原文: The HTTP protocol does not place any a priori limit on the leng ...
- bzoj4756 [Usaco2017 Jan]Promotion Counting
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4756 [题解] dsu on tree,树状数组直接上 O(nlog^2n) # inclu ...
- React第三次入门
传统HTML开发在处理越来越多的服务器数据和用户交互数据反应到复杂界面的时候,代码量越来越大,难以维护. Angular是基于MVVM的开发框架,重量级..不适用于移动端的web栈, 其UI组件的封装 ...
- python 实现定时循环触发某个方法
直接贴上代码 import threading def sayhello(): print "hello world" global t #Notice: use global v ...
- Kuangbin 带你飞-线段树专题 题解
HDU 1166 敌兵布阵 单调更新区间查询和 #include <map> #include <set> #include <list> #include < ...
- [转载]Go的50度灰:Golang新开发者要注意的陷阱和常见错误
初级 开大括号不能放在单独的一行 未使用的变量 未使用的Imports 简式的变量声明仅可以在函数内部使用 使用简式声明重复声明变量 偶然的变量隐藏Accidental Variable Shadow ...
- 2.shell变量
shell的变量的介绍 shell的变量分为系统变量和用户自定义变量系统变量:$HOME, $PWD, $SHELL, $USER等等,这些变量系统已经定义好了,我们可以直接拿来用用户自定义变量:我们 ...