Pracuję nad nowym projektem, który będzie wyszukiwał dane z interfejsu API REST innej firmy. Odnosi się to do sportowego pliku danych w czasie rzeczywistym, więc kanał działa tylko wtedy, gdy gra rzeczywiście się odbywa.
Chociaż firma zewnętrzna zapewnia dobrą dokumentację (XSD itp.), Nie ma możliwości symulowania rozgrywki, więc aby przetestować kod napisany na podstawie tego interfejsu API, musiałbym poczekać na faktyczną rozgrywkę.
Moim jedynym wyjściem jest napisanie kodu do samodzielnej symulacji gry, ale wydaje się, że to dużo pracy. Jak byś do tego podszedł?
Odpowiedzi:
Jest to idealny przypadek użycia dla fałszywego obiektu . Istnieją kpiące biblioteki dla każdego popularnego języka. Chcesz wyśmiewać obiekt, który udostępnia odpowiedzi usługi REST w celu zwrócenia danych testowych. Możesz ręcznie wygenerować dane testowe lub zebrać je z poprzednich połączeń z systemem na żywo.
źródło
Poczekaj, aż gra się rozpocznie. Przechwytuj każde zdarzenie z kanału. Napisz symulator, który odtworzy zdarzenia we właściwym czasie. Voila, masz symulator kanału z prawdziwymi danymi.
źródło
Polecam napisanie własnego symulatora. Możesz go użyć do przetestowania wszelkiego rodzaju scenariuszy;
Kiedy robiłem to w przeszłości, użyłem „specjalnych” wartości w komunikatach żądania, aby zachęcić symulator do zrobienia tego, czego potrzebuję. Umożliwia to także przeprowadzanie kompleksowych testów bez wychodzenia poza środowisko programistyczne.
Edycja: Na przykład, jeśli Twój projekt przesyła XML do usługi innej firmy, żądanie może obejmować np
<value>50.00</value>
. Symulator można kodować (lub, lepiej, skonfigurować), aby 50,00 => eksplodować, 60,00 => śmieci, 70,00 => ścisłe połączenie i tak dalej. Chodzi o to, że zachowanie symulatora zależy od jego danych wejściowych, które kontrolujesz w każdym przypadku testowym.źródło
Biorąc pod uwagę, że prawdopodobnie bukmacher udostępnia pewne przykładowe dane (które można zapisać na etapie integracji), radzę zorganizować te kanały w następujący sposób:
Prawdopodobnie dostawca oferuje 2 rodzaje aktualizacji: Push (POST) i Pull (GET).
W tym momencie powinieneś
Zarządzaj rozwojem i testowaniem
Bez wchodzenia w szczegóły technologii, która ma być używana, otrzymujesz mini-serwer , który odpowiada tylko na 4 adresy URL (lub te niezbędne w zależności od tego, co oferuje dostawca), oraz usługę mini-push .
Osobiście zrobiłbym prosty serwer Perl lub taki sam, ale z Nodejs. W odniesieniu do wstrzykiwania danych, wystarczy zegar, który wywołuje przeglądarkę offline ( CURL , WGET )
źródło
I symulowane REST API, za pomocą kombinacji cucumberjs, phantomjs z ustawieniem serwera proxy 127.0.0.1 i zaczepiania node.js proces
http-proxy
inock
tam. CucumberJS nie jest ważną częścią, możesz napisać scenariusz testowy w dowolny sposób, reszta jest kluczem do symulacji. Jest w stanie wyśmiewać po prostu dane dopasowania-żądanie-zwrotu-dane, ale możesz również filtrować według wzorców i funkcji zwrotnej haka, aby uzyskać odpowiedź, dzięki czemu możesz symulować na dowolnym poziomie szczegółowości, którego potrzebujesz (w skrajnym przypadku kończąc na pełny serwer demonstracyjny, ale możesz to zrobić stopniowo).Działa ładnie:
http-proxy
. Tak więc działa „normalne” ładowanie (strony, obrazy).nock
je.W moim scenariuszu połączyłem go z testami js ogórka w tym samym procesie, więc poszło tak:
nock
kpowanie HTTP dla testowanego scenariusza.Reszta jest taka, jak pokazano wcześniej w tym akapicie (to znaczy, że to trochę cykl, ja jako biegacz testowy polecam phantomjs załadować stronę, która przekazuje mi wszystkie żądania z powrotem, i przesyłam je do sieci; lub przechwytuję jeśli jest to testowany interfejs API).
źródło