我有一个包含junit测试的Java项目,需要通过Jenkins在不同的测试环境(Dev,Staging等)上运行。
如何将项目构建设置到不同的环境以及如何将URL,用户名和密码传递给maven?
我可以使用maven 3配置文件从属性文件中读取环境URL,用户名和密码吗?
编辑:我已将配置文件添加到Project POM:
<profiles>
<profile>
<id>Integration</id>
</profile>
<profile>
<id>Staging</id>
</profile>
<profile>
<id>PP1</id>
</profile>
<profile>
<id>PP2</id>
</profile>
<profile>
<id>PP3</id>
</profile>
</profiles>
如何将网址,用户名和密码传递给这些个人资料?
目前,测试是从属性文件中获取测试环境详细信息:
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"));
static {
systemProps = new Properties();
try {
systemProps.load(new FileReader(new File("src/test/resources/environment.properties")));
} catch (Exception e) {
e.printStackTrace();
}
}
编辑2:
测试运行者类中实现的更改:
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();
}
}
答案 0 :(得分:5)
我不会在POM中包含任何属性,但会在每个环境中使用外部属性文件,至少在属性更改时您不需要触摸POM。
在您的POM中指定一个配置文件,该配置文件使用您的属性引用属性文件:
<profiles>
<profile>
<id>staging</id>
<properties>
<app.config>/your/path/to/app.staging.properties</app.config>
</properties>
</profile>
</profile>
然后你可以将它传递给你的Surefire配置:
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<appConfig>${app.config}</appConfig>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
然后,您可以在测试中加载属性文件的内容,例如:
final String appConfigPath = System.getProperty("appConfig");
// Load properties etc...
实际上,您实际上可以更进一步...完全转储Maven配置文件,并在Jenkins构建配置中指定-DappConfig=/your/path/to/app.staging.properties
。
答案 1 :(得分:0)
您可以设置maven配置文件,并使用-P标志
选择哪一个处于活动状态答案 2 :(得分:0)
为什么不使用Maven build profiles,因为您可以为每个配置文件指定<properties>
以指定不同的构建主机等。只需执行
$ mvn -Pstaging
(比如说)启用暂存配置文件。
有关详细信息,请参阅Build Profiles上的Sonatype手册。
答案 3 :(得分:0)
这里我使用bash脚本将Jenkins构建的工件部署到Glassfish。
sudo /usr/share/glassfish3/glassfish/bin/asadmin --user admin --passwordfile /root/.asadminpass undeploy PROJECT_NAME
sudo /usr/share/glassfish3/glassfish/bin/asadmin --user admin --passwordfile /root/.asadminpass deploy $WORKSPACE/PROJECT_NAME/target/PROJECT_NAME.war
答案 4 :(得分:0)
不要为此使用Maven构建配置文件!
它会强制您实际更改不同环境的构建。
而是进行测试,并且可能是您的应用程序可配置。基本思想是从一些系统属性中读取配置详细信息(例如数据库URL)。这反过来可以在Jenkins作业配置中轻松指定
对于更复杂的场景,您可以从系统属性中指定用于给定目的的类,例如,如果您需要针对Dev环境的MockedImplementation以及QA中的真实内容。
如果您碰巧使用Spring,请查看Spring Profiles,它非常支持这类内容。
如果你只需要在测试中使用它,你应该能够在JUnit规则中封装这类东西。