0

我创建了两个 java 类TestA.javaTestB.java使用 restAssured 其中每个类从TestA.jsontestB.json读取 json并将请求发布到端点 uri.TestA.java 返回一个带有标签“ customerID ”的json响应这将是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.javaTestB.java看起来几乎相同,除了 post uri

提前致谢

4

1 回答 1

0

这取决于您如何分配课程:

  1. 如果您想在一个类中编写 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
    }}
    
于 2018-07-23T06:48:41.540 回答