无法通过 TeamCity 将某些功能文件标签添加到 运行
Cant get certain feature file tags to run through TeamCity
我有各种 Cucumber 功能文件,每个文件都有多个场景。每个功能文件用于系统的不同组件。
我有多个 运行 人员,每个组件一个,因此每个功能文件一个。
下面是我的一些项目结构,您可以在其中看到 运行 资源文件夹中包含 _Run_AllTest.java
和我的功能的资源。
Test
├───java
│ │
│ ├───stepdefs
│ │ ├───MOPStepDefs
│ │ │ ADAWA_Run_AllTest.java
│ │ │ DPL_Run_AllTest.java
│ │ │ MOPStepDefs.java
│ │ │ MOP_Run_AllTest.java
│ │ │
│ │ ├───MOSStepDefs
│ │ │ MOSStepDefs.java
│ │ │ MOS_Run_AllTest.java
│ │ │ PAR_Run_AllTest.java
│ │ │ RenewalApproachingPAR_Run_AllTest.java
│ │ │
│ │ ├───OAStepDefs
│ │ │ OAStepDefs.java
│ │ │ OA_Run_AllTest.java
│ │ │
│ │ └───TPOSStepDefs
│ │ TPOStepDefs.java
│ │ TPOS_Run_AllTest.java
│ │
│ └───Testconfig
│ TestMDABDDConfig.java
│
└───Resources
├───MOP Features
│ ADAWADentalOnlinePayments.feature
│ DPLDentalOnlinePayments.feature
│ MemberOnlinePayments.feature
│
├───MOS Features
│ MemberOnlineService.feature
│ PolicyAmendRequest.feature
│ RenewalApproachingPAR.feature
│
├───Online Apps Features
│ OnlineApplications.feature
│
└───TPOS Features
AllTPOS.feature
举一个我正在使用的标签的例子,AllTPOS.feature 将在我已自动化的功能上包含一个@AutomatedTPOS 标签。还有一些带有@Manual 标签。我的 运行 此功能的开发者如下所示:
package stepdefs.TPOSStepDefs;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
plugin = {
"html:C:\Projects\BDD\Online Framework\Reporting\TPOS Features",
"pretty"
},
features = "src\test\Resources\TPOS Features\AllTPOS.feature",
tags = {"~@Manual"}
)
public class TPOS_Run_AllTest {
}
我在我的 .pom 文件中包含了以下内容,我声明要包含我所有的 运行ner 文件,即 **/*_Run_All*.java
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<testSourceDirectory>\src\test\java\</testSourceDirectory>
<!--<testClassesDirectory>C:/TeamCity/buildAgent2nd/work/classes/</testClassesDirectory>-->
<includes>
<include>**/*_Run_All*.java</include>
</includes>
<!-- <excludes> <exclude>**/*RunCukesTest.java</exclude> </excludes> -->
</configuration>
</plugin>
如果我要通过命令行 运行 Maven 命令,例如 mvn clean test -Dcucumber.options="--tags @AutomatedTPOS"
,那么一切似乎都按预期工作,只有带有 @AutomatedTPOS 标记的功能才会 运行。
所以我的问题是当我们通过 TeamCity 尝试这个时。 CI 开发人员已将 -Dmaven.multiModuleProjectDirectory="%mavenhome%" "-Dcucumber.options=--tags @AutomatedTPOS"
的 JVM 命令行参数添加到 TeamCity 中,但是当我们从 TeamCity 运行 时,它将 运行 每个功能,而不仅仅是我们使用的 @AutomatedTPOS 功能希望。
当我们从 TeamCity 中 运行 时,只看到 @AutomatedTPOS 功能 运行 我做错了什么?
Edit1: 如果我从 POM 中删除以下内容
<includes>
<include>**/*_Run_All*.java</include>
</includes>
然后我通过 mvn clean test -Dcucumber.options="--tags @AutomatedTPOS"
命令 运行 我的场景然后我可以看到事情按预期工作,即只有 @AutomatedTPOS 场景 运行。但是,如果我随后通过 TeamCity 启动此构建,则这次根本没有测试 运行。当 POM 中的这一行出现时,所有场景都是 运行。
当我通过 TeamCity 查看构建日志时,我可以看到命令行包含 "-Dcucumber.options=\"--tags @AutomatedTPOS\""
我认为引用可能放错了地方。您可能会更幸运使用:
-Dmaven.multiModuleProjectDirectory="%mavenhome%" -Dcucumber.options=--tags "@AutomatedTPOS"
在 CI 开发人员的帮助下,我们找到了这个问题的答案。
在 TeamCity 中,"-Dcucumber.options=--tags @AutomatedTPOS"
的参数应该在 'Additional Maven command line parameters:' 字段而不是 'JVM command line parameters:' 字段中。
我还从 POM 中删除了以下内容,因为这没有用。
<includes>
<include>**/*_Run_All*.java</include>
</includes>
我有各种 Cucumber 功能文件,每个文件都有多个场景。每个功能文件用于系统的不同组件。
我有多个 运行 人员,每个组件一个,因此每个功能文件一个。
下面是我的一些项目结构,您可以在其中看到 运行 资源文件夹中包含 _Run_AllTest.java
和我的功能的资源。
Test
├───java
│ │
│ ├───stepdefs
│ │ ├───MOPStepDefs
│ │ │ ADAWA_Run_AllTest.java
│ │ │ DPL_Run_AllTest.java
│ │ │ MOPStepDefs.java
│ │ │ MOP_Run_AllTest.java
│ │ │
│ │ ├───MOSStepDefs
│ │ │ MOSStepDefs.java
│ │ │ MOS_Run_AllTest.java
│ │ │ PAR_Run_AllTest.java
│ │ │ RenewalApproachingPAR_Run_AllTest.java
│ │ │
│ │ ├───OAStepDefs
│ │ │ OAStepDefs.java
│ │ │ OA_Run_AllTest.java
│ │ │
│ │ └───TPOSStepDefs
│ │ TPOStepDefs.java
│ │ TPOS_Run_AllTest.java
│ │
│ └───Testconfig
│ TestMDABDDConfig.java
│
└───Resources
├───MOP Features
│ ADAWADentalOnlinePayments.feature
│ DPLDentalOnlinePayments.feature
│ MemberOnlinePayments.feature
│
├───MOS Features
│ MemberOnlineService.feature
│ PolicyAmendRequest.feature
│ RenewalApproachingPAR.feature
│
├───Online Apps Features
│ OnlineApplications.feature
│
└───TPOS Features
AllTPOS.feature
举一个我正在使用的标签的例子,AllTPOS.feature 将在我已自动化的功能上包含一个@AutomatedTPOS 标签。还有一些带有@Manual 标签。我的 运行 此功能的开发者如下所示:
package stepdefs.TPOSStepDefs;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
plugin = {
"html:C:\Projects\BDD\Online Framework\Reporting\TPOS Features",
"pretty"
},
features = "src\test\Resources\TPOS Features\AllTPOS.feature",
tags = {"~@Manual"}
)
public class TPOS_Run_AllTest {
}
我在我的 .pom 文件中包含了以下内容,我声明要包含我所有的 运行ner 文件,即 **/*_Run_All*.java
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<testSourceDirectory>\src\test\java\</testSourceDirectory>
<!--<testClassesDirectory>C:/TeamCity/buildAgent2nd/work/classes/</testClassesDirectory>-->
<includes>
<include>**/*_Run_All*.java</include>
</includes>
<!-- <excludes> <exclude>**/*RunCukesTest.java</exclude> </excludes> -->
</configuration>
</plugin>
如果我要通过命令行 运行 Maven 命令,例如 mvn clean test -Dcucumber.options="--tags @AutomatedTPOS"
,那么一切似乎都按预期工作,只有带有 @AutomatedTPOS 标记的功能才会 运行。
所以我的问题是当我们通过 TeamCity 尝试这个时。 CI 开发人员已将 -Dmaven.multiModuleProjectDirectory="%mavenhome%" "-Dcucumber.options=--tags @AutomatedTPOS"
的 JVM 命令行参数添加到 TeamCity 中,但是当我们从 TeamCity 运行 时,它将 运行 每个功能,而不仅仅是我们使用的 @AutomatedTPOS 功能希望。
当我们从 TeamCity 中 运行 时,只看到 @AutomatedTPOS 功能 运行 我做错了什么?
Edit1: 如果我从 POM 中删除以下内容
<includes>
<include>**/*_Run_All*.java</include>
</includes>
然后我通过 mvn clean test -Dcucumber.options="--tags @AutomatedTPOS"
命令 运行 我的场景然后我可以看到事情按预期工作,即只有 @AutomatedTPOS 场景 运行。但是,如果我随后通过 TeamCity 启动此构建,则这次根本没有测试 运行。当 POM 中的这一行出现时,所有场景都是 运行。
当我通过 TeamCity 查看构建日志时,我可以看到命令行包含 "-Dcucumber.options=\"--tags @AutomatedTPOS\""
我认为引用可能放错了地方。您可能会更幸运使用:
-Dmaven.multiModuleProjectDirectory="%mavenhome%" -Dcucumber.options=--tags "@AutomatedTPOS"
在 CI 开发人员的帮助下,我们找到了这个问题的答案。
在 TeamCity 中,"-Dcucumber.options=--tags @AutomatedTPOS"
的参数应该在 'Additional Maven command line parameters:' 字段而不是 'JVM command line parameters:' 字段中。
我还从 POM 中删除了以下内容,因为这没有用。
<includes>
<include>**/*_Run_All*.java</include>
</includes>