Зависимость между двумя разными файлами json в спокойной

Я создал два java-класса TestA.java, TestB.java, используя restAssured, где каждый из классов читает json из TestA.json и testB.json и отправьте запрос на конечную точку uri.TestA.java возвращает ответ json с тегом "customerID", который будет введен для одного из тегов TestB. json, и когда я отправляю запрос с использованием "TestB.java", идентификатор клиента должен быть выбран из TestB.json. Как выглядит мой код? Есть идеи?

Мой код:

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

Заранее спасибо


person ramya addepalli    schedule 21.07.2018    source источник


Ответы (1)


Это зависит от того, как вы распределяете свои классы:

  1. Если вы хотите написать тесты для A и B в одном классе. Объявите локальную переменную типа Response / String, а затем сохраните идентификатор клиента в этой переменной. Область видимости переменной будет жить во всех методах TestNG. Вы можете установить идентификатор клиента для B.json из локальной переменной.

    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.

    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
    }}
    
person Kshetra Mohan Prusty    schedule 23.07.2018