如何解决如何跨具有TestNG测试的不同类访问dependsOnMethod或dependsOnGroup?
我们正在编写一个基于TestNG的回归套件。 很快,我们将在不同的类中进行测试,其中A类中的Test仅应在B类中的测试运行后才能运行,我们还需要一种工具来访问某些方法和变量,这些方法和变量在整个过程中都是相同的。
当尝试构建和访问依赖于不同类的测试时,我遇到了nullpointer异常和其他一些问题。
public class BaseTest {
final TestContext testContext = new TestContext();
TheUser newUser;
String newUserPhoneNumber;
String newUserVerificationCode;
public Basetest() {
newUser = testContext.getUserObjectManager().getTheUser();
newUserPhoneNumber = newUser.generaterandomPhoneNumber();
newUserVerificationCode = newUser.validVerificationCode();
}
@BeforeSuite
public void requestUserTokens(ITestContext iTestContext) {
iTestContext.setAttribute("username",newUser.getUsername());
iTestContext.setAttribute("username",newUser.getpassword());
}
}
登录测试
public class LoginTests extends BaseTest {
private POSTRequest postRequest;
private String password;
private String username;
@BeforeClass()
@BeforeEach
public void init() {
newUser = testContext.getUserObjectManager().getTheUser();
postRequest = new POSTRequest();
postRequest.chooseEndPoint(OAUTH2_PARTIAL_PATH);
}
@Test(dependsOnGroups = {"SignupGroup"})
public void postRequestUserLogsInWithValidCredentials(ITestContext iTestContext) {
JSONObject requestBody = new JSONObject();
requestBody.put("client_id","**********");
requestBody.put("grant_type","password");
username = iTestContext.getAttribute("username").toString();
password = iTestContext.getAttribute("password").toString();
System.out.println("TestContext username--> " + newUser.getUsername());
System.out.println("TestContext password--> " + newUser.getpassword());
System.out.println("iTestContext username--> " + username);
System.out.println("iTestContext password--> " + password);
.. ..}
注册测试
public class SignUpTests {
private final TheUser newUser = new TheUser();
String newUserPhoneNumber = newUser.generaterandomPhoneNumber();
String newUserVerificationCode = newUser.validVerificationCode();
private PUTRequest putrequest;
private POSTRequest postRequest;
@BeforeClass
@BeforeEach
public void init() {
putrequest = new PUTRequest();
postRequest = new POSTRequest();
putrequest.chooseEndPoint(API_V1_PARTIAL_PATH);
postRequest.chooseEndPoint(API_V1_PARTIAL_PATH);
}
@Test(priority = 0,groups = {"SignupGroup"})
public void userEntersInvalidVerificationCode() {
String invalidVerificationCode = Helper.randomNumber(6);
JSONObject requestBody = new JSONObject();
requestBody.put("sms_code",invalidVerificationCode);
String path = USERS_VERIFICATION_PHONE_NUMBER_PATH + newUser.getVerificationId() + "/";
Response response = putrequest.putRequest(requestBody,path);
assertthat(response.getStatusCode(),(anyOf(is(SC_UNPROCESSABLE_ENTITY),is(SC_FORBIDDEN))));
}
}
TestNG.xml
<!DOCTYPE suite SYstem "https://testng.org/testng-1.0.dtd" >
<test name="SignUp Test Suite" >
<parameter name="Test without Mock" value="Api test-method Three" />
<classes >
<class name="signupAndLogin.SignUpTests" />
</classes>
</test>
<test name="Login Test Suite">
<parameter name="Test without Mock" value="Api test-method Three" />
<groups>
<dependencies>
<group depends-on="SignupGroup" name="LoginTestsGroup"/>
</dependencies>
</groups>
<classes>
<class name="signupAndLogin.LoginTests" />
</classes>
</test>
请告知。预先感谢。
解决方法
TestNG希望您的文件位于同一软件包中。
尝试删除您的
<groups>
<dependencies>
<group depends-on="SignupGroup" name="LoginTestsGroup"/>
</dependencies>
</groups>
并通过包含要运行的组来使用run元素。
根据文档https://testng.org/doc/documentation-main.html#test-groups
您的外观将类似于
<test name="SignUp Test Suite" >
<parameter name="Test without Mock" value="Api test-method Three" />
<classes >
<class name="signupAndLogin.SignUpTests" />
</classes>
</test>
<test name="Login Test Suite">
<parameter name="Test without Mock" value="Api test-method Three" />
<groups>
<run>
<include name="SignupGroup" />
</run>
</groups>
<classes>
<class name="signupAndLogin.LoginTests" />
</classes>
</test>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。