我有一个包含JUnit测试的Java项目,需要通过Jenkins在不同的测试环境(Dev,Staging等)上运行。
我目前在不同环境上构建项目以及将url,用户名和密码传递给测试运行器的解决方案是在POM文件中为每个环境加载特定属性文件。将通过Maven构建命令为每个环境设置属性文件:
mvn clean install -DappConfig = / src / test / resouces / integration.environment.properties
在pom.xml中:
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<appConfig>${app.config}</appConfig>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
在JUnit测试运行器类中:
public class BoGeneralTest extends TestCase {
protected WebDriver driver;
protected BoHomePage boHomePage;
protected static Properties systemProps;
String url = systemProps.getProperty("Url");
String username = systemProps.getProperty("Username");
String password = systemProps.getProperty("Password");
int defaultWaitTime = Integer.parseInt(systemProps.getProperty("waitTimeForElements"));
String regUsername = RandomStringUtils.randomAlphabetic(5);
final static String appConfigPath = System.getProperty("appConfig");
static {
systemProps = new Properties();
try {
systemProps.load(new FileReader(new File(appConfigPath)));
} catch (Exception e) {
e.printStackTrace();
}
}
这个配置的问题是现在单独的测试不能通过Eclipse单独运行,因为他们希望从maven接收appConfig
并且我得到NullPointerException。
非常感谢任何建议。
答案 0 :(得分:1)
运行单个测试的前提条件是为每个测试用例提供一个Run Configuration,它将指定默认的执行环境。请注意,此设置必须在每个测试用例的本地完成。
在Eclipse Arguments选项卡/ VM Arguments字段中,必须指定VM参数:
-DappConfig=src/test/resources/pp1.environment.properties
它包含具有环境登录详细信息的相应属性文件的路径。
在项目的src / test / resources源文件夹下定义了五个属性文件:
environment1.properties
environment2.properties
environment3.properties
environment4.properties
environment5.properties
答案 1 :(得分:0)
WHITE BOX TESING:
单元测试应该测试工作单元而不依赖于依赖性。一般规则是模拟依赖关系和存根外部系统,以便您有一个安全的测试环境。
IntegrationTests应该以某种方式在真正的环境中注入真正的依赖项并进行测试。
BLACK BOX TESTING:
FunctionalTests是我想你想要实现的。通常,您可以使用集成测试中的相同配置,捆绑项目pom中的所有自动化测试,并在每个mvn clean isntall上执行atomaticly测试。一般流程是在预集成测试阶段启动servlet容器并对其进行测试。您应该始终从用户的角度进行测试。