package GROUPID.tests.library.base;
import com.jayway.restassured.RestAssured; import com.jayway.restassured.builder.RequestSpecBuilder; import com.jayway.restassured.builder.ResponseSpecBuilder; import com.jayway.restassured.response.Response; import com.jayway.restassured.specification.RequestSpecification; import com.jayway.restassured.specification.ResponseSpecification; import org.slf4j.Logger; import org.slf4j.LoggerFactory;
import java.util.Properties;
/**
* This is a generic business agnostic base class which provides properties management, * logging and common RestAssured variables such as requestSpec and responseSpec. * * TODO: This package should be in a separate project and added as a dependency. * For the purpose of demo, keeping it in the test library module. * @author eing */
public class ServiceTestBase {
public RequestSpecification requestSpec; public RequestSpecBuilder requestSpecBuilder = null; public Response response; public ResponseSpecification responseSpec; public ResponseSpecBuilder responseSpecBuilder; public String propertiesFile = null; public static String configDir = null; protected final Logger logger; protected Properties internalProperties = null; /** * Default settings: * Property file: config.properties * -Dtargetenv=QA */ public ServiceTestBase() { this(BaseConstant.PROPERTIES_FILENAME_DEFAULT); } public ServiceTestBase(String propertiesFile) { logger = LoggerFactory.getLogger(getClass()); if (configDir == null) { String currentEnvironment = System .getProperty(BaseConstant.ENVIRONMENT_PROPERTY); if (currentEnvironment == null) { currentEnvironment = System .getenv(BaseConstant.ENVIRONMENT_PROPERTY); if (currentEnvironment == null) { currentEnvironment = BaseConstant.ENVIRONMENT_DEFAULT; } } configDir = "/" + currentEnvironment; } this.propertiesFile = propertiesFile; requestSpecBuilder = new RequestSpecBuilder(); responseSpecBuilder = new ResponseSpecBuilder(); if (internalProperties == null) { // Only need to read from properties file and set http defaults once for all tests readFromPropertiesFile(); setHttpDefaults(); } } /** * Read properties file from both /default and /[targetenv] folder. * The latter properties file will overwrite the default properties. */ protected void readFromPropertiesFile() { // Read default/<properties file> first String defaultPropertiesFile = BaseConstant.DEFAULT_CONFIG_DIRECTORY + propertiesFile; internalProperties = InternalConfigManager.getAllConfig(defaultPropertiesFile); // Read <targetenv>/<properties file> next which overwrites default String configPath = configDir + propertiesFile; internalProperties.putAll(InternalConfigManager.getAllConfig(configPath)); } /** * Initialize from property file if specified * 1. http.baseurl : base url e.g. http://www.intuit.com (default is localhost) * 2. http.port : http port e.g. 9999 (default is 80) */ protected void setHttpDefaults() { // Set the base URI String baseUri = internalProperties.getProperty(BaseConstant.HTTP_PROPERTY_BASEURL); if (baseUri != null) { RestAssured.baseURI = baseUri; requestSpecBuilder.setBaseUri(baseUri); } // Set default port String defaultPort = internalProperties.getProperty(BaseConstant.HTTP_PROPERTY_PORT); if (defaultPort != null) { int port = Integer.parseInt(defaultPort); RestAssured.port = port; requestSpecBuilder.setPort(port); } }
}