Allure官网:https://docs.qameta.io/allure/
(1)step1:
AllureReportListener这个类需要再加一个saveScreenShot()方法
package com.lemon.listener;
import java.io.File;
import java.io.IOException;
import org.testng.IHookCallBack;
import org.testng.IHookable;
import org.testng.ITestResult;
import com.google.common.io.Files;
import com.lemon.common.BaseCases;
import io.qameta.allure.Attachment;
/**
* implements实现 IHookable接口 重写IHookable接口提供的run方法public void run(IHookCallBack
* callBack, ITestResult testResult); 监听用例执行的的运行状态
*
* @author TF
*
*/
public class AllureReportListener implements IHookable {
@Override
public void run(IHookCallBack callBack, ITestResult testResult) {
// callBack调用runTestMethod方法,将测试结果放到了testResult里面
callBack.runTestMethod(testResult);
// testResult调用getThrowable()方法获取用例的异常执行结果
// 异常结果为空,说明没有异常 ,不为空,说明有异常
if (testResult.getThrowable() != null) {
// 有异常,就截图
//3.将截图嵌入到allure报表
try {
saveScreenShot();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* @throws IOException
* @Attachment是allure提供的注解
*
*
*
*/
@Attachment
public byte[] saveScreenShot() throws IOException {
// 1. 调用截图的方法
// 将异常case的截图存在这个路径下System.getProperty("user.dir")+"\\target\\screenShot\\
// 图片名字:System.currentTimeMillis().png
File screenshot = BaseCases.getScreenshot(
System.getProperty("user.dir") + "\\target\\screenShot\\" + System.currentTimeMillis() + ".png");
// 2.Files.toByteArray(screenshot)将 File类型对象转成byte[] 数组
byte[] byteArray = Files.toByteArray(screenshot);
return byteArray;
}
}
(2)Step2:
BaseCase类getScreenshot()方法需要return File类型的返回值
(因为截图嵌入到报表中,需要File类型的对象)
public static File getScreenshot( String path) {
// File sourceScreen = null 从if抽离出来
// 是因为放在if{}里面,作用域只能是if方法体,if{}外面 找不到
// FileUtils.copyFile(sourceScreen, targetFile)会找不到sourceScreen
File sourceScreen = null;
if (browserName.equals("chrome")) {
ChromeDriver chromeDriver = (ChromeDriver) driver;
sourceScreen = chromeDriver.getScreenshotAs(OutputType.FILE);
} else if (browserName.equals("firefox")) {
FirefoxDriver FirefoxDriver = (FirefoxDriver) driver;
sourceScreen = FirefoxDriver.getScreenshotAs(OutputType.FILE);
} else if (browserName.equals("ie")) {
InternetExplorerDriver ieDriver = (InternetExplorerDriver) driver;
sourceScreen = ieDriver.getScreenshotAs(OutputType.FILE);
}
// 3 实例化File对象->通过自带的构造函数,传入需要生成的目标文件(文件格式,png,jpg,自己定义)
File targetFile = new File(path);
// 4 将源文件sourceScreen拷贝到目标对象targetFile中,即可完成login.png文件创建
// FileUtils需要导入依赖 commons-io
try {
FileUtils.copyFile(sourceScreen, targetFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return targetFile ;
}
(3)step3: 项目构建
image.png上图可以看到截图成功嵌入到报表,但是如果我要想知道截图是来源哪个失败的测试用例怎么做呢?-----优化如下:
(1)AllureReportListener类
1)注解@Attachment(value = "Failure on method{0}", type = "image/png")添加value和type熟悉
2)saveScreenShot(testResult.getMethod().getMethodName());
testResult.getMethod().getMethodName()获取异常case的测试方法名methodName
package com.lemon.listener;
import java.io.File;
import java.io.IOException;
import org.testng.IHookCallBack;
import org.testng.IHookable;
import org.testng.ITestResult;
import com.google.common.io.Files;
import com.lemon.common.BaseCases;
import io.qameta.allure.Attachment;
/**
* implements实现 IHookable接口 重写IHookable接口提供的run方法public void run(IHookCallBack
* callBack, ITestResult testResult); 监听用例执行的的运行状态
*
* @author TF
*
*/
public class AllureReportListener implements IHookable {
@Override
public void run(IHookCallBack callBack, ITestResult testResult) {
// callBack调用runTestMethod方法,将测试结果放到了testResult里面
callBack.runTestMethod(testResult);
// testResult调用getThrowable()方法获取用例的异常执行结果
// 异常结果为空,说明没有异常 ,不为空,说明有异常
if (testResult.getThrowable() != null) {
// 有异常,就截图
// 3.将截图嵌入到allure报表
// 带有@Attachment注解的方法的返回值即为要上传的附件
try {
// testResult.getMethod().getMethodName()获取异常case的测试方法名methodName
saveScreenShot(testResult.getMethod().getMethodName());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* @throws IOException
* @Attachment是allure提供的注解
* value="Failure on method{0}"
* Failure on method这个可以自己定义名字
* {0}-->
* type="image/png要上传的文件是图片类型且格式为png
*
*
*/
@Attachment(value = "Failure on method{0}", type = "image/png")
public byte[] saveScreenShot(String methodName) throws IOException {
// 1. 调用截图的方法
// 将异常case的截图存在这个路径下System.getProperty("user.dir")+"\\target\\screenShot\\
// 图片名字:System.currentTimeMillis().png
File screenshot = BaseCases.getScreenshot(
System.getProperty("user.dir") + "\\target\\screenShot\\" + System.currentTimeMillis() + ".png");
// 2.Files.toByteArray(screenshot)将 File类型对象转成byte[] 数组
byte[] byteArray = Files.toByteArray(screenshot);
return byteArray;
}
}
(2)项目重新构建
image.png
网友评论