我已经为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;
}
}
答案 0 :(得分:0)
您使用的方法是正确的,尽管您要匹配参数中的字符串值,但您需要使用contains
或equals
方法而不是==
作为{{ 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文件中的参数相同的参数。因此,请确保将其保留为变量或在函数中作为参数传递。我们将不胜感激。