Skip to content

Environments and Systems ​

For the framework to work correctly, at least one environment should be defined in your code. ATAF gives you two ways to initialize them.

Option 1: Static Initialization in the Test Runner ​

Initialize test data in a static block of the runner so it runs before any test class:

java
import ataf.core.runner.BasicTestNGRunner;
import test.automation.framework.data.TestData;

public class TestRunner extends BasicTestNGRunner {
    static {
        TestData.init();
    }
}

A TestData class with test and integration environments:

java
import ataf.core.data.Environment;
import ataf.core.logging.ScenarioLogManager;

public class TestData {

    public static final Environment TEST_ENVIRONMENT =
        new Environment("Environment", "TEST");
    public static final Environment INTEGRATION_ENVIRONMENT =
        new Environment("Environment", "INT");

    public static void init() {
        ScenarioLogManager.getLogger().info("Start of initializing test data");

        ScenarioLogManager.getLogger().info("Adding systems for TEST");
        TEST_ENVIRONMENT.addSystem("My Example System 1", "https://my-example-system-1-test.example.com/");
        TEST_ENVIRONMENT.addSystem("My Example System 2", "https://my-example-system-2-test.example.com/");
        TEST_ENVIRONMENT.addSystem("My Example System 3", "https://my-example-system-3-test.example.com/");

        ScenarioLogManager.getLogger().info("Adding systems for INT");
        INTEGRATION_ENVIRONMENT.addSystem("My Example System 1", "https://my-example-system-1-int.example.com/");
        INTEGRATION_ENVIRONMENT.addSystem("My Example System 2", "https://my-example-system-2-int.example.com/");
        INTEGRATION_ENVIRONMENT.addSystem("My Example System 3", "https://my-example-system-3-int.example.com/");

        ScenarioLogManager.getLogger().info("Finished initializing test data");
    }
}

If your test strategy does not use environments — for example because you only test against productive systems — you can also provide an empty value:

java
import ataf.core.data.Environment;

public class TestData {
    public static final Environment NO_ENVIRONMENT = new Environment("Environment", "");

    public static void init() {
        // Required for init order of statics
    }
}

Option 2: Annotated Initialization Method ​

You can also use the TestNG lifecycle by annotating an init() method with @BeforeSuite(alwaysRun = true, dependsOnGroups = "beforeTestSuite"). The method is then executed directly after ataf.core.runner.BasicTestNGRunner.beforeTestSuite. This is especially useful if your TestData class depends on property values.

java
import ataf.core.data.Environment;
import ataf.core.logging.ScenarioLogManager;
import org.testng.annotations.BeforeSuite;

public class TestData {

    // Define your environments here

    @BeforeSuite(alwaysRun = true, dependsOnGroups = "beforeTestSuite")
    public void init() {
        ScenarioLogManager.getLogger().info("Start of initializing test data");

        // Initialize your environments with systems here

        ScenarioLogManager.getLogger().info("Finished initializing test data");
    }
}