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

时间:2018-06-14 23:51:41

标签: java selenium selenium-webdriver testng

我有一个测试记录到一个应用程序并检查一些东西,但登录屏幕不会出现在所有测试环境中。如果没有登录屏幕,登录验证测试将失败,如何通过禁用/跳过基于环境的登录测试来克服此问题?

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

4 个答案:

答案 0 :(得分:1)

好吧,TestNG中有一个“开箱即用”的注释转换器,您可以使用它实现transform()方法并定义以下语句:当测试中的@Test注释应标有{{1} } TestNG doc.

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

ignore=false

此外,您还需要实现@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface EnvDependentIgnore { String reason(); Environment env(); boolean skip(); } 才能在测试调用之前读取注释值。

IInvokedMethodListener

这有点混乱,但是对我来说很好。

答案 1 :(得分:0)

我有一个非常确切的用例。实际上有两个类似的用例。

  1. 根据缺陷状态跳过测试。
  2. 根据测试环境跳过测试。
  3. 即使它们听起来都相同,但实现方式略有不同。

    为了根据环境跳过测试,我不得不使用TestNG IMethodInterceptor

    @Override
    public List<IMethodInstance> intercept(List<IMethodInstance> testMethods, ITestContext context) {    
    
        //removeIf method returns a boolean if any of the item is removed
        boolean isTestRemoved = testMethods.removeIf(somePredicate);
    
        //if any item is removed, then there is a chance that we might get execption due to missing dependencies.
        testMethods.stream()
                   .map(IMethodInstance::getMethod)
                   .forEach(method -> method.setIgnoreMissingDependencies(isTestRemoved));
    
        return testMethods;
    }
    

    根据缺陷状态跳过测试,我不得不使用IInvokedMethodListener

    更多细节在这里。

    http://www.testautomationguru.com/selenium-webdriver-how-to-skip-tests-based-on-test-environment/

    http://www.testautomationguru.com/selenium-webdriver-how-to-automatically-skip-tests-based-on-open-defects/

答案 2 :(得分:0)

您可以使用TestNG组标记测试用例。使用您的环境数据标记您的测试用例。因此,当您运行测试用例时,您将使用TestNG -groups选项指定要运行的环境(例如login env)。它只会运行那些用指定标记/ gropus标记的测试用例。

有关群组的详情,请参阅https://testng.org/doc/documentation-main.html#test-groups

答案 3 :(得分:0)

有几种方法:

  1. 根据环境按类排序您的测试。

  2. @Test(groups = {"test"})@Test(groups = {"production"})排序并过滤通过(如果使用testNg testsuite.xml via参数),这里是xml示例

        

        <!--server parameter-->
        <parameter name="file" value="/build.apk"/>
        <parameter name="server" value="LOCAL"/>
        <parameter name="device" value="emulator-5554"/>
    
         // with this as parameter and parse it in code//
        <parameter name="environment" value="TEST"/>
    
         // or via group filtration in testng //
        <groups>
            <run>
                <include name="production"/>
            </run>
        </groups>
    
        <packages>
            <package name="testing.android"/>
        </packages>
    </test>
    

  3. 创建您自己的环境界面@Environment(&#34; production&#34;),查看此article

  4. 在maven中通过环境/系统变量注入时,让我们通过Maven说Jenkins,例如:

      

    mvn -Denv =生产测试

  5. 希望这有帮助,