您的位置:首页 > 其它

testng 失败自动截图

2015-09-16 22:34 344 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: