我有一个测试记录到一个应用程序并检查一些东西,但登录屏幕不会出现在所有测试环境中。如果没有登录屏幕,登录验证测试将失败,如何通过禁用/跳过基于环境的登录测试来克服此问题?
另外我不太清楚的是,这些测试将与自动化CI / CD管道集成。如果没有人工干预,测试将如何知道测试运行的环境。对不起,可能有一个明显的答案,但我是自动化和CI / CD的新手。我的测试是用Java编写的,非常感谢您的帮助
答案 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)
我有一个非常确切的用例。实际上有两个类似的用例。
即使它们听起来都相同,但实现方式略有不同。
为了根据环境跳过测试,我不得不使用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/
答案 2 :(得分:0)
您可以使用TestNG组标记测试用例。使用您的环境数据标记您的测试用例。因此,当您运行测试用例时,您将使用TestNG -groups选项指定要运行的环境(例如login env)。它只会运行那些用指定标记/ gropus标记的测试用例。
有关群组的详情,请参阅https://testng.org/doc/documentation-main.html#test-groups
答案 3 :(得分:0)
有几种方法:
根据环境按类排序您的测试。
按@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>
创建您自己的环境界面@Environment(&#34; production&#34;),查看此article
在maven中通过环境/系统变量注入时,让我们通过Maven说Jenkins,例如:
mvn -Denv =生产测试
希望这有帮助,