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ó

Següent revisió
Revisió prèvia
python_web_test [2022/11/30 08:54]
enric_mieza_sanchez creat
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>
  
-===== Flask i Pytest ===== +===== 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 21: Línia 26:
 Després, ens diuen que fem un **test skeleton**, però l'exemple que ens donen té una configuració avançada per posar a punt la base de dades, utilitzant una //app factory//, etc. Després, ens diuen que fem un **test skeleton**, però l'exemple que ens donen té una configuració avançada per posar a punt la base de dades, utilitzant una //app factory//, etc.
  
-Nosaltres implementarem una versió simplificada sobre l'arxiu ''test_web.py'':+Nosaltres implementarem una versió simplificada sobre l'arxiu ''test_web.py''. Com podeu veure, **Flask disposa d'un client ''test_client''** que permet accedir als //endpoints// o rutes i comprovar els continguts rebuts mitjançant **assert**:
  
 <file python test_web.py > <file python test_web.py >
Línia 51: Línia 56:
 </code> </code>
  
-**Com podem veure, ''pytest'' posa en marxa els tests dels arxius que comencen per ''test_'', i dins d'aquests, corre les funcions que també comencin per ''test_''.**+<WRAP info> 
 +Com podem veure, ''pytest'' posa en marxa els tests dels arxius que comencen per ''test_'', i dins d'aquests, corre les funcions que també comencin per ''test_''. 
 +</WRAP>
  
 \\ \\
  
 +===== Pytest amb Selenium =====
 +[[Selenium]] és una llibreria per automatitzar la utilització d'un //browser// real.
  
 +Primer caldrà que instal·lem el package de pytest-selenium:
 +  (env) $ pip install pytest-selenium
 +
 +I també el driver per a automatitzar el Firefox:
 +  $ sudo apt install firefox-geckodriver
 +
 +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>
 +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()
 +
 +    # comprovem que el missatge de salutació contingui
 +    # el nom introduit prèviament al formulari
 +    assert "Salut, manolo" in selenium.page_source
 +</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>
 +
 +\\
  
 ===== Exercici : login ===== ===== Exercici : login =====
Línia 77: 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.1669798452.txt.gz · Darrera modificació: 2022/11/30 08:54 per enric_mieza_sanchez