Interfejs WMQTest

Testy napisane dla programu IBM® MQ Explorer muszą należeć do klasy Java™ rozszerzającej udostępnioną klasę WMQTest. W rozdziale wyjaśnione jest działanie interfejsu oraz działanie udostępnianych metod.

Atrybuty testu

Testy są definiowane w pliku manifestu wtyczki (plugin.xml) przy użyciu kolekcji atrybutów. W poniższej tabeli znajduje się lista atrybutów testu.

Atrybut Opis
identyfikator Łańcuch zawierający unikalny identyfikator testu.
nazwa Znacząca nazwa testu.
klasa Nazwa klasy Java zawierającej kod źródłowy testu.
zestaw_testów Łańcuch zawierający definicję grupy, w której test ma zostać wyświetlony. Na przykład wmq, co powoduje wyświetlenie testu w kategorii Testy menedżera kolejek.
podzbiór_testów Łańcuch zawierający definicję podgrupy, w której test ma zostać wyświetlony; na przykład kolejki, co powoduje wyświetlenie testu w kategorii Kolejki.
opis Krótki opis działań wykonywanych podczas testu.
informacje_dodatkowe Miejsce dokumentu HTML lub XHTML zawierającego dodatkowe informacje o teście. Dokument ten jest wyświetlany w programie IBM MQ Explorer po dwukrotnym kliknięciu testu w oknie dialogowym Uruchamianie testów lub po dwukrotnym kliknięciu wyniku testu w widoku Wyniki testu.

Test jest definiowany na podstawie wartości tych atrybutów określonych w pliku plugin.xml. Dostęp do tych atrybutów można także uzyskać programowo za pomocą metod interfejsu WMQTest znajdujących się w poniższej tabeli.

Metoda Opis
getTestID() Zwraca identyfikator testu.
getTestName() Zwraca nazwę testu.
getDescription() Zwraca opis testu.
getTestSet() Zwraca uchwyt do obiektu zestawu testów utworzonego jako nadrzędny względem testu.
getFurtherInfoPath() Zwraca miejsce dokumentu HTML lub XHTML zawierającego dodatkowe informacje o teście.

Tworzenie testu

Mechanizm testów programu IBM MQ Explorer tworzy instancje obiektu testowego za pomocą udostępnionego konstruktora WMQTest(). Nie ma potrzeby tworzenia podklas tego konstruktora.

Struktura testu

W metodzie runTest interfejsu WMQTest definiowana jest treść komunikatu, a metoda ta jest wywoływana w celu uruchomienia testu.

Zakończenie wykonywania metody runTest nie oznacza zakończenia testu; zakończenie testu należy odrębnie określić za pomocą metody testComplete. Testy można implementować w taki sposób, aby dane obiektu pobierały asynchronicznie.

Za pomocą metody runTest wprowadzane jest żądanie pobrania danych dotyczących obiektu, a następnie odebranie odpowiedzi w metodzie nasłuchiwania powoduje uruchomienie testu. Umożliwia oczekiwanie przez test na odbiór danych bez potrzeby implementowania oczekiwania przez wątek; sytuacja ta została przedstawiona w Przykładzie 3.

Jeśli w teście wymagane jest ręczne wprowadzenie okresu oczekiwania (funkcja sleep), to można za pośrednictwem monitora obiektu testowego użyć metod Java wait i notify. Wątki są w mechanizmie testów zaimplementowane bez użycia monitorów poszczególnych obiektów testowych.

Uruchamianie testu

Mechanizm testów programu IBM MQ Explorer uruchamia test, wywołując metodę runTest(WMQTestEngine, IProgressMonitor,contextObjects, treeNode). W tym miejscu musi znajdować się główna treść testu.

WMQTestEngine
W parametrze WMQTestEngine udostępniany jest uchwyt do mechanizmu testów uruchamiającego test.

Za pomocą metody returnResult(WMQTestResult[], WMQTest) mechanizmu możliwe jest zwracanie wyników przez test w trakcie jego działania.

Pierwszy parametr metody (WMQTestResult[]) zawiera wyniki, które mają zostać zwrócone, zaś drugi parametr (WMQTest) musi być ustawiony na wartość 'this', aby możliwe było określenie przez mechanizm testów, skąd otrzymano wyniki. Wyniki testu mogą być zwracane na bieżąco (w przypadku użycia parametru WMQTestEngine) lub po zakończenia testu (zapoznaj się z sekcją Kończenie testu).

IProgressMonitor
W parametrze IProgressMonitor udostępniany jest uchwyt do monitora opcji GUI używanego w bieżącym teście. Umożliwia to udostępnianie w teście zarówno opcji tekstowej dotyczącej wykonywanych zadań i podzadań oraz wyświetlanie paska postępu informującego o stopniu ukończenia testu.

Uchwyt do Monitora stanu jest w domyślnej implementacji metody runTest przechowywany w pamięci podręcznej i jeśli metoda ta została użyta, dostęp do monitora stanu można również uzyskać za pomocą metody getGUIMonitor() interfejsu WMQTest.

Monitor stanu jest podstawowym zasobem środowiska Eclipse. Zapoznaj się z dokumentacją interfejsu API Eclipse znajdującą się w serwisie WWW w celu uzyskania dalszych wskazówek.

