【发布时间】:2021-07-28 15:37:56
【问题描述】:
我有一套黄瓜安卓测试(它们是仪器测试),我使用gradlew connectedCheck 运行它们。我正在尝试做的是在我运行测试时仅运行某些标签(这就是标签的用途,对吗?)使用命令行选项,而不必每次在测试运行之间修改代码(所以我可以轻松运行这些来自 CI 服务器等)。
例如,我有标签@one 和@two。我想执行两个 gradle 构建,第一个包含所有 @one 测试,第二个包含所有 @two 测试。这将是自动化管道的一部分,因此我无法在这两个构建之间修改代码(使用 @CucumberOptions)。
这是我迄今为止尝试过的:
尝试1:多个CucumberOptions带注释的类
我尝试让多个跑步者(CucumberAndroidJUnitRunner 的子类)和不同的@CucumberOptions 在每个跑步者上,指定不同的标签,然后通过 Gradle 属性控制使用哪一个。然后我做了两个构建,每个跑步者一个。然而,在这两种情况下,Cucumber 只是按字母顺序使用了第一个运行程序的 @CucumberOptions 注释,因此两个测试运行的标签是相同的。 (换句话说,即使正在使用的跑步者有一个@CucumberOptions 注释,也不一定是被使用的那个。)
尝试 2:使用 gradle -D 选项传递系统属性
我从this thread 那里发现了一个提示,我可能能够通过-Dcucumber.options="--tags @two",但我尝试了这个,但没有成功。它仍然只是从@CucumberOptions 中获取标签,并忽略了我在命令行上传递的任何内容。 (无论如何,这个帖子都令人困惑,因为它开始谈论 Gradle,但后来它谈论 Maven。显然我使用的是 Gradle 而不是 Maven。
我也试过-Dcucumber.filter.tags="@two"(我从cucumber-jvm docs找到的,谈论的是Maven而不是Gradle)但这也不起作用,和上面一样。
其他调查
- 我查看了大量在线指南,但它们都是基于修改
@CucumberOptions或从命令行运行cucumber(而不是通过 gradle) - 显然 Java 不允许您通过方法调用定义注解值,即使它们是静态方法,所以
@CucumberOptions中的值必须是常量(我仔细检查了这一点) - 我可以在运行时动态生成
@CucumberOptions-annotated 类,但我不知道如何确保在黄瓜检测运行程序查找它之前发生这种情况
使用的版本
androidTestImplementation 'io.cucumber:cucumber-android:4.8.4'
androidTestImplementation 'io.cucumber:cucumber-picocontainer:4.8.1'
【问题讨论】:
标签: java android gradle cucumber