如何通过TestNG参数化配置环境URL?

时间:2019-04-22 11:21:47

标签: java maven selenium testng rest-assured

我已经为RestAssured API自动化创建了一个框架。在大多数情况下,有两台服务器:暂存和生产。我想通过TestNG XML文件将其参数化,并指定要使用的环境。

一旦具体说明,我想拥有一种将所有后续请求的BaseURL设置为通用的方法,因为我不想在我运行的每个测试用例中都写RestAssured.baseURI="http://stagingURL.com/"。 这是我在TestNG.XML文件中设置的 <parameter name="env" value="Staging"/>

如何编写一种将值设为Staging/production并相应调整基本URL的方法。我尝试编写此类,但没有用

public class Environment {
    public static String env;
    public static String baseURL;

    @Test
    @Parameters({"env"})
    public static String getEnvironmentURL(){
        if(env=="Production"){
            baseURL="http://prodURL.com/";
        }
        else if(env=="Staging"){
            baseURL="http://stagingURL.com/";
        }
        return RestAssured.baseURI=baseURL;
    }
}

2 个答案:

答案 0 :(得分:0)

您使用的方法是正确的,尽管您要匹配参数中的字符串值,但您需要使用containsequals方法而不是==作为{{ 1}}匹配引用,== / contains匹配值。

因此,您需要在代码中进行以下更改:

equals

答案 1 :(得分:0)

谢谢。现在它给出了NPE:

java.lang.NullPointerException
at Environment.getEnvironmentURL(Environment.java:14)
at Profile.getProfile(Profile.java:19)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:715)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:907)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1237)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:51)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:85)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1197)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1122)
at org.testng.TestNG.run(TestNG.java:1030)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)

在您提出建议后,我对代码进行了以下更改:

public class Environment {

public static String baseURL;

@Test
@Parameters({"env"})
public static String getEnvironmentURL(String env){
    if(env.equals("Production")){
        baseURL=Constants.prodBase;

    }
    else if(env.equals("Staging")){
        baseURL=Constants.stagingBase;
    }
    return (RestAssured.baseURI=baseURL);
}

}

在我之前的代码中,我将env声明为静态变量。但是我也传递了与TestNG.xml文件中的参数相同的参数。因此,请确保将其保留为变量或在函数中作为参数传递。我们将不胜感激。