如何仅在部署到 UAT 时进行 jenkins 运行 集成测试?

How to make jenkins run integration tests only when deploying to UAT?

我正在使用 jenkins 并且我有一个 staging > qa > uat > master environment set. 我不希望 jenkins 运行 在暂存和 qa 环境中进行任何集成测试,仅针对 uat 和 master。

可以吗?如果是这样,如何?我的意思是,我应该将单元测试和集成测试分开放在不同的包中吗?今天我有:

src/main/java

src/test/java

定义接口 IntegrationTest

    public interface IntegrationTest {}

并使用 Junit4 中的注释 @Category 将您的测试归类为集成测试。

@Category(IntegrationTest.class)
public class YourTest

所以使用 maven surefirefailsafe 插件创建睾丸组。

        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <excludedGroups>you.package.IntegrationTest</excludedGroups>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <includes>
                    <include>**/*.java</include>
                </includes>
                <groups>you.package.IntegrationTest</groups>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

集成测试将自动从默认执行中排除,即 mvn clean package。但是,如果您 运行 mvn integration-test 所有集成测试都将 运行。