前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java自动化测试(web自动化测试框架2 29)

Java自动化测试(web自动化测试框架2 29)

作者头像
zx钟
发布2020-09-23 15:20:05
6180
发布2020-09-23 15:20:05
举报
文章被收录于专栏:测试游记测试游记

项目地址:https://github.com/zx490336534/java_web_base

截图

代码语言:javascript
复制
package com.zhongxin.demo;

import com.zhongxin.common.BaseCase;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;

import java.io.File;

public class ScreenShotDemo extends BaseCase {
    @Test
    public void test() throws Exception {
        WebDriver driver = open("chrome");
        driver.get("htts://www.baidu.com");
        Thread.sleep(2000);
        TakesScreenshot screenshot = (TakesScreenshot) driver;
        File file = screenshot.getScreenshotAs(OutputType.FILE);
        System.out.println(file.getAbsoluteFile());
        File destFile = new File("aaa.png");
        FileUtils.moveFile(file, destFile);
        close(driver);
    }
}

强制类型转换driver

TakesScreenshot screenshot = (TakesScreenshot) driver;

在执行测试的时候,使用截图的场景为:当执行失败的时候进行截图

需要使用监听,判断执行是否成功

代码语言:javascript
复制
package com.zhongxin.listeners;

import com.zhongxin.cases.LoginCase;
import com.zhongxin.common.BaseCase;
import com.zhongxin.utils.ScreenShotUtils;
import org.testng.IHookCallBack;
import org.testng.IHookable;
import org.testng.ITestResult;

public class ScreenShotListener implements IHookable {
    @Override
    public void run(IHookCallBack iHookCallBack, ITestResult iTestResult) {
        // iHookCallBack 用例执行@Test方法的
        // iTestResult @Test方法的结果(@Test对象/方法名/是否抛出异常)
        iHookCallBack.runTestMethod(iTestResult);
        Throwable throwable = iTestResult.getThrowable();
        if (throwable != null) {
            //throwable不等于异常说明@Test出现异常了,执行截图
            Object object = iTestResult.getInstance();
            BaseCase logincase = (BaseCase) object;
            //获取当前@Test方法名
            String methodName = iTestResult.getName();
            //获取当前@Test类名
            String className = iTestResult.getInstanceName();
            String destFilename = className + "_" + methodName + "_" + System.currentTimeMillis() + ".png";
            ScreenShotUtils.screenShot(logincase.driver, destFilename);
        }

    }
}

testng.xml中添加

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="futureloan">
    <listeners>
        <listener class-name="com.zhongxin.listeners.ScreenShotListener"></listener>
    </listeners>
    <test name="登录测试">
        <classes>
            <class name="com.zhongxin.cases.LoginCase"></class>
        </classes>
    </test>
</suite>

将截图展示在Allure报告中

代码语言:javascript
复制
package com.zhongxin.listeners;

import com.zhongxin.common.BaseCase;
import io.qameta.allure.Attachment;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.testng.IHookCallBack;
import org.testng.IHookable;
import org.testng.ITestResult;

public class AllureReportListener implements IHookable {

    @Attachment(value = "Page screenshot", type = "image/png")
    public byte[] saveScreenshot(byte[] screenShot) {
        return screenShot;
    }

    @Override
    public void run(IHookCallBack iHookCallBack, ITestResult iTestResult) {
        iHookCallBack.runTestMethod(iTestResult);
        Throwable throwable = iTestResult.getThrowable();
        if (throwable != null) {
            //throwable不等于异常说明@Test出现异常了,执行截图
            Object object = iTestResult.getInstance();
            BaseCase baseCase = (BaseCase) object;
            TakesScreenshot screenshot = (TakesScreenshot) baseCase.driver;
            byte[] screenshotAs = screenshot.getScreenshotAs(OutputType.BYTES);
            saveScreenshot(screenshotAs);
        }
    }
}

testng.xml

代码语言:javascript
复制
<listeners>
    <listener class-name="com.zhongxin.listeners.AllureReportListener"></listener>
</listeners>

重试

代码语言:javascript
复制
package com.zhongxin.listeners;

import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;

public class MyRetry implements IRetryAnalyzer {
    private int retryCount = 0;//当前重试次数
    private static final int maxRetryCount = 3;//最大重试次数

    @Override
    public boolean retry(ITestResult iTestResult) {
        if (retryCount < maxRetryCount) {
            retryCount++;
            return true;
        }
        return false;
    }
}

在测试代码头部增加

代码语言:javascript
复制
@Test(retryAnalyzer = MyRetry.class)

全部添加重试

代码语言:javascript
复制
package com.zhongxin.listeners;

import com.zhongxin.common.BaseCase;
import io.qameta.allure.Attachment;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.testng.IHookCallBack;
import org.testng.IHookable;
import org.testng.ITestResult;

public class AllureReportListener implements IHookable {

    @Attachment(value = "Page screenshot", type = "image/png")
    public byte[] saveScreenshot(byte[] screenShot) {
        return screenShot;
    }

    @Override
    public void run(IHookCallBack iHookCallBack, ITestResult iTestResult) {
        iHookCallBack.runTestMethod(iTestResult);
        Throwable throwable = iTestResult.getThrowable();
        if (throwable != null) {
            //throwable不等于异常说明@Test出现异常了,执行截图
            Object object = iTestResult.getInstance();
            BaseCase baseCase = (BaseCase) object;
            TakesScreenshot screenshot = (TakesScreenshot) baseCase.driver;
            byte[] screenshotAs = screenshot.getScreenshotAs(OutputType.BYTES);
            saveScreenshot(screenshotAs);
        }
    }
}

testng.xml

代码语言:javascript
复制
<listener class-name="com.zhongxin.listeners.RetryListener"></listener>
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 截图
  • 将截图展示在Allure报告中
  • 重试
    • 全部添加重试
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档