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

问题描述 投票:0回答:2

我已经为RestAssured API自动化创建了一个框架。与大多数情况一样,有2台服务器:分期和生产。我想通过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;
    }
}
java maven selenium testng rest-assured
2个回答
0
投票

您使用的方法是正确的,但是当您匹配参数中的String值时,您需要使用containsequals方法而不是==,因为==匹配引用,contains / equals匹配值。

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

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

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文件中的参数相同的内容。所以不确定将它保存为变量或作为函数中的参数传递。进一步的帮助将不胜感激。

© www.soinside.com 2019 - 2024. All rights reserved.