如何解决testng执行用例报错自动截图问题
2017-06-01 15:29
357 查看
最近做自动化总是遇到用例执行失败的情况,虽然从报错中可以看到是什么地出错了,但是大概似乎好像我们不知道是哪个界面的元素出错了,你还得去看脚本去查找问题;
所以我想让testng监听我要执行的所有用例,一旦用例中有报错,赶紧电话通知我:歪,你用例有地儿报错了,我已经给你把案发现场照片拍下来放到某某地了。。。呵呵。。
是的,我们今天就要实现这种效果,废话到此为止,言归正传,说点正儿八经的:
要实现这个功能其实不难,但是在网上查了好多,感觉说的不是很详细,如果你按照那个步骤操作很有可能一次点亮不成功,所以,我也是自己总结出来写这样一篇博客,希望大家都能看懂,并且按照我的步骤操作也尽量让大家都能一次点亮!(自己也走了不少弯路,如果对你有帮助,请怒顶起来吧,谢谢!)
一、说明:使用Reporter监听器,当用例执行失败时截图,截图以出错时系统时间命名(可以自己规定显示格式),截图保存到项目目录snapshot下
二、操作:我们编写一个获取屏幕截图的类,直接上代码:
五、这样我们就完成了上述操作,下面执行case(你需要让case报错)
六、运行完之后,查看snapshot目录下是否有我们的报错截图,如下:
七、给大家说一下运行原理:从开始执行说起,因为你的监听放到了case类前边,所以当你执行case的时候,监听就开始工作了,一旦哪里报错@Listeners就会报告给-->ScreenFailtureListener.java,ScreenFailtureListener.java得到消息后就会跟-->ScreenShot.java说:出事了,赶紧拍照,之后就是把照片(截图)放到snapshot目录下,这就是testng运行用例失败自动截图的操作流程!
八、到此,case失败后自动截图功能已经完成,如果有问题请留言,看到后会第一时间回复,如果好用就顶起来吧!
所以我想让testng监听我要执行的所有用例,一旦用例中有报错,赶紧电话通知我:歪,你用例有地儿报错了,我已经给你把案发现场照片拍下来放到某某地了。。。呵呵。。
是的,我们今天就要实现这种效果,废话到此为止,言归正传,说点正儿八经的:
要实现这个功能其实不难,但是在网上查了好多,感觉说的不是很详细,如果你按照那个步骤操作很有可能一次点亮不成功,所以,我也是自己总结出来写这样一篇博客,希望大家都能看懂,并且按照我的步骤操作也尽量让大家都能一次点亮!(自己也走了不少弯路,如果对你有帮助,请怒顶起来吧,谢谢!)
一、说明:使用Reporter监听器,当用例执行失败时截图,截图以出错时系统时间命名(可以自己规定显示格式),截图保存到项目目录snapshot下
二、操作:我们编写一个获取屏幕截图的类,直接上代码:
package xxxx; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.testng.Reporter; public class ScreenShot { public static void takeScreenshot(String screenPath,WebDriver driver) { try { File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile, new File(screenPath)); } catch (IOException e) { System.out.println("Screen shot error: " + screenPath); Reporter.log("该错误可以查看截图:"+screenPath); } } public static void takeScreenshot(WebDriver driver) { Date date = new Date(); String sj = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒").format(date); String screenName = sj + ".jpg"; File dir = new File("test-output/snapshot"); if (!dir.exists()) dir.mkdirs(); String screenPath = dir.getAbsolutePath() + "/" + screenName; takeScreenshot(screenPath, driver); } }三、新建(重写)onTestFailure类,我们给它命名为ScreenFailtureListener,代码如下:
package xxxx; import org.testng.ITestResult; import org.testng.TestListenerAdapter; public class ScreenFailtureListener extends TestListenerAdapter { @Override public void onTestFailure(ITestResult tr) { System.out.println("执行onTestFailure"); ScreenShot.takeScreenshot(xxxx.driver);//xxxx代表你要运行的case类名 super.onTestFailure(tr); } }四、我所有的用例都会继承基类TestCase.java,所以我在case中添加了监听器(@Listeners放到类名之前就可以),如下图:
五、这样我们就完成了上述操作,下面执行case(你需要让case报错)
六、运行完之后,查看snapshot目录下是否有我们的报错截图,如下:
七、给大家说一下运行原理:从开始执行说起,因为你的监听放到了case类前边,所以当你执行case的时候,监听就开始工作了,一旦哪里报错@Listeners就会报告给-->ScreenFailtureListener.java,ScreenFailtureListener.java得到消息后就会跟-->ScreenShot.java说:出事了,赶紧拍照,之后就是把照片(截图)放到snapshot目录下,这就是testng运行用例失败自动截图的操作流程!
八、到此,case失败后自动截图功能已经完成,如果有问题请留言,看到后会第一时间回复,如果好用就顶起来吧!
相关文章推荐
- 如何解决testng执行用例失败自动重跑问题
- 解决RobotFramework用例执行失败自动重跑问题
- Java+Selenium3框架设计篇6-如何解决多条类下用例执行只启动一次浏览器的问题
- 绝对酷,如何解决asp.net中javascript脚本的问题(使用服务器控件执行客户端脚本)
- 绝对酷,如何解决asp.net中javascript脚本的问题(使用服务器控件执行客户端脚本)
- 如何解决eWebEditor在线编辑器的远程自动上传功能不能使用的问题?
- 如何解决Eclipse中Android 代码自动补全卡死的问题
- Jquery的bind绑定方法 自动执行的问题解决
- 如何解决List集合类数据源变更UI不能自动刷新的问题
- 如何解决调试WEB页面时自动运行TerraExplorer软件的问题
- Win7如何提升为管理员权限,如何开机启动需要管理员权限的程序,解决win7开机不能自动运行的问题等
- 如何解决SQL Server主键和自动编号问题
- 解决如何使ListView 自动滚的问题?
- 如何解决SQL Server主键和自动编号问题
- Win7如何提升为管理员权限,如何开机启动需要管理员权限的程序,解决win7开机不能自动运行的问题等
- 对于如何解决wicket Ajax 自动提示应用中出现的乱码问题!
- 一句话知识:如何解决winform自动缩放产生的布局问题.
- 如何解决winform自动缩放产生的布局问题.
- websocket如何解决tcp多请求自动合并成一条请求的问题
- PLSQL提示"动态执行表不可访问,本会话的自动统计被禁止"问题的解决