我已经为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;
}
}
您使用的方法是正确的,但是当您匹配参数中的String值时,您需要使用contains
或equals
方法而不是==
,因为==
匹配引用,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;
}
谢谢。现在它给出了一个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文件中的参数相同的内容。所以不确定将它保存为变量或作为函数中的参数传递。进一步的帮助将不胜感激。