Scenariusz testowy dla nowego semestru - iiuni/projektzapisy GitHub Wiki

Wstęp

Na branchu new_semester_selenium_tests utworzona została specjalna aplikacja testowa test_app, która ma za zadanie testować przy użyciu Selenium cały scenariusz przygotowywania Systemu Zapisów pod nowy rok akademicki. Testy znajdują się w pliku test_app/tests.py w katalogu głównym aplikacji. W rzeczywistości jest to jedna duża metoda testowa test_new_semester_scenario w klasie NewSemesterTests, w której po kolei wykonywane są odpowiednie czynności. Ponieważ użyto frameworka Selenium, w trakcie jej działania uruchamiana jest przeglądarka, w której "przeklikiwane" są kolejne strony Systemu Zapisów.

Scenariusz testowy

Scenariusz nowego semestru obejmuje następujące etapy:

  1. Propozycje nowych przedmiotów
  2. Głosowanie (czerwiec)
  3. Powstaje oferta przedmiotów
    -> tworzenie edycji przedmiotów (muszą być utworzone przed korektą)
  4. Korekta zimowa (środek września) (w międzyczasie zbierane są preferencje pracowników)
  5. Powstaje plan.txt, import planu
  6. Dodanie nowych studentów (ostatni dzień września)
  7. Import ECTS z pliku
  8. Generowanie T0
  9. ZAPISY
    -> limit ECTS do jakiejś daty (uwaga: przedmioty M; lista kto zdał L z USOSWEB)
    -> kolejki
    -> w międzyczasie zmiany planu / nowe przedmioty / reklamacje ECTS (przegenerowanie T0)
  10. Koniec zapisów: ręczne dopisywanie/zamiana studentów
  11. Korekta letnia (styczeń). Wróć do punktu 5.

Aktualnie testy obejmują punkty 1-7. Poniżej opisane zostały w skrócie czynności wykonywane w danym etapie scenariusza.

Dane testowe

Na początku, w metodzie setUp, testowa baza danych wypełniana jest niezbędnymi obiektami - tworzone jest kilka obiektów User (w tym jeden superuser), Student, Employee, CourseEntity (podstawa przedmiotu, z różnymi statusami), 3 obiekty Semester - semestr aktualnie trwający (letni) i przyszły semestr zimowy oraz letni, a na końcu 1 obiekt SystemState, który przechowuje daty rozpoczęcia i zakończenia głosowania, korekty zimowej i korekty letniej.

Propozycje nowych przedmiotów

Jako superuser wchodzimy w menu wyboru przedmiotów pod głosowanie. Następnie na liście zaznaczane są przedmioty, które chcemy poddać pod głosowanie i wybór zostaje zatwierdzony.

Głosowanie

Uruchamiane jest głosowanie (edycja obiektu SystemState). Następnie, po kolei dla każdego studenta, wchodzimy w panel głosowania (Oferta -> Głosowanie -> Głosuj) i oddajemy głosy, na końcu sprawdzając czy się powiodło. Gdy wszyscy studenci oddadzą głosy, w podsumowaniu głosowania weryfikowane są całościowe wyniki. Na końcu głosowanie jest zamykane.

Powstaje oferta przedmiotów

Wybierane jest kilka przedmiotów, dla których tworzymy edycje (model Course) na przyszły semestr zimowy (poprzez zwykłe odwołania do bazy danych, bez klikania).

Korekta zimowa

Korekta przeprowadzana jest w dokładnie taki sam sposób jak głosowanie.

Import planu zajęć

Tworzone są 2 słowniki: pierwszy zawiera pary (edycja przedmiotu, id), drugi pary (imię nazwisko pracownika, id obiektu pracownika). Następnie powstaje plik tekstowy z przykładowym planem (zgodny z formatem dla skryptu do importu). Słowniki, ścieżka do pliku oraz id przyszłego semestru zimowego są przekazywane do skryptu scheduleimport.py, który tworzy odpowiednie grupy i terminy. Po zakończeniu działania skryptu usuwamy utworzony plik z planem i sprawdzamy, czy skrypt wykonał się poprawnie.

Dodanie nowych studentów

Nie ma (lub nie jest znany) żaden skrypt do dodawania nowych studentów, więc są oni tworzeni ręcznie.

Import ECTS z pliku

Tworzymy przykładowy plik z punktami ects do zaimportowania (zgodny z formatem dla skryptu do importu) i przekazujemy ścieżkę do niego skryptowi 'ectsimport.py`. Na końcu sprawdzamy, czy liczba punktów dla każdego studenta się zgadza.

Uruchamianie

Przed rozpoczęciem testu należy upewnić się, że ma się zainstalowany pakiet xvfb.
Test uruchamia się poniższym poleceniem z katalogu głównego aplikacji:

xvfb-run python manage.py test test_app --nomigrations

Do działania potrzebne są:

pip install selenium==2.53.6

firefox w wersji 45
http://www.askmetutorials.com/2016/03/install-firefox-45-on-ubuntu-1510-1404.html
sudo apt-get install xvfb

geckodriver
http://askubuntu.com/questions/870530/how-to-install-geckodriver-in-ubuntu
askubuntu.com

sudo apt-get install xvfb

Ważna uwaga

Niestety, z winy Selenium może się zdarzyć, że test się wywali w trakcie działania, chociaż wszystko jest w porządku. Jest to spowodowane tym, że przy wczytywaniu strony Selenium może próbować szukać elementów, które się jeszcze nie załadowały. Zwykle rzucany jest wtedy wyjątek o tym, że pewien element nie istnieje. W takiej sytuacji warto uruchomić test ponownie.