java - 如何根据测试环境跳过 Selenium TestNG 测试

标签 java selenium selenium-webdriver testng

我有一个测试,可以登录应用程序并检查一些内容,但登录屏幕不会出现在所有测试环境中。如果没有登录屏幕,登录验证测试将失败,如何通过根据环境禁用/跳过登录测试来克服此问题?

另外,我不太清楚的是,这些测试将与自动化 CI/CD 管道集成。如果没有手动干预,测试如何知道测试是在什么环境下运行的。抱歉,这个问题可能有一个明显的答案,但我是自动化和 CI/CD 的新手。我的测试是用 Java 编写的,非常感谢您的帮助

最佳答案

嗯,TestNG 中有“开箱即用”的注释转换器,您可以使用它实现 transform() 方法,并在您的 @Test 注释上定义语句测试应标记为 ignore=false TestNG doc.

但是,这种方法有一个缺点 - 必须在您的“test.xml”中设置注释转换器才能使用它。 当你不使用 xml 构建测试 DOM 时 - 那么你可以像这样定义你自己的注释

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface EnvDependentIgnore {
String reason();
Environment env();
boolean skip();
}

此外,您还需要实现 IInvokedMethodListener 以在测试调用之前读取注释值。

public class IgnoreTestListener implements IInvokedMethodListener {

@Override
public void beforeInvocation(IInvokedMethod iInvokedMethod, ITestResult testResult) {
    Method method = iInvokedMethod.getTestMethod().getConstructorOrMethod().getMethod();
    if (method.isAnnotationPresent(EnvDependentIgnore.class)) {
        if (//"your environment value"
                .equalsIgnoreCase(method.getAnnotation(EnvDependentIgnore.class).env().getValue()) &&
                method.getAnnotation(EnvDependentIgnore.class).skip()) {
            throw new SkipException(method.getAnnotation(EnvDependentIgnore.class).reason());
        }
    }
}

@Override
public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
    // no need to implement
}
}

这是一种有点困惑的方法,但对我来说效果很好。

关于java - 如何根据测试环境跳过 Selenium TestNG 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50867421/

相关文章:

java - 父方法可以检查哪个子方法调用了它吗?

java - 从 Tomcat servlet 运行 sudo 命令

selenium - Selenium 中::的含义是什么

c# - 切换选项卡在 Selenium Webdriver 中不起作用

javascript - 在 webdriver js 中使用Session

java - 整数太大

java - 关闭由 JOptionPane.showOptionDialog() 创建的对话框

java - Selenium : How to solve org. openqa.selenium.InvalidElementStateException: 无效元素状态

Selenium Webdriver 无法获取 Modal 中的元素

日志中的 selenium webdriver ruby​​ 警告消息