AvatarDawid Kowalczyk zapytał 6 miesięcy temu

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?

AvatarDawid Kowalczyk odpowiedział 6 miesięcy temu

Chromedrivera linuxowego ewentualnie instalujemy? Czy jakieś zamienne środowiska zmieniamy w Linuxie?

4 odpowiedzi
Krzysiek KijasKrzysiek Kijas Personel odpowiedział 6 miesięcy temu

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,

Krzysiek KijasKrzysiek Kijas Personel odpowiedział 6 miesięcy temu

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ć 😉

AvatarDawid Kowalczyk odpowiedział 6 miesięcy temu

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

AvatarDawid Kowalczyk odpowiedział 6 miesięcy temu

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

Przemek BarańskiPrzemek Barański Personel odpowiedział 6 miesięcy temu

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.

AvatarDawid Kowalczyk odpowiedział 6 miesięcy temu

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.

Krzysiek KijasKrzysiek Kijas Personel odpowiedział 6 miesięcy temu

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 😉

Przemek BarańskiPrzemek Barański Personel odpowiedział 6 miesięcy temu

Z mojej strony dodam, że zabawę z Dockerem warto zacząć od instalacji Dockera i wystawienia remote webdriver z oficjalnego obrazu Selenium na którym są dostępne przeglądarka i driver.