我使用restAssured创建了两个Java类 TestA.java , TestB.java ,其中每个类都从 TestA.json 读取json和 testB.json 并向端点uri发送请求。TestA.java返回带有标签“ customerID ”的json响应,该标签将输入 customerID > TestB.json ,并且每当我使用“ TestB.java”发布请求时,都必须从TestB.json中选择customerID。我的代码看起来如何?有什么想法吗?
我的代码:
TestA.java
String requestBody = generateString("CreateCustomer.json");
RestAssured.baseURI = "https://localhost:8080";
Response res = given().contentType(ContentType.JSON)
.header("Content-Type", "application/json").header("checkXML", "N").body(requestBody).when()
.post("/restservices/customerHierarchy/customers").then().assertThat()
.statusCode(201).and().body("transactionDetails.statusMessage", equalTo("Success")).and().log().all()
.extract().response();
//converts response to string
String respose = res.asString();
JsonPath jsonRes = new JsonPath(respose);
CustomerID = jsonRes.getString("customerNodeDetails.customerId");
TestA.java response
{
"customerNodeDetails": {
"customerId": "81263"
},
现在,我想将此customerID
作为动态的testB.json
或testB.java
中的输入来传递。
TestB.json
"hierarchyNodeDetails": {
"**customerId**":"",
"accountNumber": "",
"startDate": "",
}
TestA.java
和TestB.java
看起来几乎相同,除了uri后
预先感谢
答案 0 :(得分:0)
这取决于您如何分配课程:
如果要在单个类中编写A和B的测试。声明一个类型为Response / String的局部变量,然后将客户ID存储在该变量中。变量的范围将存在于所有TestNG方法中。您可以从本地变量设置B.json的客户ID。
public class Test{
String _cust_id;
@Test
public void test_A(){
// ceremony for getting customer id
_cust_id = jsonRes.getString("customerNodeDetails.customerId");
}
@Test
public void test_B(){
// write value of customer id using the variable _cust_id
}}
您可以尝试这种方法,但是建议将数据部分分离为dataProvider类。
如果要为A和B具有单独的类,请使用ITestContext将值从一个类传递到另一个。
public class A{
@Test
public void test1(ITestContext context){
context.setAttribute("key", "value");
}
}
public class B{
@Test
public void test2(ITestContext context){
String _attribute = context.getAttribute(key);
}
}
一种优雅的方法可能是,将dataProvider用于B类测试,在该仪式上执行从A类测试获取customerID的仪式。
public class DataB{
@DataProvider
public static Object[][] _test_data_for_b(){
// get the customerID
// create the json for class B
// return the json required for class B test
// All these could be achieved as everything has a common scope
}}
public class B{
@Test(dataProvider = "_test_data_for_b", dataProviderClass = DataB.class)
public void test_B(String _obj){
// perform the testing
}}