• testng 失败自动截图


    testng执行case failed ,testng Listener会捕获执行失败,如果要实现失败自动截图,需要重写Listener的onTestFailure方法

    那么首先新建一个Listener 类,继承TestListenerAdapter

    package com.dbyl.libarary.utils;
    
    import org.openqa.selenium.WebDriver;
    import org.testng.ITestContext;
    import org.testng.ITestResult;
    import org.testng.TestListenerAdapter;
    
    /**
     * 
     * @author Young
     *
     */
    public class TestNGListener extends TestListenerAdapter {
        Log log = new Log(this.getClass());
    
        @Override
        public void onTestSuccess(ITestResult tr) {
            log.info("Test Success");
            super.onTestSuccess(tr);
        }
    
        @Override
        public void onTestFailure(ITestResult tr) {
            log.error("Test Failure");
            super.onTestFailure(tr);
            takeScreenShot(tr);
        }
    
        private void takeScreenShot(ITestResult tr) {
            UITest b = (UITest) tr.getInstance();
            WebDriver currentDirver = b.getDriver();
            System.out.println(currentDirver.getTitle());
            b.takeScreenShot();
    
        }
    
        @Override
        public void onTestSkipped(ITestResult tr) {
            log.error("Test Skipped");
            super.onTestSkipped(tr);
        }
    
        @Override
        public void onTestStart(ITestResult result) {
            log.info("Test Finsh");
            super.onTestStart(result);
        }
    
        @Override
        public void onStart(ITestContext testContext) {
            log.info("Test Start");
            super.onStart(testContext);
        }
    
        @Override
        public void onFinish(ITestContext testContext) {
            log.info("Test Finish");
            super.onFinish(testContext);
        }
    
    }

    我这里主要重写OnTestFailure的方法

    添加了一个takeScreenShot的方法

    接下来在UITest类中添加截图的具体实现方法

    /**
     * 
     */
    package com.dbyl.libarary.utils;
    
    import java.io.File;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    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;
    
    /**
     * @author Young
     *
     */
    public class UITest {
        WebDriver driver;
        Log log = new Log(this.getClass());
    
        public WebDriver getDriver() {
            return driver;
        }
    
        /**
         * init test case
         * 
         * @param driver
         */
        public void setDriver(WebDriver driver) {
            this.driver = driver;
        }
    
        public void init(WebDriver driver) {
            log.info("Start WebDriver");
            setDriver(driver);
        }
    
        /**
         * stop webdriver
         * 
         * @param driver
         */
        public void stop() {
            log.info("Stop WebDriver");
            driver.quit();
    
        }
    
        /**
         * @author Young
         */
        public void takeScreenShot() {
            SimpleDateFormat sf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
            Calendar cal = Calendar.getInstance();
            Date date = cal.getTime();
            String dateStr = sf.format(date);
            String path = this.getClass().getSimpleName() + "_" + dateStr + ".png";
            takeScreenShot((TakesScreenshot) this.getDriver(), path);
        }
    
        /**
         * @author Young
         * @param drivername
         * @param path
         */
        public void takeScreenShot(TakesScreenshot drivername, String path) {
            // this method will take screen shot ,require two parameters ,one is
            // driver name, another is file name
            String currentPath = System.getProperty("user.dir"); // get current work
            log.info(currentPath);
            File scrFile = drivername.getScreenshotAs(OutputType.FILE);
            // Now you can do whatever you need to do with it, for example copy
            try {
                log.info("save snapshot path is:" + currentPath + path);
                FileUtils.copyFile(scrFile, new File(currentPath + "\" + path));
            } catch (Exception e) {
                log.error("Can't save screenshot");
                e.printStackTrace();
            } finally {
                log.info("screen shot finished");
            }
        }
    
    }

    接下来在case中使用这个Listener,有两种办法, 第一种直接在case类中添加注解@Listeners({ TestNGListener.class })

    case代码:

    package com.dbyl.tests;
    
    import org.openqa.selenium.WebDriver;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.Listeners;
    import org.testng.annotations.Test;
    
    import com.dbyl.libarary.action.ViewHomePage;
    import com.dbyl.libarary.utils.DriverFactory;
    import com.dbyl.libarary.utils.TestNGListener;
    import com.dbyl.libarary.utils.UITest;
    //@Listeners({ TestNGListener.class })
    public class loginTest extends UITest {
    
        WebDriver driver = DriverFactory.getChromeDriver();
    
        @BeforeMethod(alwaysRun = true)
        public void init() {
    
            super.init(driver);
            ViewHomePage.setDriver(driver);
        }
    
        @Test(groups = "loginTest")
        public void loginByUerName() throws Exception {
            ViewHomePage.viewMyProfile();
        }
    
        @AfterMethod(alwaysRun = true)
        public void stop() {
            super.stop();
        }
    
    }
    View Code

    第二种方法是在eclipse run config 添加如下参数-listener com.dbyl.libarary.utils.TestNGListener

     

    这样就能实现case失败自动截图

    这样,这个框架能够实现一些基本操作,下一步还需要实现失败重试 ,配合虚拟机

    下载地址:https://github.com/tobecrazy/Demo

  • 相关阅读:
    MYSQL长连接的一个小问题
    wpf关于PasswordBox的绑定Password的问题(MVVM框架)
    关于C# DataGridView 全选与取消的小问题
    谈谈在京东手机APP的产品推荐
    赵海平给中国开发者的建议
    python_闭包_匿名函数
    mysql远程连接10038错误
    计算机系统 -- 计算机
    Java——类和对象
    ORACLE数据库定时任务—DBMS_JOB
  • 原文地址:https://www.cnblogs.com/tobecrazy/p/4814813.html
Copyright © 2020-2023  润新知