When we create an automation test framework, most of us use properties files to get any configuration like URL, credentials, or whatever data you need to change frequently as a configuration.
In this blog, we will discuss how we can easily manage properties files with the Owner Java library makes properties file management very easy, and minimizes the code required to handle application configuration through Java properties files.
If you are using Maven, things are quite simple, just add the following section to your pom.xml:
<dependencies>
<dependency>
<groupId>org.aeonbits.owner</groupId>
<artifactId>owner</artifactId>
<version>1.0.12</version>
</dependency>
</dependencies>
Note* At the time of writing this page, the latest version is 1.0.12, but you need to check if there is any newer version here: https://mvnrepository.com/artifact/org.aeonbits.owner/owner
Suppose your properties file is defined as Config.properties:
url=https://softwaretestingjournal.com/
env=qa
username=dheerajgambhir
password=secured
timeout=9000
To access this property, you need to define a Java interface like shown below: ExampleConfig.java:
import org.aeonbits.owner.Config;
@Config.Sources({“classpath:Config.properties”})
public interface ExampleConfig extends Config {
String url();
String env();
String username();
String password();
int timeout();
}
Note that the above interface extends from Config, which is a marker interface recognized by OWNER as valid to work with.
Now, how to read these values from the properties file? Here you go…
public class OwnerExample {
public void usage() {
ExampleConfig exampleConfig = ConfigFactory.create(ExampleConfig.class);
String url = exampleConfig.url();
String env = exampleConfig.env();
String username = exampleConfig.username();
String password = exampleConfig.password();
int timeout = exampleConfig.timeout();
}
}
Isn’t it too easy? In case you have multiple properties files, you can use @Config.LoadPolicy(Config.LoadType.MERGE) annotation to tell the Owner to merge files.
Sample:
import org.aeonbits.owner.Config;
@Config.LoadPolicy(Config.LoadType.MERGE)
@Config.Sources({
“classpath:Config1.properties”,
“classpath:Config2.properties”
})
public interface ExampleConfig extends Config {
String url();
String env();
String username();
String password();
int timeout();
}
Owner is a rich API that allows you to add additional behaviors and has more interesting features like how to use @DefaultValue and @Key annotations. Read here for more information: http://owner.aeonbits.org/docs/usage
Enjoyed reading this article? Please share the knowledge with your friends and colleagues.