2016-07-26 3 views
1

Я использую Rest Assured Framework для тестирования API (с использованием Java). В строке (1) я ожидаю ошибку, так как есть несоответствие ожидаемому ответу JSON и действительный ответ JSON Но вместо этого мой код выполняется успешно. Может кто-нибудь, пожалуйста, скажите мне, что я делаю что-то неправильно в нижнем коде?Rest Assured Framework полная ответная реакция JSON

 public void test123() { 
      try { 
       //Read the Curl Request Input file 
       String json = input.readFromTextFile(
         System.getProperty("user.dir") + "\\src\\test\\resources\\inputFile\\CurlDataFile.txt"); 
       json = json.replaceAll(" ", "");    
       RestAssured.baseURI = "My URL"; 
       given(). 
        contentType("application/json"). 
        body(json). 
       when(). 
        post(""). 
       then(). 
assertThat().body(matchesJsonSchemaInClasspath("testCurlOuput1.json")); (1) 
      } catch (IOException e) { 
       e.printStackTrace(); 
      }catch(JsonSchemaValidationException e){ 
       e.printStackTrace(); 
      } 
     } 

ответ

0

Наконец, я выбираю библиотеку i.e. jayway.restassured, а затем библиотеку JSON Assert (org.skyscreamer.jsonassert.JSONAssert), которая будет компрометировать фактический и ожидаемый ответ.

public void test123() {   
String postData = input.readFromTextFile(System.getProperty("user.dir") + "\\src\\test\\resources\\inputFile\\CurlDataFile.txt"); 
     RestAssured.baseURI = "MY URL"; 
Response r = (Response)given().contentType("application/json").body(postData).when().post(""); 
      String responseBody = r.getBody().asString();   
      String curlResponse = //I am providing expected Curl response here   
     //JSON Assertion for matching Expected and Actual response 
      JSONAssert.assertEquals(curlResponse, responseBody, false); 
     } 

Также иногда мы хотим, чтобы избежать сравнений конкретного поля из JSON, как некоторые поля идентификатора, которые генерируют динамически, который мы можем сделать с помощью JSON компаратора

0

Вы ловите все Исключения. Когда ваш assertThat (..) терпит неудачу, он выдает исключение. Поместите точку останова на e.printStackTrace(); запустите в режиме DEBUG и убедитесь, что ваше AssertionException/Error не поймано.

Вместо исключения исключений просто добавьте все проверенные исключения в тестовую подпись. Если исключение не реализовано, оно не пройдет тест. В качестве альтернативы, но менее предпочтительным, на мой взгляд, решить, поставив fail(); в блоке catch.

+0

Но мой код не получает ошибку, так что дело не в обработке исключения. – SachinB

+0

Когда ваш assertThat() .. терпит неудачу, этот метод действительно генерирует исключение :-). Ошибка утверждения => Исключение. Вот почему ошибки утверждения терпят неудачу в тестах JUnit. –

+0

В вашем случае «matchJsonSchemaInClassPath» выдает исключение JsonSchemaValidationException, если оно не совпадает. Вы поймаете это исключение, вместо того, чтобы дать ему пузыриться и не пройти тест. (обнаружил, что имя исключения на страницах GITHUB RestAssured: https://github.com/rest-assured/rest-assured) –

0

Я фанат JSONAssert как это обеспечивает легкое сравнение полного JSONs.

Просто используйте .extract().response().getBody().asString(), чтобы получить строковое представление ответа.

Полный пример:

@Test 
public void getReturnsExpectedDataForMailExampleCom() throws JSONException { 
    String response = get("https://stackoverflow.com/users/[email protected]") 
     .then() 
     .statusCode(200) 
     .extract().response().getBody().asString(); 
    JSONAssert.assertEquals(
     "{\"email\":\"[email protected]\",\"locale\":\"de-DE\"}", 
     response, 
     false); 
} 

Update Недостаток состоит в том, что полный JSON не выводится на стандартный вывод, если утверждение не удается.

1

Этого не касается непосредственно REST-assured, но я предлагаю вам взглянуть на Karate, потому что IMO это может быть именно то, что вы ищете.

Одной из основных особенностей Karate является то, что вы можете выполнить полное совпадение совпадения полезной нагрузки JSON за один шаг.

И вы можете легко использовать JSON из файлов, что поощряет повторное использование полезных нагрузок для нескольких тестов.

Смежные вопросы