bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


django_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
django_test [2024/01/03 17:02]
enric_mieza_sanchez [Tests amb Selenium]
django_test [2024/01/09 15:37] (actual)
enric_mieza_sanchez [Exercicis de test amb Django Tutorial]
Línia 151: Línia 151:
     $ sudo snap remove firefox     $ sudo snap remove firefox
     $ sudo apt install firefox-esr     $ sudo apt install firefox-esr
-    +
 També **cal instal·lar Selenium** al //virtualenv// del nostre projecte: També **cal instal·lar Selenium** al //virtualenv// del nostre projecte:
     (env) $ pip install selenium     (env) $ pip install selenium
Línia 172: Línia 172:
         super().setUpClass()         super().setUpClass()
         opts = Options()         opts = Options()
-        opts.headless = True+        #opts.headless = True # DEPRECATED!
         cls.selenium = WebDriver(options=opts)         cls.selenium = WebDriver(options=opts)
         cls.selenium.implicitly_wait(5)         cls.selenium.implicitly_wait(5)
Línia 200: Línia 200:
         # Aquesta localització de l'element ens serveix també a mode de ASSERT         # Aquesta localització de l'element ens serveix també a mode de ASSERT
         # 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,"//a[text()='Log out']")+        self.selenium.find_element(By.XPATH,"//button[text()='Log out']")
 </file> </file>
  
Línia 207: Línia 207:
 El mode //headless// és important ja que ens permetrà que el navegador funcioni sense el GUI, cosa que necessitem per als testos automatitzats (els servidors de test solen ser servidors sense interfície gràfica, pel què intentar obrir un navegador real fallaria al no trobar les X-windows). El mode //headless// és important ja que ens permetrà que el navegador funcioni sense el GUI, cosa que necessitem per als testos automatitzats (els servidors de test solen ser servidors sense interfície gràfica, pel què intentar obrir un navegador real fallaria al no trobar les X-windows).
  
-Fixa't en què es pot activar i desactivar el **mode //headless// del //driver// del navegador Firefox**. Si vols veure com s'obre i es fan els tests automatitzats, canvia la línia a: +Fixa't en què es pot activar i desactivar el **mode //headless// del //driver// del navegador Firefox**. Si vols inhibir la interfície gràfica del Firefox, ho notifiquem Selenium a través de les variables d'entorn
-    opts.headless False+    (env) $ MOZ_HEADLESS=1 ./manage.py tests
  
 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 214: 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 //headless// tal i com ho hem fet en el codi anterior. 
- 
-Utilitza les eines del [[https://django-environ.readthedocs.io/en/latest/quickstart.html|package django-environ]] per habilitar i deshabilitar el mode //headless// mitjançant una variable d'entorn. Caldrà que modifiquis els arxius ''settings.py'' i ''tests.py''. 
- 
-  * Per defecte els tests son sense GUI. 
-  * Si poso la variable d'entorn ''HEADLESS_TESTS=False'' hauria d'aparèixer el //browser// al passar els tests. 
-    * Es pot fer amb un ''export'':<code>$ export HEADLESS_TESTS=False 
-$ ./manage.py test</code> 
-    * També posant la variable abans de la instrucció a executar:<code>$ HEADLESS_TESTS=False ./manage.py test</code> 
-    * També es pot posar la nova variable a l'arxiu ''.env'' 
-</WRAP> 
- 
---> Solució # 
- 
-<file python settings.py> 
-HEADLESS_TESTS = env('HEADLESS_TESTS', default=True) 
-</file> 
- 
-<file python tests.py> 
-from django.conf import settings 
-#... 
-    opts.headless = settings.HEADLESS_TESTS 
-</file> 
- 
-<-- 
- 
-\\ 
  
 ===== Testejar que un element NO existeix ===== ===== Testejar que un element NO existeix =====
Línia 316: Línia 287:
   - Entra al panell /admin i crea 2 ''Question'', i 2 ''Choice'' per a cada ''Question'' des del menú  "Add Choice". Comprova que quan accedeixes a una ''Question'', t'apareixen les seves 2 ''Choice'' als formularis //inline//.   - Entra al panell /admin i crea 2 ''Question'', i 2 ''Choice'' per a cada ''Question'' des del menú  "Add Choice". Comprova que quan accedeixes a una ''Question'', t'apareixen les seves 2 ''Choice'' als formularis //inline//.
   - Entra al panell /admin i crea 2 ''Question''. Crea 2 ''Choice'' per a cada ''Question'' dins del menú //inline// de cadascuna d'elles. Comprova que al menú "Choices" pots veure les 4 ''Choice'' creades.   - Entra al panell /admin i crea 2 ''Question''. Crea 2 ''Choice'' per a cada ''Question'' dins del menú //inline// de cadascuna d'elles. Comprova que al menú "Choices" pots veure les 4 ''Choice'' creades.
-  - Crea un usuari amb permisos de "staff". Entra amb aquest usuari al /adnin i comprova que si vol canviar la contrasenya, les restriccions de contrasenya segura funcionen (les 4 restriccions que s'enuncien al formulari, cal fer-les aparèixer).+  - Crea un usuari amb permisos de "staff". Entra amb aquest usuari a l'//admin panel// i comprova que si vol canviar la contrasenya, les restriccions de contrasenya segura funcionen (les 4 restriccions que s'enuncien al formulari, cal fer-les aparèixer).
   - Crea un usuari amb permisos de "staff" i que pugui llegir (només llegir) les ''Question'' i ''Choice''. Crea 2 ''Question'' amb 2 ''Choice'' cadascuna. Comprova que el nou usuari pot entrar i veure les ''Question'' però que no les pot editar.   - Crea un usuari amb permisos de "staff" i que pugui llegir (només llegir) les ''Question'' i ''Choice''. Crea 2 ''Question'' amb 2 ''Choice'' cadascuna. Comprova que el nou usuari pot entrar i veure les ''Question'' però que no les pot editar.
   - Crea un usuari amb permisos de "staff" i amb permís per veure (només veure) els usuaris. Crea 3 usuaris sense permisos amb el superadmin i comprova que el nou usuari pot veure'ls però no editar-los.   - Crea un usuari amb permisos de "staff" i amb permís per veure (només veure) els usuaris. Crea 3 usuaris sense permisos amb el superadmin i comprova que el nou usuari pot veure'ls però no editar-los.
   - Crea una ''Question'' amb 1 ''Choice'' i una ''Question'' amb 100 ''Choices'' (amb un bucle, òbviament) des del menú ''inline''. Genera un text aleatori per cadascuna d'elles. Comprova que anant al menú de ''Choices'' pots visualitzar les 101 opcions.   - Crea una ''Question'' amb 1 ''Choice'' i una ''Question'' amb 100 ''Choices'' (amb un bucle, òbviament) des del menú ''inline''. Genera un text aleatori per cadascuna d'elles. Comprova que anant al menú de ''Choices'' pots visualitzar les 101 opcions.
 +  - Crea un usuari amb permisos de //staff// però sense permisos explícits ni grups. Comprova que quan entra no pot veure ni ''Questions'' ni ''Choices'' al menú de l'//admin panel//.
  
  
 </WRAP> </WRAP>
  
django_test.1704301344.txt.gz · Darrera modificació: 2024/01/03 17:02 per enric_mieza_sanchez