您的位置:首页 > 其它

Reportng测试报告添加失败用例截图

2017-10-16 14:01 423 查看
前言:由于reportng生成的测试报告里没有失败的用例截图,现在想自己修改reportng,加上截图等功能。这里详细的总结一遍实现过程

主要参考博客:

https://testerhome.com/topics/3594

http://tech.it168.com/a2013/0906/1530/000001530755_all.shtml

一、IDEA导入reportng源码

1、下载reportng源码,地址:https://github.com/dwdyer/reportng



2、将源码zip包解压

3、在IDEA里点击file-new-Project from Existing Sources…



4、选择解压后的文件,然后一直下一步打开,打开后目录如下:



二、修改代码

1、reportng.properties 增加报表Log Info和Screen Shot列(列名最好用英文,用中文会乱码,我还未解决)

在该文件最后加如下代码

log=Log Info
screenshot=Screen Shot


2、results.html.vm 修改结果的html,如下图:



代码如下:

#if ($failedTests.size() > 0)
<table class="resultsTable">
<tr><th colspan="6" class="header failed">$messages.getString("failedTests")</th></tr>
#foreach ($testClass in $failedTests.keySet())
<tr>
<td colspan="1" class="group">$testClass.name</td>
<td colspan="1" class="group">$messages.getString("duration")</td>
<td colspan="1" class="group">$messages.getString("log")</td>
<td colspan="1" class="group">$messages.getString("screenshot")</td>
</tr>
#set ($classResults = $failedTests.get($testClass))
#parse ("org/uncommons/reportng/templates/html/class-results.html.vm")
#end
</table>
#end


3、class-results.html.vm 修改具体的内容显示

a、修改代码,在##Show logger output for the test里加一句,去除带有img标签的字符串:

$utils.removeImage($line)<br />


如下图:



b、最后加这段代码,提取含有img标签的字符串:

<td class="screenshot">
#set ($output = $utils.getTestOutput($testResult))
#if ($output.size() > 0)
<div class="screenshotimage">
#foreach( $line in $output )
#if ($meta.shouldEscapeOutput())
$utils.escapeHTMLString($line)<br />
#else
$utils.getImageString($line)<br />
#end
#end
</div>
#end
</td>


4、ReportNGUtils.java 新增两个方法:

public String getImageString(String s)
{
String regex = "(<img(.*?)/>)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
String group = matcher.group(1);
return group;
}
return "";
}

public String removeImage(String s)
{
return  s.replaceAll("<img(.*?)/>","");
}


5、TestResultComparator.java 默认的ReportNG的报告中,是以字母序对执行的方法进行排序的,修改方法以执行先后顺序来进行排序

public int compare(ITestResult result1, ITestResult result2)
{
int longresult2 = 0;
if (result1.getStartMillis() < result2.getStartMillis()) {
longresult2 = -1;
} else {
longresult2 = 1;
}

return longresult2;
}


三、重新打jar包

1、点击File-Project Structure…打开Project Structure弹窗

2、选中Artifacts,点击“+”,选择JAR-From modules with dependencies…



3、在打开的Create JAR from Modules弹窗,点击”ok”



4、在Output directory设置jar包导出目录,如图:



5、点击“Output Layout”处的“+”选择“Directory Content”



6、选择“resources”文件,这样才能把resources文件也打进jar包



7、最后,点击Build-Build Artifacts, 然后双击reportng.jar,如下图:



8、此时jar包已打好,如下图:



四、使用最新的jar包

1、把生成的jar包替换掉本地maven仓库下的reportng.jar,一般是这个目录:

.m2\repository\org\uncommons\reportng\1.1.4


2、我重写了TestngListener的onTestFialure方法,添加显示截图的功能。使用了reportng的Reporter.log()方法输出失败用例截图地址,当用例失败时就显示截图。

代码如下:

public class TestngListener extends TestListenerAdapter  {

public static WebDriver driver;

public void onTestFailure(ITestResult tr) {

super.onTestFailure(tr);
try {
takeScreenShot(tr);
showScreenShot(tr);
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}

/**
* Jenkings显示失败截图
* @param result
*/
public void showScreenShot(ITestResult result) {
//jenkins工作目录对应项目的截图路径
String filePath = "http://192.168.22.35:8080/jenkins/job/ZXKJAutoTest/ws/FailureScreenShot";
Reporter.log("<img src='"+filePath+"/"+result.getName()+".png' hight='300' width='500'/>");
}

/**
* 获取用例失败截图
* @param tr
* @throws IOException
*/
public void takeScreenShot(ITestResult tr) throws IOException{
SimpleDateFormat smf = new SimpleDateFormat("MMddHHmmss") ;
String curTime = smf.format(new java.util.Date());
//      String fileName = tr.getName()+"_"+curTime+".png";
String fileName = tr.getName()+".png";
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(srcFile, new File("FailureScreenShot/"+fileName));
}


3、最后在Jenkins构建后生成的报告如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息