Cześć wszystkim. Powoli wychodzimy z cienia i kontynuujemy cykl artykułów o naszym produkcie. Po Poprzedni artykuł recenzyjny, otrzymaliśmy wiele opinii (w większości pozytywnych), sugestii i raportów o błędach. Dziś pokażemy Testuj Maca w akcji i będziesz mógł docenić niektóre funkcje naszej aplikacji. Aby uzyskać pełniejsze zanurzenie, radzę zapoznać się z naszą dokumentacją pod adresem http://docs-ru.testmace.com. Więc chodźmy!
Instalacja
Zacznijmy od banału. Aplikacja jest dostępna i faktycznie testowana na trzech platformach – Linux, Windows, MacOS. Możesz pobrać instalator dla systemu operacyjnego, który Cię interesuje nasza strona. Dla użytkowników Linuksa możliwa jest instalacja pakiet snapowy. Mamy wielką nadzieję, że Microsoft Store i App Store już niedługo się tym zajmą (Czy jest to konieczne? Co o tym sądzicie?).
Scenariusz eksperymentalny
Jako obiekt testowy wybraliśmy następujący standardowy scenariusz:
Login: użytkownik - admin, hasło - hasło
dodaj nowy wpis
Sprawdźmy czy rekord został dodany poprawnie
Będziemy testować dalej https://testmace-quick-start.herokuapp.com/. To normalne serwer json, idealny do testowania takich aplikacji. Właśnie dodaliśmy autoryzację za pomocą tokena do wszystkich tras serwera json i stworzyliśmy metodę logowania, aby otrzymać ten token. Będziemy działać stopniowo, stopniowo udoskonalając nasz projekt.
Tworzenie projektu i próba utworzenia podmiotu bez uprawnień
Najpierw utwórzmy nowy projekt (filet->Nowy projekt). Jeśli uruchamiasz aplikację po raz pierwszy, nowy projekt otworzy się automatycznie. Na początek spróbujmy złożyć wniosek o utworzenie nowego rekordu (w przypadku, gdy tworzenie rekordów jest możliwe bez autoryzacji). Wybierz elementy z menu kontekstowego węzła projektu Dodaj węzeł -> Krok żądania. Ustaw nazwę węzła na utwórz post. W rezultacie w drzewie zostanie utworzony nowy węzeł i otworzy się zakładka poświęcona temu węzłowi. Ustawmy następujące parametry żądania:
Treść żądania: json z wartością {"title": "New testmace quick start post"}
Jeśli wszystko zrobiłeś poprawnie, interfejs będzie wyglądał następująco:
Jeśli jednak spróbujemy spełnić żądanie, serwer zwróci kod 401 i bez autoryzacji nic nie dostaniemy na ten serwer. Cóż, ogólnie rzecz biorąc, zgodnie z oczekiwaniami).
Dodanie żądania autoryzacji
Jak już powiedziano, mamy punkt końcowy POST /login, który przyjmuje json jako treść żądania w postaci: {"username": "<username>", "password": "<password>"}Gdzie username и password (ponownie, z akapitu wprowadzającego powyżej) mają znaczenie admin и password odpowiednio. W odpowiedzi ten punkt końcowy zwraca plik JSON Like {"token": "<token>"}. Wykorzystamy go do autoryzacji. Stwórzmy Krok żądania węzeł z nazwą Zaloguj Się, będzie działać jako przodek Projekty węzeł Za pomocą metody „przeciągnij i upuść” przesuń dany węzeł w drzewie wyżej niż węzeł utwórz post. Ustawmy następujące parametry nowo utworzonego żądania:
Treść żądania: json z wartością {"username": "admin", "password": "password"}
Wykonajmy żądanie i w odpowiedzi otrzymajmy dwusetny kod z tokenem. Coś takiego:
Refaktoryzacja: usuwanie duplikacji domeny
Jak dotąd żądania nie są połączone w jeden skrypt. Ale to nie jedyna wada. Jeśli przyjrzysz się uważnie, zauważysz, że przynajmniej domena jest zduplikowana w obu żądaniach. Niedobrze. Nadszedł czas na refaktoryzację tej części przyszłego skryptu, a zmienne nam w tym pomogą.
W pierwszym przybliżeniu zmienne pełnią tę samą rolę, co w innych podobnych narzędziach i językach programowania – eliminując powielanie, zwiększając czytelność itp. Więcej o zmiennych możesz przeczytać w naszą dokumentację. W tym przypadku będziemy potrzebować zmiennych użytkownika.
Zdefiniujmy zmienną na poziomie węzła Projektu domain ze znaczeniem https://testmace-quick-start.herokuapp.com. Do tego jest to konieczne
Otwórz zakładkę z tym węzłem i kliknij ikonę kalkulatora w prawym górnym rogu
Kliknij + DODAJ ZMIENNĄ
Wprowadź nazwę i wartość zmiennej
W naszym przypadku okno dialogowe z dodaną zmienną będzie wyglądać następująco:
OK. Teraz, dzięki dziedziczeniu, możemy używać tej zmiennej w elementach potomnych dowolnego poziomu zagnieżdżenia. W naszym przypadku są to węzły Zaloguj Się и utwórz post. Aby użyć zmiennej w polu tekstowym, musisz napisać ${<variable_name>}. Na przykład adres URL logowania jest konwertowany na ${domain}/login, odpowiednio dla utwórz post adres URL węzła będzie wyglądał ${domain}/posts.
Tym samym kierując się zasadą DRY nieco udoskonaliliśmy scenariusz.
Zapisz token do zmiennej
Ponieważ mówimy o zmiennych, rozwińmy trochę ten temat. W tej chwili w przypadku udanego logowania otrzymujemy z serwera token autoryzacyjny, który będzie nam potrzebny w kolejnych żądaniach. Zapiszmy ten token w zmiennej. Ponieważ wartość zmiennej zostanie określona podczas wykonywania skryptu, używamy do tego specjalnego mechanizmu - zmienne dynamiczne.
Najpierw wykonajmy żądanie logowania. W zakładce Parsowane odpowiedzieć, najedź kursorem na token i w menu kontekstowym (które wywołuje się prawym przyciskiem myszy lub klikając na przycisk ...) wybierz pozycję Przypisz do zmiennej. Pojawi się okno dialogowe z następującymi polami:
ścieżka — która część odpowiedzi została wykorzystana (w naszym przypadku jest to body.token)
Aktualna wartość — jaka wartość leży na Ścieżce (w naszym przypadku jest to wartość symboliczna)
Nazwa zmiennej — nazwa zmiennej gdzie Aktualna wartość zostaną zachowane. W naszym przypadku tak będzie token
Node — w którym z przodków zostanie utworzona zmienna Nazwa zmiennej. Wybierzmy Projekt
Gotowe okno dialogowe wygląda następująco:
Teraz za każdym razem, gdy węzeł jest wykonywany Zaloguj Się zmienna dynamiczna token zostanie zaktualizowany o nową wartość z odpowiedzi. I ta zmienna będzie przechowywana w Projekty węzeł i dzięki dziedziczeniu będzie dostępny dla potomków.
Aby uzyskać dostęp do zmiennych dynamicznych, musisz użyć wbudowana zmienna$dynamicVar. Na przykład, aby uzyskać dostęp do przechowywanego tokena, musisz zadzwonić ${$dynamicVar.token}.
Token autoryzacyjny przekazujemy do żądań
W poprzednich krokach otrzymaliśmy token autoryzacyjny i pozostaje nam jedynie dodać nagłówek Authorization ze znaczeniem Bearer <tokenValue> we wszystkich żądaniach wymagających autoryzacji, w tym utwórz post. Można to zrobić na kilka sposobów:
Ręcznie skopiuj token i dodaj nagłówek autoryzacji do żądań będących przedmiotem zainteresowania. Metoda działa, jednak jej zastosowanie ogranicza się jedynie do żądań typu „zrobione i wyrzucone”. Nie nadaje się do wielokrotnego wykonywania skryptów
Zastosowanie drugiej metody wydaje się oczywiste, jednak w kontekście tego artykułu podejście to jest… nieciekawe. No właśnie: mechanizm autoryzacji plus minus jest Ci znany z innych narzędzi (nawet jeśli mamy takie rzeczy jak dziedziczenie uprawnień) i jest mało prawdopodobne, aby budził pytania.
Kolejną rzeczą są domyślne nagłówki! W skrócie, domyślne nagłówki to dziedziczone nagłówki HTTP, które są domyślnie dodawane do żądania, chyba że zostaną wyraźnie wyłączone. Korzystając z tej funkcjonalności możesz np. zaimplementować niestandardową autoryzację lub po prostu pozbyć się duplikacji w skryptach. Użyjmy tej funkcji, aby przekazać token w nagłówkach.
Wcześniej ostrożnie zapisywaliśmy token w zmiennej dynamicznej $dynamicVar.token na poziomie węzła projektu. Pozostaje tylko wykonać następujące czynności:
Zdefiniuj domyślny tytuł Authorization ze znaczeniem Bearer ${$dynamicVar.token} na poziomie węzła projektu. Aby to zrobić, w interfejsie projektu węzła należy otworzyć okno dialogowe z domyślnymi nagłówkami (przycisk Nagłówki w prawym górnym rogu) i dodaj odpowiedni tytuł. Okno dialogowe z wypełnionymi wartościami będzie wyglądać następująco:
Wyłącz ten nagłówek w żądaniu logowania. Jest to zrozumiałe: w momencie logowania nie mamy jeszcze tokena i na to żądanie go zainstalujemy. Dlatego w interfejsie logowania żądanie w zakładce Nagłówki w regionie Dziedziczny odznacz nagłówek Autoryzacja.
To wszystko. Teraz nagłówek autoryzacji zostanie dodany do wszystkich żądań będących dziećmi węzła Projekt, z wyjątkiem węzła logowania. Okazuje się, że na tym etapie mamy już gotowy skrypt i pozostaje nam jedynie go uruchomić. Możesz uruchomić skrypt, wybierając run w menu kontekstowym węzła Projekt.
Sprawdzanie poprawności utworzenia postu
Na tym etapie nasz skrypt może się zalogować i korzystając z tokena autoryzacyjnego utworzyć post. Musimy jednak upewnić się, że nowo utworzony post ma poprawną nazwę. Zasadniczo pozostaje tylko wykonać następujące czynności:
Wyślij prośbę o otrzymanie wiadomości po id,
Sprawdź, czy nazwa otrzymana z serwera jest zgodna z nazwą przesłaną podczas tworzenia posta
Spójrzmy na pierwszy krok. Ponieważ wartość identyfikatora jest ustalana podczas wykonywania skryptu, musisz utworzyć zmienną dynamiczną (nazwijmy to postId) z węzła utwórz post na poziomie węzła projektu. Wiemy już, jak to zrobić, wystarczy zapoznać się z sekcją Zapisz token do zmiennej. Pozostaje tylko utworzyć prośbę o otrzymanie postu przy użyciu tego identyfikatora. Aby to zrobić, utwórzmy RequestStep pobierz post o następujących parametrach:
Typ żądania: GET
URL: ${domena}/posts/${$dynamicVar.postId}
Aby wdrożyć drugi krok, musimy się zapoznać twierdzenie węzeł. Węzeł potwierdzenia to węzeł, który umożliwia zapisywanie kontroli dla określonych żądań. Każdy węzeł asercji może zawierać kilka asercji (sprawdzeń). Więcej o wszelkiego rodzaju twierdzeniach możesz przeczytać w naszym artykule dokumentacja. Użyjemy Compare asercja z operatorem equal. Istnieje kilka sposobów tworzenia asercji:
Długi. Ręcznie utwórz węzeł potwierdzenia z menu kontekstowego węzła RequestStep. W utworzonym węźle Asercja dodaj żądaną asercję i wypełnij pola.
Szybko. Utwórz węzeł potwierdzenia wraz z potwierdzeniem z odpowiedzi węzła RequestStep za pomocą menu kontekstowego
Użyjmy drugiej metody. Tak to będzie wyglądać w naszym przypadku.
Dla tych, którzy nie rozumieją, oto co się dzieje:
Złóż żądanie w węźle pobierz post
W zakładce Parsowane odpowiedz, wywołaj menu kontekstowe i wybierz Utwórz asercję -> PORÓWNAJ -> Równy
Gratulacje, stworzyliśmy nasz pierwszy test! Proste, prawda? Teraz możesz całkowicie uruchomić skrypt i cieszyć się efektem. Pozostaje tylko trochę go przebudować i usunąć title do osobnej zmiennej. Ale zostawimy to dla Ciebie jako pracę domową)
wniosek
W tym poradniku stworzyliśmy pełnoprawny scenariusz i jednocześnie dokonaliśmy przeglądu niektórych funkcji naszego produktu. Oczywiście nie wykorzystaliśmy wszystkich funkcjonalności i w kolejnych artykułach przedstawimy szczegółowy przegląd możliwości TestMace. Czekać na dalsze informacje!
PS Dla tych, którzy są zbyt leniwi, aby odtworzyć wszystkie kroki, uprzejmie nagraliśmy magazyn z projektem z artykułu. Możesz go otworzyć za pomocą filet -> Otwarty projekt i wybierz folder Projekt.