Maven Profiles - How do i get the values assigned to properties in the .properties file and assign them to variables in my class?

Viewed 1566

really need some help here because I cannot seem to figure this out.

I have followed Maven Profiles – Example 2 in the following guide https://mkyong.com/maven/maven-profiles-example/

Here is my pom.xml file:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- necessary for intellij to function -->
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <groupId>groupId</groupId>
    <artifactId>testAPI.automation.java</artifactId>

    <profiles>
    <profile>
        <id>test</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <env>test</env>
        </properties>
    </profile>

    <profile>
        <id>integration</id>
        <properties>
            <env>integration</env>
        </properties>
    </profile>
    </profiles>

    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>rest-assured</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>json-path</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>json-schema-validator</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.exparity</groupId>
            <artifactId>hamcrest-date</artifactId>
            <version>2.0.7</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>
    </dependencies>
    <build>

        <!-- Loading all ${} -->
        <filters>
            <filter>src/main/resources/env/config.${env}.properties</filter>
        </filters>

        <!-- Map ${} into resources -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>*.properties</include>
                </includes>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M3</version>
                <configuration>
                    <parallel>methods</parallel>
                    <threadCount>10</threadCount>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- display active profile in compile phase -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-help-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <id>show-profiles</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>active-profiles</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Here are my properties files. I am only using two env configs at the moment 'test' and 'integration' enter image description here

enter image description here

enter image description here

enter image description here

Here is my BaseTest class. Previously I was getting the URL values directly from the pom.xml file and assigning them to variables for use in my tests. How do I now access the values stored in the config files so I can assign them to variables for use in my tests?

enter image description here

When I debug, all I get are nulls. Running 'mvn package -P integration' in the terminal does not work either

enter image description here

However, it does say that the profile I specified is active when I execute 'mvn package -P integration'

enter image description here

In summary, what I am trying to achieve is to access the values stored in the config files so I can assign them to variables for use in my tests. Maybe I have misunderstood it. I am pretty new to Maven and Java and any help would be greatly appreciated

Thanks

2 Answers

System.getProperty is not used to retrieve values from the user-defined file. You need to load properties manually, something like the following:

public class BaseTest {

    String BaseUrl;

    public BaseTest() {
        Properties prop = new Properties();
        try (InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream("config.properties")) {
            prop.load(resourceAsStream);
            BaseUrl = (String) prop.get("url.baseUrl");
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
Related