bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


python_web_test

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
python_web_test [2022/11/30 09:54]
enric_mieza_sanchez [Pytest amb Selenium]
python_web_test [2022/12/13 19:16] (actual)
enric_mieza_sanchez [Exercici : login]
Línia 1: Línia 1:
 ====== Python web test amb Pytest ====== ====== Python web test amb Pytest ======
 +
 +{{ pytest_logo.svg?200|By Holger Krekel - https://pypi.org/project/pytest/, CC BY 2.5, https://commons.wikimedia.org/w/index.php?curid=116199948 }}
  
 Referències: Referències:
-  * Continua de [[Python Web]]+  * Continua de [[Python Web]] , cal conèixer Flask
   * Necessitaràs [[Python venv]]   * Necessitaràs [[Python venv]]
  
Línia 10: Línia 12:
 \\ \\
  
 +<WRAP important>
 +Per poder seguir els exemples d'aquesta pàgina cal que abans hagis fet l'app bàsica amb el formulari que apareix a [[Python web]].
 +</WRAP>
  
 ===== Pytest + client de tests de Flask ===== ===== Pytest + client de tests de Flask =====
-Anem a veure com podem testejar les nostres aplicacions fetes amb Flask.+En aquesta primera aproximació **testejarem la webapp Flask amb un client intern de ''pytest'', és a dir, que no farà servir un //browser// real**.
  
 Fem-li un cop d'ull a la [[https://flask.palletsprojects.com/testing/|documentació de test amb Flask]]. Fem-li un cop d'ull a la [[https://flask.palletsprojects.com/testing/|documentació de test amb Flask]].
Línia 63: Línia 68:
   (env) $ pip install pytest-selenium   (env) $ pip install pytest-selenium
  
-Podeu llegir la [[https://pytest-selenium.readthedocs.io/en/latest/user_guide.html|documentació oficial de pytest-selenium]].+I també el driver per a automatitzar el Firefox: 
 +  $ sudo apt install firefox-geckodriver
  
-El primer //quickstart// és molt senzill, només cal fer aquest arxiu:+Documentacions importants: 
 +  * [[https://pytest-selenium.readthedocs.io/en/latest/user_guide.html|Doc oficial de pytest-selenium]]. 
 +  * [[https://selenium-python.readthedocs.io/|Doc oficial python-selenium]] 
 + 
 +Posem aquí un test doble fonamental: 
 +  * A la //home page// comprovem que el text que apareix contingui "Hello, World" 
 +  * Al formulari d'exemple realitzat a [[Python Web]] utilitzem ''send_keys'' per escriure al camp de text i enviem el formulari localitzant el ''submit'' i clicant-lo.
  
 <file python test_web.py> <file python test_web.py>
 import pytest import pytest
 +from selenium.webdriver.common.by import By
 +
 +def test_home(selenium):
 +    selenium.get('http://localhost:5000')
 +    # podem examinar el què ens retorna el browser a "page_source"
 +    assert "Hello, World" in selenium.page_source
 +
 +
 +def test_form(selenium):
 +    # carreguem la pàgina del formulari
 +    selenium.get('http://localhost:5000/formulari')
 +
 +    # busquem el quadre de text i hi escrivim un nom
 +    elem = selenium.find_element(By.TAG_NAME,"input")
 +    elem.send_keys("manolo")
 +
 +    # cerquem el botó de submit i el cliquem
 +    submit = selenium.find_element(By.XPATH,"//input[@type='submit']")
 +    submit.click()
  
-def test_example(selenium): +    # comprovem que el missatge de salutació contingui 
-    data = selenium.get('http://localhost:5000') +    # el nom introduit prèviament al formulari 
-    assert "Hello World" in data+    assert "Salut, manolo" in selenium.page_source
 </file> </file>
  
 +Per posar en marxa el test ens caldrà 2 shells. En la 1a, posem en marxa la app:
 +  (env) $ flask --app web run
  
 +I a la 2a shell engeguem els tests:
 +  (env) $ pytest --driver Firefox
 +
 +<WRAP info>
 +Fixa't en què per trobar elements fem servir ''find_element'' amb un ''By.XPATH''.
 +
 +Pots trobar més info de com localitzar elements a la **doc oficial de Selenium per Python**:
 +  * [[https://selenium-python.readthedocs.io/navigating.html|Secció Navigating]]
 +  * [[https://selenium-python.readthedocs.io/api.html#locate-elements-by|Secció API]]
 +</WRAP>
  
 \\ \\
Línia 99: Línia 142:
  
 \\ \\
 +
 +===== Per saber més =====
 +En [[https://testdriven.io/blog/flask-pytest/|aquesta pàgina s'expliquen molts conceptes de testing en Flask i pytest]].
  
  
python_web_test.1669802047.txt.gz · Darrera modificació: 2022/11/30 09:54 per enric_mieza_sanchez