XCore has support for testing in a multitude of environments and browsers.
Making use of Properties files can help get the job done.
JTAF.properties
strategy=profiles/strategies/Regression.strategy.xml target=profiles/targets/qa.properties client=profiles/clients/firefox.properties
JTAF.properties holds properties specific to the current test run. A strategy property is always defined. You can declare any other properties you'd like - it's our convention to make these values the file paths of other property files. For example, one could have a target property declared to specify a config holding environment-specific variables; a client property could be declared to access client/browser-specific variables.
These additional properties files could be opened in whatever Property Reader you'd prefer - for example, the built-in java.util.Properties class.
If one needed environment-specific variables like the application url and the corresponding database credentials for that environment, they could manage them in a configuration file named qa.properties in the profiles/targets directory.
profiles/targets/qa.propertiesapplicationUrl=http://myapp.qa.myco.com/ myDatabase.driver=oracle.jdbc.OracleDriver myDatabase.url=jdbc:oracle:thin:@databaseserver.qa.myco.com:1521:DBQ myDatabase.username=johnsmith myDatabase.password=secret123
A built-in method of grabbing the target configuration file name is provided by the JTAFPropertyManager.
Assume a class exists that opens up a URL passed to it. The example below shows how an environment-specific URL can be opened, given the configuration described above.
package org.myorg.example.commands.main;
import org.myorg.example.PageOpener;
import org.finra.jtaf.core.model.exceptions.NameFormatException;
import org.finra.jtaf.core.model.execution.IInvocationContext;
import org.finra.jtaf.core.model.invocationtarget.Command;
import java.util.Properties;
/**
* Opens the application
*/
public class OpenApplicationCmd extends Command {
public OpenApplicationCmd(String name) throws NameFormatException {
super(name);
}
@Override
protected void execute(IInvocationContext ctx) throws Throwable {
PageOpener po = new PageOpener();
Properties target = new Properties();
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(JTAFPropertyManager.getInstance().getProperty("target"));
target.load(inputStream);
po.openPage(target.getProperty("applicationUrl"));
}
}