contextObjects
Jako wartość parametru contextObjects udostępniana jest tablica MQExtObject. W parametrze udostępniany jest kontekst uruchamianego testu, co powoduje zaznaczenie odpowiednich pól wyboru w momencie otwarcia przez użytkownika okna dialogowego Uruchamianie testów.
treeNode
Za pomocą parametru treeNode wykonywany jest zapis informacji o tym, który folder lub obiekt kliknięto w widoku Nawigator w celu uruchomienia domyślnych testów lub otwarcia okna dialogowego Uruchom testy.

Preferencje użytkownika

Testy muszą być zgodne z preferencjami użytkownika określonymi w oknie dialogowym Preferencje Eclipse. Użyj następujących metod, aby uzyskać dostęp do preferencji:

  • PreferenceStoreManager.getIncludeHiddenQmgrsPreference(), która zwraca wartość true, jeśli test obejmuje menedżery kolejek ukryte w programie IBM MQ Explorer, lub wartość false, jeśli te menedżery muszą zostać wykluczone.
  • PreferenceStoreManager.getIncludeSysObjsPreference(), która zwraca wartość true, jeśli obiekty systemowe (obiekty o nazwa rozpoczynających się od przedrostka SYSTEM.) muszą zostać uwzględnione w teście, lub wartość false, jeśli te obiekty mają zostać wykluczone z testu.

Kończenie testu

Zakończ test, wywołując metodę testComplete(WMQTestResult[]) z przekazaniem do niej tablicy obiektów wyników testu. Więcej informacji o obiektach wyników testów zawiera sekcja Tworzenie wyniku testu.

Zwrócenie wyników na zakończenie testu za pomocą powyższej metody stanowi opcję dodatkową lub alternatywną do zwracania wyników testu podczas wykonywania testu (jak wyjaśniono w sekcji Uruchamianie testu). Jednakże w przypadku dwukrotnego zwrócenia wyników, są one dwukrotnie wyświetlane.

Nawet jeśli w teście wyniki zwracane są za pomocą metody returnResult mechanizmu WMQTestEngine, aby zwrócić wszystkie wyniki, należy wywołać metodę testComplete podczas zakończenia testu. Wymagane jest zakończenie przetwarzania testu. Jeśli nie ma wyników do zwrócenia, za pomocą metody testComplete można zwrócić pustą tablicę obiektów WMQTestResult.

Więcej informacji na ten temat zawiera sekcja Struktura testu.

Tworzenie wyniku testu

Wyniki testu są implementowane jako obiekty WMQTestResult. Utwórz wyniki z użyciem następujących parametrów:

WMQTestResult(int ważność, String opis, String nazwa_menedżera_kolejek, String typ_obiektu)

gdzie:

  • severity - liczba całkowita identyfikująca istotność problemu. Użyj jednego z następujących poziomów istotności: IMarker.SEVERITY_ERROR, IMarker.SEVERITY_WARNING lub IMarker.SEVERITY_INFO
  • description - łańcuch zawierający wyjaśnienie problemu znalezionego podczas wykonywania testu; objaśnienie jest wyświetlane w widoku Problemy.
  • qmgrname - nazwa menedżera kolejek, w którym wystąpił problem.
  • objectType - łańcuch zawierający klasę obiektu, w której wystąpił problem, np. Queues lub Channels.

Więcej informacji na temat sposobu postępowania z utworzonym obiektem wyniku testu zawiera sekcja Kończenie testu.

Działania w przypadku anulowania

Test można anulować podczas jego działania. Użyj metody isCancelled(), aby sprawdzić, czy test musi się zatrzymać.

Poprawny test musi regularnie sprawdzać, czy nie został anulowany, aby uniknąć niepotrzebnego czekania przez użytkownika.

Jeśli po próbie anulowania testu przez dłuższy czas nie można uzyskać odpowiedzi, mechanizm testów wymusza zatrzymanie testu przez zakończenie wątku, w którym działa test. Nie należy nadużywać tej metody. Preferowane jest odczekanie na odpowiedź testu, co pozwoli testowi wyczyścić używane zasoby oraz zwrócić wszystkie wygenerowane do tej pory wyniki.

Dokumentacja testu

Użytkownik może udostępnić dodatkową dokumentację z wyjaśnieniem wyników zwracanych w testach oraz określeniem działań, które należy wykonać w celu rozwiązania problemu.

Dokumentacja powinna być udostępniona w formacie HTML, a w pliku plugin.xml powinno być podane położenie wtyczki udostępniającej test. Szczegółowe informacje na temat definiowania testów w formacie XML zawiera sekcja Tworzenie nowego testu.

Położenie pliku HTML z dokumentacją może być:

  • Wewnętrzne – przechowywane w projekcie wtyczki udostępniającym test. Położenie powinno być podane w dokumencie XML względem pliku plugin.xml. Na przykład: doc/TestDoc.html.
  • Zewnętrzne – przechowywane na serwerze WWW, co umożliwia oddzielenie pracy z dokumentacją od pracy z testem. Położenie musi być zdefiniowane jako kompletny adres URL rozpoczynający się przedrostkiem http://.