Zapisy otwarte! Dołącz do kursu Selenium w Javie lub Selenium w C#. Tylko do 23.09.2021 do godz. 21:00. Zapisz się tutaj.

API w REST Assured 11. Zadanie: żądania w pętli

Czas na zadanie, w którym będzie po trochu wszystkiego w tym żądania w pętli, czyli użycie listy do wykonania podobnego żądania na wszystkich jej elementach.

Dokumentacja do sklepu

Po poprawnym postawieniu aplikacji dokumentację do niej znajdziesz pod localhost/fakestore/dokumentacja/. Tam też znajdziesz np. klucze potrzebne do uwierzytelnienia.

Wersja Javy

W zależności od tego której wersji Javy używasz, mogą się pojawić drobne rozbieżności w sytuacji, w których pobieramy jakąś informację z odpowiedzi metodą get(), a następnie ją „wypluwamy” w konsoli metodą println, np.:

System.out.println(response.jsonPath().get("name"));

Jeżeli nie zadziała Ci to, co pokazuję (będzie się podkreślało na czerwono i po najechaniu zobaczysz „Ambiguous method call”) możesz zamiast get() użyć metody getString():

System.out.println(response.jsonPath().getString("name"));

Zadanie: żądania w pętli

Polecenie

Ukryta treść

Nie masz dostępu do tego kursu. Wykup dostęp albo zaloguj się, by móc zobaczyć pełną lekcję.

Rozwiązanie

  1. Pobrać listę (czyli GET, który robiliśmy już wiele razy). Pamiętajcie, że nasze API domyślnie zwraca 10 obiektów, więc trzeba dodać parametr, by zwróciła więcej.

    Ukryta treść

    Nie masz dostępu do tego kursu. Wykup dostęp albo zaloguj się, by móc zobaczyć pełną lekcję.

  2. Stworzyć listę id (kłania się poprzednia lekcja z JSON!)

    Ukryta treść

    Nie masz dostępu do tego kursu. Wykup dostęp albo zaloguj się, by móc zobaczyć pełną lekcję.

  3. Przeiterujemy się przez wszystkie id w stworzonej wcześniej liście i spróbujemy pobrać elementy o podanym id.

    Ukryta treść

    Nie masz dostępu do tego kursu. Wykup dostęp albo zaloguj się, by móc zobaczyć pełną lekcję.


    Problem z tym kodzikiem jest taki, że gdybyśmy mieli wolno działający system, albo bardzo dużo obiektów, to nie wiemy co się dzieje i bardzo długo po prostu nie zobaczymy czy kolejne requesty są wysyłane i sprawdzane. Dlatego dodaję “logowanie” i wypisywanie który z ilu obiektów jest właśnie testowany i jak się nazywa.

    Ukryta treść

    Nie masz dostępu do tego kursu. Wykup dostęp albo zaloguj się, by móc zobaczyć pełną lekcję.

Przy okazji pewnie zauważycie, że pierwsze zwracane obiekty, to te stworzone jako ostatnie (czyli kolejka FILO – First In Last Out) – przynajmniej w przypadku domyślnego sposobu listowania.

Jeśli udało się Wam osiągnąć to samo, ale z zupełnie innej strony, to pochwalcie się w komentarzach!

Pełny kod

Ukryta treść

Nie masz dostępu do tego kursu. Wykup dostęp albo zaloguj się, by móc zobaczyć pełną lekcję.

Wsparcie merytoryczne

Nie masz dostępu do wsparcia merytorycznego dla tego kursu. Wykup dostęp albo zaloguj się, by móc zadawać pytania.

  1. Cześć!
    Czy w RestAssured istnieje jakaś metoda pozwalająca zamiast listy w prosty sposób podstawić [i] w pętli for zawierającej response.jsonPath().get("id[i]"); ?
    Czy może rozwiązanie z listą jest najprostsze i nie ma sensu szukać innych sposobów rozwiązania tego typu przypadku?

    Odpowiedz
  2. Dzięki za podpowiedź!
    Użyłem podobnie, ale trochę inaczej niż proponowałeś: response.jsonPath().get("id["+i+"]");
    Wygląda że działa poprawnie i nic się nie wywala:

       @Test
        public void listAllPtoducts(){
    
            Response response =
                            when()
                            .get(productsEndpoint+ "?per_page=100&order=asc");
            Assertions.assertEquals(200, response.statusCode());
    
            for (int i=0; i<100; i++) {
                if (response.jsonPath().get("id["+i+"]")!=null) {
                    Assertions.assertEquals(200, response.statusCode());
                    System.out.println(" Id: " + response.jsonPath().get("id[" + i + "]") + " Nazwa: " + 
                    response.jsonPath().get("name[" + i + "]"));
                }
            }
        }
    
    Odpowiedz