无法通过TeamCity运行某些功能文件标记
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法通过TeamCity运行某些功能文件标记相关的知识,希望对你有一定的参考价值。
我有各种Cucumber功能文件,每个文件都有多个场景。每个要素文件用于系统的不同组件。
我有各种运行器,每个组件一个,因此每个功能文件一个。
下面是我的一些项目结构,您可以在其中查看包含_Run_AllTest.java
和我在Resources文件夹中的功能的运行程序。
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文件中包含以下内容,其中我声明包括我的所有运行文件,即**/*_Run_All*.java
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<testSourceDirectory>src estjava</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。
如果没有看到@AutomatedTPOS功能仅在我们从TeamCity运行时运行,我做错了什么?
Edit1:如果我从POM中删除以下内容
<includes>
<include>**/*_Run_All*.java</include>
</includes>
然后我通过mvn clean test -Dcucumber.options="--tags @AutomatedTPOS"
命令运行我的场景,然后我可以看到事情按预期工作,即只运行@AutomatedTPOS场景。但是,如果我然后通过TeamCity启动此构建,则此时不会运行任何测试。当POM中的这一行存在时,所有场景都在运行。
当我通过TeamCity查看构建日志时,我可以看到命令行包含qazxsw poi
在CI Developer的帮助下,我们找到了答案。
在TeamCity中,"-Dcucumber.options="--tags @AutomatedTPOS""
的参数应该位于“Additional Maven命令行参数:”字段中,而不是“JVM命令行参数:”字段中。
我也从POM中删除了以下内容,因为这没有任何意义。
"-Dcucumber.options=--tags @AutomatedTPOS"
我认为引用可能是错误的。你可能会有更多的运气:
<includes>
<include>**/*_Run_All*.java</include>
</includes>
以上是关于无法通过TeamCity运行某些功能文件标记的主要内容,如果未能解决你的问题,请参考以下文章
TeamCity Perforce 错误 - 没有要提交的文件