Я создал два профиля Maven. Один для dev, другой для qa.
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<cofiguration.path>src/test/resources</cofiguration.path>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<systemPropertyVariables>
<appEnv>dev</appEnv>
<userFile>application.properties</userFile>
<Selenium_Broswer>chrome</Selenium_Broswer>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>qa</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<systemPropertyVariables>
<appEnv>qa</appEnv>
<userFile>application.properties</userFile>
<Selenium_Broswer>firefox</Selenium_Broswer>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
</profile>
Также есть класс для чтения свойств
public class PropertyFile {
private static Properties prop;
private static void getPropertyFile() {
String appFilePath = System.getProperty("user.dir") + "/src/test/resources/" + System.getProperty("appEnv") + ".properties";
try (InputStream in = new FileInputStream(appFilePath)) {
prop = new Properties();
prop.load(in);
} catch (IOException e) {
e.printStackTrace();
}
}
public static String getProperty(String propertyName) {
if (prop == null) {
getPropertyFile();
}
return prop.getProperty(propertyName);
}
}
По сути, я хочу сделать это, когда я запускаю mvn test -Pdev. Он получит переменные в профиле maven «appEnv»
Например, appEnv — это dev, когда mvn test -Pdev. В классе PropertyFile он получит appEnv и найдет правильный файл свойств (у меня есть dev.properties и qa.properties в папке ресурсов, и в файлах есть некоторые базовые URL-адреса и другие свойства)
Но теперь он возвращает NPE, когда я вызываю PropertyFile.getProperty("baseUrl")
. В чем проблема? Как мне изменить код и профиль maven?
src
не будет во время выполнения, поэтому вам придется искать свой файл, возможно, в каталоге ресурсов, который будет присутствовать во время выполнения. 2. Ресурсы не файлы. Вы должны использоватьgetResourceAsStream()
здесь и немного лучше справляться с проверкой нуля. - person user207421   schedule 06.08.2019