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
