Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
django_test [2023/02/15 16:46] enric_mieza_sanchez [Exercicis de test amb Django Tutorial] |
django_test [2024/10/16 16:39] (actual) enric_mieza_sanchez [Exercicis de test amb Django Tutorial] |
||
---|---|---|---|
Línia 5: | Línia 5: | ||
Referències: | Referències: | ||
+ | * [[Django]] en aquesta wiki. | ||
* Pàgina oficial [[https:// | * Pàgina oficial [[https:// | ||
* [[https:// | * [[https:// | ||
Línia 144: | Línia 145: | ||
<WRAP tip> | <WRAP tip> | ||
- | **Necessitaràs instal·lar el geckodriver de Firefox** per permetre automatitzar l' | + | **Necessitaràs instal·lar el geckodriver de Firefox** per permetre automatitzar l' |
- | $ sudo apt install firefox-geckodriver | + | |
- | + | Per altra banda hem detectat que **les versions de Firefox de la botiga | |
+ | |||
+ | $ sudo snap remove firefox | ||
+ | $ sudo apt install firefox-esr | ||
També **cal instal·lar Selenium** al // | També **cal instal·lar Selenium** al // | ||
(env) $ pip install selenium | (env) $ pip install selenium | ||
Línia 152: | Línia 157: | ||
</ | </ | ||
- | Mostrem un exemple de com es pot connectar amb el panell /admin i fer un login. Hi hem afegit un control sobre el **mode // | + | Mostrem un exemple de com es pot connectar amb el panell /admin i fer un //login//. Hi hem afegit un control sobre el **mode // |
<file python tests.py> | <file python tests.py> | ||
Línia 167: | Línia 172: | ||
super().setUpClass() | super().setUpClass() | ||
opts = Options() | opts = Options() | ||
- | opts.headless = True | + | |
cls.selenium = WebDriver(options=opts) | cls.selenium = WebDriver(options=opts) | ||
cls.selenium.implicitly_wait(5) | cls.selenium.implicitly_wait(5) | ||
Línia 179: | Línia 184: | ||
def test_login(self): | def test_login(self): | ||
self.selenium.get(' | self.selenium.get(' | ||
+ | | ||
+ | # comprovem que el títol de la pàgina és el què esperem | ||
+ | self.assertEqual( self.selenium.title , "Log in | Django site admin" ) | ||
+ | | ||
+ | # introduïm dades de login i cliquem el botó "Log in" per entrar | ||
username_input = self.selenium.find_element(By.NAME," | username_input = self.selenium.find_element(By.NAME," | ||
username_input.send_keys(' | username_input.send_keys(' | ||
Línia 184: | Línia 194: | ||
password_input.send_keys(' | password_input.send_keys(' | ||
self.selenium.find_element(By.XPATH,'// | self.selenium.find_element(By.XPATH,'// | ||
- | + | ||
+ | # comprovem que hem entrat al panell d' | ||
+ | self.assertEqual( self.selenium.title , "Site administration | Django site admin" ) | ||
+ | | ||
# Aquesta localització de l' | # Aquesta localització de l' | ||
# Si no localitza el link "Log out", ens donarà un NoSuchElementException | # Si no localitza el link "Log out", ens donarà un NoSuchElementException | ||
- | self.selenium.find_element(By.XPATH,"// | + | self.selenium.find_element(By.XPATH,"// |
</ | </ | ||
Línia 194: | Línia 207: | ||
El mode // | El mode // | ||
- | Fixa't en què es pot activar i desactivar el **mode // | + | Fixa't en què es pot activar i desactivar el **mode // |
- | | + | |
De vegades ens interessarà veure el resultat dels tests amb el GUI, típicament per depurar i corregir els bugs quan els tests fallin. | De vegades ens interessarà veure el resultat dels tests amb el GUI, típicament per depurar i corregir els bugs quan els tests fallin. | ||
Línia 201: | Línia 214: | ||
- | ==== Exercici ==== | ||
- | <WRAP todo> | ||
- | No resulta molt còmode (i no és cap bona pràctica) haver de canviar el codi per poder deshabilitar el mode // | ||
- | |||
- | Utilitza les eines del [[https:// | ||
- | |||
- | * Per defecte els tests son sense GUI. | ||
- | * Si poso la variable d' | ||
- | * Es pot fer amb un '' | ||
- | $ ./manage.py test</ | ||
- | * També posant la variable abans de la instrucció a executar:< | ||
- | * També es pot posar la nova variable a l' | ||
- | </ | ||
- | |||
- | --> Solució # | ||
- | |||
- | <file python settings.py> | ||
- | HEADLESS_TESTS = env(' | ||
- | </ | ||
- | |||
- | <file python tests.py> | ||
- | from django.conf import settings | ||
- | #... | ||
- | opts.headless = settings.HEADLESS_TESTS | ||
- | </ | ||
- | |||
- | <-- | ||
- | |||
- | \\ | ||
===== Testejar que un element NO existeix ===== | ===== Testejar que un element NO existeix ===== | ||
- | En l' | + | En l' |
<code python> | <code python> | ||
# Aquesta localització de l' | # Aquesta localització de l' | ||
# Si no localitza l' | # Si no localitza l' | ||
- | self.selenium.find_element(By.XPATH,"// | + | self.selenium.find_element(By.XPATH,"// |
</ | </ | ||
Línia 303: | Línia 287: | ||
- Entra al panell /admin i crea 2 '' | - Entra al panell /admin i crea 2 '' | ||
- Entra al panell /admin i crea 2 '' | - Entra al panell /admin i crea 2 '' | ||
- | - Crea un usuari amb permisos de " | + | - Crea un usuari amb permisos de " |
- | - Crea un usuari amb permisos de " | + | - Crea un usuari amb permisos de " |
- Crea un usuari amb permisos de " | - Crea un usuari amb permisos de " | ||
- Crea una '' | - Crea una '' | ||
+ | - Crea un usuari amb permisos de //staff// però sense permisos explícits ni grups. Comprova que quan entra no pot veure ni '' | ||
</ | </ | ||