Selenium:针对三种环境使用不同的URL运行Java代码

时间:2019-07-12 01:46:04

标签: java selenium environment

我有一个Java自动测试框架。我需要在多个环境(例如SIT,UAT和Prod)上运行此代码,但是所有这些环境都具有不同的URL。

sit-config.properties

hompepage = XXX

uat-config.properties

主页= YYY

Maven个人资料

<profiles>
    <profile>
        <id>sit</id>
        <activation>
            <property>
                <name>environment</name>
                <value>sit</value>
            </property>
        </activation>
    </profile>
    <!-- mvn -Denvironment=sit clean test -->

    <profile>
        <id>uat</id>
        <activation>
            <property>
                <name>environment</name>
                <value>uat</value>
            </property>
        </activation>
    </profile>

  </profiles>

问题(编辑):

  1. 如何基于环境测试加载特定的属性文件?
  2. 我有一个关于Java Owner库的示例,但对于testng却不是Maven。

http://www.testautomationguru.com/selenium-webdriver-how-to-execute-tests-in-multiple-environments/

请帮助。谢谢。

4 个答案:

答案 0 :(得分:3)

我不得不解决类似的问题。这就是我的处理方法。

步骤1::在surefire plugin部分的POM.xml中添加build > plugin

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <systemPropertyVariables>
                    <TestEnvironment>local</TestEnvironment>
                </systemPropertyVariables>
                <!-- <suiteXmlFiles>
                    <suiteXmlFile>here goes your testng xml</suiteXmlFile>
                </suiteXmlFiles> -->
            </configuration>
        </plugin>

在这里,TestEnvironment是您正在设置的自定义系统属性,以后可以在您的代码中进行检索。

注意::如果要运行特定的testng xml,请取消注释<suiteXmlFiles>标签,并提供testng xml文件的路径。

步骤2::添加代码以获取系统属性并从相应的属性文件中读取。

        // Assuming your properties files are in the root directory of your project.
        String configFileName = "./%s-config.properties";
        String EnvironmentName = System.getProperty("TestEnvironment");
        System.out.println("TestEnvironment: " + EnvironmentName);

        configFileName = String.format(configFileName, EnvironmentName);
        properties = new Properties();
        properties.load(new FileInputStream(new File(configFileName)));

第3步:将TestEnvironment传递给mvn命令

mvn clean test -DTestEnvironment=sit

此命令将从您的sit-config.properties文件中读取并执行测试。要从不同的属性文件读取,请在命令行中传递不同的值。

如果这回答了您的问题,请告诉我。

答案 1 :(得分:3)

首先,您必须使用不同的URL创建属性文件

然后添加配置文件阅读器

public String applicationUrl_QA() {
        String applicationUrl = properties.getProperty("applicationUrl_QA");
        if(applicationUrl != null) return applicationUrl;
        else throw new RuntimeException("url not specified in the Configuration.properties file.");
    }

然后您可以配置以下所有环境

if(Env.equalsIgnoreCase("QA")){
            if(URL.equalsIgnoreCase("CDMS_QA")){
                driver.get(configFileReader.applicationUrl_QA());
}

然后您将创建如下所示的单独的XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="false" thread-count="5" verbose="1">

    <!--Values Chrome Firefox HLChrome HLFirefox HTMLUnit phantomJS-->
    <parameter name="browser" value="Firefox"/>

    <!--Values AdminURL StatementURL PatientURL-->
    <parameter name="URL" value="Value"/>

    <!--Values QA Dev Uat Prod -->
    <parameter name="Env" value="QA"/>
    <test name="AdminTests">
        <classes>
            <class name="tests.Test1"/>
        </classes>
         <classes>
            <class name="tests.test2"/>
        </classes>
    </test>
</suite>

最后,您必须使用一个xml文件调用所有xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="false" thread-count="5" verbose="2">
<suite-files>
    <suite-file path="File1_QA.xml"/>
</suite-files>
    <suite-files>
        <suite-file path="File2_UAT.xml"/>
    </suite-files>
</suite>

答案 2 :(得分:0)

根据您提供的example,下面有一条说明,说明如何从Maven执行测试:

1)在src / test / resourcces中为每个环境维护一个单独的属性文件

2)在您的Maven项目中添加“所有者”依赖项。

3)如示例中所示,创建接口“环境”:

    @Sources({
    "classpath:${env}.properties"
    })

4)在整个测试和页面对象中,您将使用testEnvironment对象:

public class EnvironmentTest {

    Environment testEnvironment;

    @Test
    public void functionalTest() {
        System.out.println(testEnvironment.url());
        System.out.println(testEnvironment.getDBHostname());
        System.out.println(testEnvironment.getDBPassword());
    }

    @BeforeTest
    public void beforeTest() {
        String environemnt = System.getProperty("environment"); //here you read your environment name
        ConfigFactory.setProperty("env", environemnt); //here you use your environment name for reading proper file
        testEnvironment = ConfigFactory.create(Environment.class); //here we create an instance of the Environment interface & access the property file
    }
}

5)使用Maven运行程序,并在其中输入测试的环境名称:

clean test -Dtest=EnvironmentTest -Denvironment=qa

答案 3 :(得分:-1)

我建议您使用Spring Boot来使用不同的配置文件(配置文件)。但是,如果只需要在执行过程中传递URL参数,请尝试以下操作:

在您的代码中:

public class Url {

    public static String host;

    static {
        Url.host = System.getProperty("mysystem.property.host");
    }
}

然后,在执行测试时,按如下所示传递属性:

mvn clean test -Dmysystem.property.host=yourUrl