Witam mam pytanie o projekt który ma być oparty o python Selenium i behave. Pisał będę te testy na windows natomiast odpalane będą na Linuxie.
I tu moje pytanie czy mogę w jakiś sposób użyć pyenva tak żeby usprawnić przenoszenie zaimportowanych modułów Z win na VM linuxowe?
Czy będziecie robić lekcje jak takie środowisko zasetapowac Linux do testów na virtualce? Czy to się tak samo robi jak na win? I na co zwrócić uwagę przy takim rozwiązaniu?
Hej,
Z pyenv jest ten problem, że nie jest on dostępny na Win OS… Istnieje jednakże wersja/port https://pypi.org/project/pyenv-win/ aczkolwiek nie wszystkie komendy z pyenv w nim działają.
Teoretycznie pyenv-win powinien być kompatybilny z pyenv w dużym stopniu. Tu może pojawić się pytanie czy faktycznie potrzebujemy pyenv? Zazwyczaj w projektach bazuje się na jednej wersji Pythona + jeden stały zestaw pakietów (aktualizowany w kontrolowany i świadomy sposób) do których wystarcza podstawowy venv. Natomiast dla rożnych OS można przygotować odpowiednie/proste skrypty do odpalania testów 😉 Chociaż dużo może zależeć od specyfiki i detali danego projektu.
Co do przenoszenia testów – w najbliższym czasie nie planowaliśmy takiego tematu, ale dodałem go na naszą tablice – https://trello.com/c/rIVWDkAN/42-testy-windows-linux-vm-przenoszenie-test%C3%B3w-miedzy-%C5%9Brodowiskami . Może uda nam się popełnić jakiś post na ten temat w najbliższym czasie 🙂
Pozdrawiam,
To mocno zależy od używanych pakietów – niektóre wymagają dodatkowych działań jak kompilacja, inne występują w wersji jedynie na dany system (chociażby wspominany pyenv), ChromeDriver wymaga systematycznej aktualizacji co kilka wersji Chrome etc. Jednym z rozwiązań jest przechowywanie wszystkiego (pakietów, plików .exe) w repozytorium, ale nie jest to zalecanym podejściem gdyż powoduje to puchnięcie całego repozytorium, problemy z mergem i potrzebę ręcznego zarządzania wersjami.
Zarządzanie wersjami, pakietami i zależnościami można zautomatyzować co pozwoli oszczędzić w przyszłości sporo czasu, a sama automatyzacji i stopień skompilowania skryptów będzie zależał od liczby i typu użytych pakietów 😉
To może brzmieć skomplikowanie, ale warto zacząć od prostego przykładu a następnie zacząć go rozbudowywać 😉
Ok ale przenoszenie to taki duży effort? Popraw mnie jeśli źle to rozumiem wrzucamy na gita testy pisane w win a później git clonem przenosimy je na Linuxa i tam odpalamy ? Chyba że coś się po drodze robi jeszcze
Ok ale przenoszenie to taki duży effort? Popraw mnie jeśli źle to rozumiem wrzucamy na gita testy pisane w win a później git clonem przenosimy je na Linuxa i tam odpalamy ? Chyba że coś się po drodze robi jeszcze
Z mojego punktu widzenia to najlepiej korzystać z venv
czyli środowisk Pythona wirtualnych. Utrzymujesz relatywnie tylko najnowszego pythona3 i z niego robisz środowiska wirtualne (tak jak to jest opisane w kursie).
Co do drivera generalnie na maszynie z Ubuntu instalujesz chromedriver i chrome i odpowiednio to razem spinasz – tutaj jest taki drobny poradnik co do chromedriver na ubunciaku: https://tecadmin.net/setup-selenium-chromedriver-on-ubuntu/ – pamiętaj o zgodności wersji chrome i chromedriver (patrzysz jaką masz wersję chroma google-chrome --version
, idziesz do http://chromedriver.chromium.org/downloads sprawdzasz wersję jaki driver potrzebny i robisz odpowiednią modyfikacje polecenia
wget https://chromedriver.storage.googleapis.com
)/2.41/chromedriver_linux64.zip) Wyższa szkoła jazdy to selenium hub z dockera i problemy z utrzymywaniem chrome/chromedriver znikają. No i jeszcze potrzebujesz to obsłużyć w kodzie względem sytemu, że twój webdriver znajduje się gdzie indziej. Najprościej:
import os import unittest from selenium import webdriver class ShopSampleTests(unittest.TestCase): def setUp(self): if os.name == 'nt': self.driver = webdriver.Chrome(executable_path=r"C:\TestFiles\chromedriver.exe") else: chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') self.driver = webdriver.Chrome(options=chrome_options)
Od razu powyżej masz z opcjami headless (tutaj warto zaznaczyć, że musisz sprawdzić czy na Ubuntu możesz odpalić tak testy. No i pierwszy if dotyczy windowsa a cały else innego systemu.
ten konfig:
class ShopSampleTests(unittest.TestCase):
def setUp(self):
if os.name == ‘nt’:
self.driver = webdriver.Chrome(executable_path=r”C:\TestFiles\chromedriver.exe”)
else:
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(‘–no-sandbox’)
chrome_options.add_argument(‘–headless’)
chrome_options.add_argument(‘–disable-gpu’)
self.driver = webdriver.Chrome(options=chrome_options)
odnosi sie tylko do webdrivera w na hubie z dockerem? No wlasnie jak to jest z tym dockerem jak to nam pomaga? Mamy te kontenery rozumiem ze z najnowszym pythonem + webdriverem…? czy my je sami mozemy przygotowac?tzn wpakowac tam co chcemy? python+webdriver+behave+allure etc.? I jak to dziala? za kazdym razem kiedy wyjdzie nowsza wersja ktoregos skladnika docker sam sie updejtuje? nie mam doswiadczenia z praca z dockerem dlatego pytam.
Hej,
Konfiguracja odnosi się jedynie do selenium i chromedrivera dla dwóch przypadków – Windows (czyli nt) oraz linux. W tym jeszcze nie ma nic z dockera 😉 Tu także sugerowałbym na początku ogarnięcie testów na linuxie a następnie wkroczenie w dockera.
Sam docker i jego kontenery będą potrzebne później… a jak nam ułatwiają życie? W prosty i powtarzalny sposób stawiają nam maszyny wirtualne z danymi narzędziami. Gdy już ogarniemy uruchamianie testów na Win i linuxie to możemy przygotować obraz dockerowy z linuxem. Jest to nic innego jak obraz maszyny wirtualnej, który możemy dowolnie kopiować i uruchamiać. My na początku musimy tylko zainstalować odpowiednie narzędzia (jak python, webdriver, chrome/inna przeglądarka i inne narzędzia linuxowe, które mogą się przydać). De facto, przygotowanie obrazu dockerowego jest bardzo podobne (jeśli chodzi o ideę) do przygotowania linuxa do testów. Później, w obu przypadkach, musimy na maszynie umieści kod testów oraz go uruchomić.
W przypadku aktualizacji wersji narzędzi (jak chrome, webdriver, etc.) to bardzo często musimy to zrobić ręcznie. Aczkolwiek w przypadku dockera i obrazów sprawa jest odrobinę ułatwiona, gdyż przygotowanie obrazu opiera się o skrypt Dockerfile, wiec proces tworzenia obrazu może odbywać się prawie całkowicie automatycznie 😉
Chromedrivera linuxowego ewentualnie instalujemy? Czy jakieś zamienne środowiska zmieniamy w Linuxie?