Witam,
mam problem z uruchomieniem testsuite przez konsole. Wyskakuje mi takie komunikat:
Chce wygenerowanie raport przez Allure-2.6.0 a tylko przez konsole można. A jak puszczam testsuite przez PyCharma, to jest ok. Nie kuma tego.
Tu jest aktualne repo:
https://github.com/lblaszkowski/MercuryTours_WSB/commits/master
Z góry dziękuje za pomoc
Pozdrawiam
Hej,
Problem ten bierze się z dwóch rzeczy – miejsca z którego uruchamiane są testy oraz ścieżki podanej do plików .csv. W obu przypadkach kluczową rolę odgrywa current working directory, czyli aktualny katalog roboczy, który jest uwzględniany w skryptach i ścieżkach.
Do podejrzenia wartości current working directory można użyć:
import os print('current working directory', os.getcwd())
Wystarczy umieścić to w dowolnym skrypcie, np. w testsuite.py:
if __name__ == '__main__': import os print('current working directory', os.getcwd()) runner = unittest.TextTestRunner(verbosity=2) runner.run(full_suite())
Jeśli uruchamiasz testy zawarte w testsuite.py używając do tego PyCharma, to Twój current working directory będzie znajdował się w MercuryTours_WSB\PageObjectModel\TestSuite
. Natomiast przy uruchomieniu testów z konsoli (bazując na screenie), current working directory to będzie MercuryTours_WSB
. Wszystkie sćieżki do plików .scv były ustawiane właśnie z uwzgldnieniem tego katalogu.
Istnieje kilka opcji. Jedną z nich jest ręcznie ustawienie current working directory na miejsce, gdzie znajduje się plik testsuite.py. Można to zrobić za pomocą:
import os os.chdir(os.path.dirname(__file__)) print(os.getcwd())
A w całości (zwróć uwagę, że zmiana ścieżki musi nastąpić przed importem modułów z testami):
import unittest import os os.chdir(os.path.dirname(__file__)) print('current working directory', os.getcwd()) from PageObjectModel.Test.login import Login_Pages from PageObjectModel.Test.plan_journey import Plan_Journey_Pages from PageObjectModel.Test.registration import Registration_Pages from PageObjectModel.Test.booking_flight import Booking_Flight_Pages def full_suite(): test_suite = unittest.TestSuite() test_suite.addTest(unittest.makeSuite(Plan_Journey_Pages)) test_suite.addTest(unittest.makeSuite(Login_Pages)) test_suite.addTest(unittest.makeSuite(Registration_Pages)) test_suite.addTest(unittest.makeSuite(Booking_Flight_Pages)) return test_suite if __name__ == '__main__': runner = unittest.TextTestRunner(verbosity=2) runner.run(full_suite())
Inną opcją jest parametryzacja wszystkich dekoratorów @data
i uwzględnienie informacji o ścieżce danej klasy testowej w ścieżce do zestawu danych do ddt. Przykładowo:
# _*_ coding: utf-8 _*_ import unittest from PageObjectModel.Pages.loginPage import LoginPages from PageObjectModel.Application.application import Application_page from PageObjectModel.Data_test.Function_for_downloading_test_data.test_data_loader import get_data from ddt import ddt, data, unpack from time import sleep import os @ddt class Login_Pages(unittest.TestCase): file_path = os.path.dirname(__file__) csv_path = "../Data_test/Data_test_pages/Data_test_login/data_test_login.csv" data_path = os.path.join(file_path, csv_path) @classmethod def setUp(self): self.app = Application_page() @classmethod def tearDown(self): self.app.destroy() @data(*get_data(data_path)) @unpack def test_login(self, valid_email, valid_password): driver = self.app.driver login = LoginPages(driver) login.click_signOnbutton() login.enter_username(valid_email) login.enter_password(valid_password) login.click_login() sleep(3) print(login.verification_page()) if __name__ == '__main__': unittest.main()
Najpierw definiujemy data_path
, która zawiera informacje o miejscu, gdzie znajduje się plik (czyli login.py
), a następnie do niej doklejana jest informacja o położeniu danych .csv. W tym przypadku trzeba zaznaczyć, że csv_path
wskazuje na plik .csv “patrząc” od miejsca gdzie znajduje się dany plik z klasą testową.
Pozdrawiam,
K
Hej,
Załączony błąd spowodowany jest faktem, że w application.py
także jest ścieżka względna do Drivera. Aczkolwiek z drugim sposobem też wszystko powinno działać, gdyż tam nie ustawia się current working directory, a jedynie modyfikuje się ścieżki w testach do @data
.
Przy modyfikacji current working directory trzeba mieć na uwadze potrzebę poprawy wszystkich obecnych ścieżek względnych w projekcie 🙂
PS. jesli odpowiedź jest satysfakcjonująca to zamknąć 😀
ps. ja wybrałem opcję pierwszą.
Ps. mam zamknąć ten wątek ?
Pierwszy sposób:
import unittest
import os
os.chdir(os.path.dirname(__file__))
print(‘current working directory’, os.getcwd())
from PageObjectModel.Test.login import Login_Pages
from PageObjectModel.Test.plan_journey import Plan_Journey_Pages
from PageObjectModel.Test.registration import Registration_Pages
from PageObjectModel.Test.booking_flight import Booking_Flight_Pages
def full_suite():
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(Plan_Journey_Pages))
test_suite.addTest(unittest.makeSuite(Login_Pages))
test_suite.addTest(unittest.makeSuite(Registration_Pages))
test_suite.addTest(unittest.makeSuite(Booking_Flight_Pages))
return test_suite
if __name__ == ‘__main__’:
runner = unittest.TextTestRunner(verbosity=2)
runner.run(full_suite())
Działa bez zarzutów. Druga opcja już nie działa. W konsoli wyskakuje takie komunikaty
http://wyslijto.tk/download/9kn3ebumwizof68v0ba87waee
Komunikaty są duże i dlatego są w pliku.txt
tu jest aktualne repo:
https://github.com/lblaszkowski/MercuryTours_WSB/tree/e6caa452ddb61c5c058b6857dd5f2e468f7c9010
testy robiłem na login.py z opcja druga