如何检测我的测试是否在 Jenkins 环境中运行?
我有一个JUnit测试,用于跳过测试,如果开发人员的计算机没有运行它的先决条件软件。尽管是“junit”,但这是一个集成测试。像这样:Assumption
int isSoftwarePresent = new ProcessBuilder("check software presence").start().waitFor();
Assume.assumeThat("Software not present", isSoftwarePresent, is(equalTo(0)));
但是,由于这种假设,我一度意识到测试已经停止在Jenkins上的自动构建上运行,最终引入了回归,测试应该停止。
换句话说,Jenkins 从属环境中缺少所需的软件,这导致测试被跳过。
自动化测试由 maven 使用 FailSafe 插件在 Jenkins Pipeline 构建计划上运行。如何检测我的环境是 Jenkins,以便使假设条件更加严格?
也就是说,我希望条件是这样的:
boolean isJenkinsBuild = /* true if this is being run inside a Jenkins build, false otherwise */;
boolean isSoftwarePresent = new ProcessBuilder("check software presence").start().waitFor() == 0;
Assume.assumeTrue("Software not present", isSoftwarePresent || isJenkinsBuild);
甚至,
@Test
void testJenkinsEnvironment() {
...
Assume.assumeTrue(isJenkinsBuild);
Assert.assertTrue(isSoftwarePresent);
}
@Test
void testFeature() {
...
Assume.assumeTrue(isSoftwarePresent);
...
}