zoukankan      html  css  js  c++  java
  • (转)testng对失败时截图处理

    写这篇微博之前,自动化测试代码中有对于失败测试截图的功能,但是却散落在各个catch语句块中。不便于以后的扩展和维护,AOP思想里说明是面向切面编程,把公共的组件提取出来,可以单独修改维护。

    但是直到我看了http://www.cnblogs.com/zhangfei/p/4271923.html文章后,觉得应该尝试下了。在此感谢博主张飞的倾情分享!

    步骤一,在公共utility包中加入截图方法

    几个重点 a. 明确截图文件存放的位置和名字   b. 调用webdriver 下的getScreenshotAs方法截图,并将截图文件copy到指定目录下

    直接上张飞的code!

     1 public class ScreenShot {
     2     public WebDriver driver;
     3  
     4     public ScreenShot(WebDriver driver) {
     5         this.driver = driver;
     6     }
     7  
     8     private void takeScreenshot(String screenPath) {
     9         try {
    10             File scrFile = ((TakesScreenshot) driver)
    11                     .getScreenshotAs(OutputType.FILE);
    12             FileUtils.copyFile(scrFile, new File(screenPath));
    13         } catch (IOException e) {
    14             System.out.println("Screen shot error: " + screenPath);
    15         }
    16     }
    17  
    18     public void takeScreenshot() {
    19         String screenName = String.valueOf(new Date().getTime()) + ".jpg";
    20         File dir = new File("test-output/snapshot");
    21         if (!dir.exists())
    22             dir.mkdirs();
    23         String screenPath = dir.getAbsolutePath() + "/" + screenName;
    24         this.takeScreenshot(screenPath);       
    25     }
    26 }

    步骤二,定义一个类,实现TestNG的TestListenerAdapter接口

    几个重点: a.得到当前要监听接口的webdriver对象 b.进而去调用utility类的截图方法

    public class DotTestListener extends TestListenerAdapter{
     
    	@Override
        public void onTestFailure(ITestResult tr) {    
    		try {
    			loginTest tb = (loginTest) tr.getInstance();
    			WebDriver driver=tb.getDriver();   
                System.out.println("listener is running");
                
                ScreenShot ssh = new ScreenShot(driver);
                ssh.takeScreenshot();
                System.out.println("take screenshot ok!");
                
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {         
                e.printStackTrace();
            }
             
        }
    	
    
    	}

    步骤三,使用监听器

    TestNG有两种方式使用监听器

    方式一   在 testng.xml 中使用 TestNG 监听器

    TestNG 通过 testng.xml 配置所有的测试方法。Testng.xml 提供了 listeners 和 listener 标签用来添加自定义的监听器。下面示范的是本文示例代码中包含的 testng.xml 文件。

     1 <suite name="TestNGSample">
     2     <listeners>
     3         <listener class-name="listeners.OSFilter" />
     4         <listener class-name="listeners.ProgressTracker" />
     5     </listeners>
     6     <test name="ProgressTracker Demo">
     7         <classes>
     8             <class name="tests.SampleTest" />
     9         </classes>
    10     </test>
    11 </suite>

    方式二  在源代码中使用 TestNG 监听器

    通过 @Listeners 注释,可以直接在 Java 源代码中添加 TestNG 监听器。下面示范的是本文示例代码中如何使用 @Listeners 注释。

    1 @Listeners({ OSFilter.class, ProgressTracker.class })
    2 public class SampleTest {
    3 
    4     @Test(groups = { OSNames.OS_LINUX })
    5     public void test1() {
    6         sleep(5000);
    7         System.out.println(">>>test1");
    8     }

    我用的是第二种方式。

    参考文章:

    http://www.cnblogs.com/zhangfei/p/4271923.html

  • 相关阅读:
    java8大排序
    如何删除oracle 的用户及其数据
    JavaScript开发者常忽略或误用的七个基础知识点
    Vim学习指南
    5个开发人员不应该错过的最好跨平台PHP编辑器
    OpenGL 简介
    web 页面内容优化管理与性能技巧
    创建高性能移动 web 站点
    近期十大优秀jQuery插件推荐
    30本世界名著浓缩成的经典话语
  • 原文地址:https://www.cnblogs.com/witkeychen/p/5610059.html
Copyright © 2011-2022 走看看