Compare commits

...

22 Commits

Author SHA1 Message Date
Theodyme c97db92f48 Fix some pb : constants urls, etc.. 2021-07-26 15:55:34 +02:00
Aurelien PLANCKE 23def285c5 maj readme, test pour les id & script generate report page pour éviter de lire les anciens résumés 2021-06-25 16:44:00 +02:00
Aurelien PLANCKE 6cfa26ca17 modif id 2021-06-25 13:44:16 +02:00
Aurélien Plancke 9c00e85369 changement d'id 2021-06-25 02:12:04 +02:00
Aurélien Plancke 1e2b8f3a87 changement sur le nom des id et classe 2021-06-25 01:07:44 +02:00
Aurélien Plancke 137bc378b8 correction idé 2021-06-25 00:45:50 +02:00
Aurélien Plancke 177aa06f38 modification pour la casse des noms de fichiers 2021-06-24 17:17:15 +02:00
Aurélien Plancke 86a04e8a07 ajout d'un script permettant de mettre en évidence les tests passés ou non 2021-06-24 16:20:02 +02:00
Aurélien Plancke 8fb3278553 maj gitignore 2021-06-24 15:42:34 +02:00
Aurélien Plancke 3df1165806 cleaning 2021-06-24 15:39:45 +02:00
Aurélien Plancke a303f4d772 génération d'une page html contenant tout les rapports 2021-06-24 15:39:18 +02:00
Aurélien Plancke 2519454dae amélioration des rapports & création de scripts pour l'indépendance des jeux de tests 2021-06-24 15:04:22 +02:00
Aurélien Plancke 6b24637bfb cleaning 2021-06-23 16:18:02 +02:00
Aurélien Plancke 9eb4260878 ajout d'un script pour lancer les tests en séquences, maj readme & maj pour rendre les tests plus indépendant 2021-06-23 16:15:08 +02:00
Aurélien Plancke 2c4b303578 maj requirements.txt & readme 2021-06-23 15:28:07 +02:00
Aurélien Plancke 491c50ebc0 merge 2021-06-23 14:28:31 +02:00
Aurélien Plancke 16ba1f0037 maj gitignore 2021-06-23 14:27:55 +02:00
Aurélien Plancke d4850108bb maj gitignore 2021-06-23 14:27:50 +02:00
Aurélien Plancke 1c8bccbf41 ajout d'ouput sous forme html pour les tests 2021-06-23 14:27:05 +02:00
Aurelien PLANCKE 545be29ac6 fix bug sur différents tests 2021-06-21 15:19:30 +02:00
Aurélien Plancke 4ead3eb9f3 correctif xpath 2021-06-18 21:56:42 +02:00
Aurélien Plancke 86b0e4f50e test jury complet 2021-06-18 16:32:37 +02:00
28 changed files with 605 additions and 2177 deletions

View File

@ -3,9 +3,9 @@ NOM_DPT = "test01"
SCODOC_ADMIN_ID = "admin_id"
SCODOC_ADMIN_PASS = "admin_password"
SCODOC_ENS_ID = "enseignant_id"
SCODOC_ENS_PASS = "enseignant_password"
SCODOC_ENS_PASS = "enseignant_password@10"
SCODOC_CHEF_ID = "chef_id"
SCODOC_CHEF_PASS = "password"
SCODOC_CHEF_PASS = "p@ssword42@"
LINK_SCODOC_SERVER = "root@ssh_server_scodoc"
BASE_NOT_SECURED_URL = "scodoc-dev-iutinfo.univ-lille.fr/"
NAVIGATEUR = "firefox"

4
.gitignore vendored
View File

@ -3,4 +3,6 @@ settings.json
.env
*__pycache__*
*__pycache__/*
geckodriver.log
geckodriver.log
*ResultatTest/*
*.html*

View File

@ -2,6 +2,11 @@
import unittest
import time
import subprocess
import HtmlTestRunner
import createDepartement
import creationSiteDepartement
import deleteDepartement
import suppressionSiteDepartement
from setting import (
SCODOC_ADMIN_ID,
SCODOC_ADMIN_PASS,
@ -37,49 +42,48 @@ class PythonOrgSearch(unittest.TestCase):
# Test : Verification de la connexion admin effective
# @expected : "Bonjour admin" est présent sur la page d'accueil
def test_connexion_admin(self):
def test_01_connexion_admin(self):
driver = self.driver
self.assertTrue("admin" in driver.page_source)
# Test : Creer un département
# @expected : Le département est présent sur la page d'accueil
def test_create_departement(self):
def test_02_create_departement(self):
driver = self.driver
driver.get(BASE_URL + "/scodoc_admin")
select = Select(driver.find_element_by_id("CreateDept"))
select.select_by_visible_text("TESTCREATEDPT")
driver.find_element_by_name("DeptId").submit()
time.sleep(2)
select = Select(driver.find_element_by_id("create-dept"))
select.select_by_visible_text(NOM_DPT)
driver.find_element_by_id("create-dept").submit()
time.sleep(1)
driver.find_element_by_id("tf_submit").click()
driver.get(BASE_URL)
self.assertTrue("TESTCREATEDPT" in driver.page_source)
self.assertTrue(NOM_DPT in driver.page_source)
# Test : Suppresion d'un département, puis lancement d'un script coté serveur pour supprimer sa base de données
# @expected : Le département n'apparait plus sur la page d'accueil
def test_delete_departement(self):
def test_03_delete_departement(self):
driver = self.driver
driver.get(BASE_URL + "/scodoc_admin")
select = Select(driver.find_element_by_id("DeleteDept"))
select.select_by_visible_text("TESTCREATEDPT")
driver.find_element_by_id("DeleteDept").submit()
select = Select(driver.find_element_by_id("delete-dept"))
select.select_by_visible_text(NOM_DPT)
driver.find_element_by_id("delete-dept").submit()
driver.get(BASE_URL)
self.assertTrue("TESTCREATEDPT" not in driver.page_source)
cmdProcess = [
"./scriptDeleteDepartement.sh",
LINK_SCODOC_SERVER,
"TESTCREATEDPT",
]
process = subprocess.Popen(cmdProcess)
process.wait()
self.assertTrue(NOM_DPT not in driver.page_source)
# ferme la fenetre à chaque fin de test
def tearDown(self):
self.driver.close()
if __name__ == "__main__":
cmdProcess = ["./scriptCreationDepartement.sh", LINK_SCODOC_SERVER, "TESTCREATEDPT"]
process = subprocess.Popen(cmdProcess)
process.wait()
unittest.main()
deleteDepartement.main()
createDepartement.main()
suppressionSiteDepartement.main()
unittest.main(
testRunner=HtmlTestRunner.HTMLTestRunner(
report_name="01_création_département",
output="./ResultatTest",
combine_reports=True,
)
)

View File

@ -2,6 +2,10 @@
import unittest
import time
import subprocess
import HtmlTestRunner
import createDepartement
import creationSiteDepartement
import deleteDepartement
from setting import (
SCODOC_ADMIN_ID,
SCODOC_ADMIN_PASS,
@ -21,7 +25,7 @@ from selenium.webdriver.support.select import Select
URL = BASE_URL + NOM_DPT + "/Scolarite"
ACRONYME_FORMATION = "FormationTEST"
ACRONYME_FORMATION = "formationtest"
class PythonOrgSearch(unittest.TestCase):
@ -49,9 +53,9 @@ class PythonOrgSearch(unittest.TestCase):
driver = self.driver
global URL
driver.get(URL)
driver.find_element_by_id("ProgrammesLink").click()
driver.find_element_by_id("link-programmes").click()
URL = driver.current_url
driver.find_element_by_id("create_formation_link").click()
driver.find_element_by_id("link-create-formation").click()
self.wait.until(EC.url_changes(URL))
driver.find_element_by_id("tf_acronyme").send_keys(ACRONYME_FORMATION)
driver.find_element_by_id("tf_titre").send_keys("TEST")
@ -70,7 +74,7 @@ class PythonOrgSearch(unittest.TestCase):
driver = self.driver
global URL
driver.get(URL)
idEditFormation = "edit_Formation_" + ACRONYME_FORMATION
idEditFormation = "edit-formation-" + ACRONYME_FORMATION.replace(" ","-")
driver.find_element_by_id(idEditFormation).click()
self.wait.until(EC.url_changes(URL))
driver.find_element_by_id("tf_acronyme").send_keys(ACRONYME_FORMATION)
@ -83,7 +87,7 @@ class PythonOrgSearch(unittest.TestCase):
self.assertTrue(ACRONYME_FORMATION + ACRONYME_FORMATION in textElementAcronyme)
# Remise du nom à celui de départ
driver.get(URL)
idEditFormation = "edit_Formation_" + ACRONYME_FORMATION + ACRONYME_FORMATION
idEditFormation = "edit-formation-" + ACRONYME_FORMATION + ACRONYME_FORMATION
driver.find_element_by_id(idEditFormation).click()
self.wait.until(EC.url_changes(URL))
driver.find_element_by_id("tf_acronyme").clear()
@ -96,25 +100,74 @@ class PythonOrgSearch(unittest.TestCase):
driver = self.driver
global URL
driver.get(URL)
driver.find_element_by_id("create_formation_link").click()
driver.find_element_by_id("link-create-formation").click()
self.wait.until(EC.url_changes(URL))
driver.find_element_by_id("tf_acronyme").send_keys(ACRONYME_FORMATION)
driver.find_element_by_id("tf_titre").send_keys("TEST")
driver.find_element_by_id("tf_titre_officiel").send_keys("formation de test")
driver.find_element_by_id("tf_submit").click()
try:
driver.find_element_by_id("errorMessage")
driver.find_element_by_class_name("error-message")
message_erreur_present = True
except NoSuchElementException:
self.assertFalse(True)
self.assertTrue(True)
message_erreur_present = False
self.assertTrue(message_erreur_present)
# Test : Ajout d'un semestre dans la formation
# @Expected : Le semestre est créé et il apparait désormais dans la table des formations
def test_014_ajout_Semestre(self):
# Test : Ajout d'une UE dans la formation
# @Expected : L'UE est créée et elle apparait désormais dans la liste d'UE de la formation
def test_014_ajout_UE(self):
driver = self.driver
global URL
driver.get(URL)
idAddSemestre = "addSemestre_" + ACRONYME_FORMATION
idTitre = "titre-" + ACRONYME_FORMATION.replace(" ", "-")
driver.find_element_by_id(idTitre).click()
self.wait.until(EC.url_changes(URL))
driver.find_element_by_xpath("//a[contains(@href,'ue_create?')]").click()
driver.find_element_by_id("tf_titre").send_keys("UE TEST")
driver.find_element_by_id("tf_acronyme").send_keys("TEST")
driver.find_element_by_id("tf_submit").click()
time.sleep(1)
driver.get(URL)
driver.find_element_by_id(idTitre).click()
self.wait.until(EC.url_changes(URL))
self.assertTrue("TEST UE TEST" in driver.page_source)
driver.get(URL)
# Test : Ajout d'une matière dans la formation
# @Expected : La matière est créée et elle apparait désormais sur la page de détail de la formation
def test_015_ajout_matiere(self):
driver = self.driver
global URL
nomMat = "unematieretest"
driver.get(URL)
time.sleep(3)
idTitre = "titre-" + ACRONYME_FORMATION
driver.find_element_by_id(idTitre).click()
self.wait.until(EC.url_changes(URL))
time.sleep(3)
driver.find_element_by_xpath("//a[contains(@href,'matiere_create?')]").click()
driver.find_element_by_id("tf_titre").send_keys(nomMat)
driver.find_element_by_id("tf_numero").send_keys("1")
driver.find_element_by_id("tf_submit").click()
time.sleep(3)
driver.get(URL)
driver.find_element_by_id(idTitre).click()
time.sleep(3)
self.wait.until(EC.url_changes(URL))
elements = driver.find_elements_by_xpath("//a[contains(@href,'matiere_edit?')]")
matIsPresent = False
for element in elements:
if element.text == nomMat:
matIsPresent = True
self.assertTrue(matIsPresent)
# Test : Ajout d'un semestre dans la formation
# @Expected : Le semestre est créé et il apparait désormais dans la table des formations
def test_016_ajout_Semestre(self):
driver = self.driver
global URL
driver.get(URL)
idAddSemestre = "add-semestre-" + ACRONYME_FORMATION.replace(" ", "-")
driver.find_element_by_id(idAddSemestre).click()
self.wait.until(EC.url_changes(URL))
driver.find_element_by_name("date_debut").send_keys("01/01/2021")
@ -131,13 +184,36 @@ class PythonOrgSearch(unittest.TestCase):
self.assertTrue((NOM_DPT.upper() + "-" + "DUT" + "--") in driver.page_source)
# Test : Dupplique une formation sous une nouvelle version
# @expected : La formation est dupliquée et à la version "2"
def test_017_creer_nouvelle_version_formation(self):
driver = self.driver
global URL
driver.get(URL)
idTitre = "titre-" + ACRONYME_FORMATION
driver.find_element_by_id(idTitre).click()
self.wait.until(EC.url_changes(URL))
tmpurl = driver.current_url
driver.find_element_by_xpath(
"//a[contains(@href,'formation_create_new_version?')]"
).click()
self.wait.until(EC.url_changes(tmpurl))
self.assertTrue("Nouvelle version !" in driver.page_source)
driver.get(URL)
elements = driver.find_elements_by_class_name("version")
versionIsPresent = False
for element in elements:
if element.text == "2":
versionIsPresent = True
self.assertTrue(versionIsPresent)
# Test : Supprime une formation après avoir supprimé les semestres qui y sont rattachés
# @expected : La formation n'apparait plus dans le tableau des formations
def test_020_delete_formation(self):
driver = self.driver
global URL
driver.get(URL)
idButtonDelete = "delete_Formation_" + ACRONYME_FORMATION
idButtonDelete = "delete-formation-" + ACRONYME_FORMATION
driver.find_element_by_id(idButtonDelete).click()
self.wait.until(EC.url_changes(URL))
tmpURLDelete = driver.current_url
@ -162,11 +238,12 @@ class PythonOrgSearch(unittest.TestCase):
"//input[@value='Supprimer cette formation']"
).click()
driver.get(URL)
try:
driver.find_element_by_id(idButtonDelete)
self.assertTrue(False)
except NoSuchElementException:
self.assertTrue(True)
formations = driver.find_elements_by_class_name("version")
formationDelete = True
for formation in formations:
if "1" in formation.text:
formationDelete = False
self.assertTrue(formationDelete)
# def test_create_module(self):
# driver = self.driver
@ -178,7 +255,14 @@ class PythonOrgSearch(unittest.TestCase):
if __name__ == "__main__":
cmdProcess = ["./scriptCreationDepartement.sh", LINK_SCODOC_SERVER, NOM_DPT]
process = subprocess.Popen(cmdProcess)
process.wait()
unittest.main()
deleteDepartement.main()
createDepartement.main()
creationSiteDepartement.main()
unittest.main(
testRunner=HtmlTestRunner.HTMLTestRunner(
report_name="02_creation_formation_test",
output="./ResultatTest",
combine_reports=True,
)
)

View File

@ -1,6 +1,10 @@
import unittest
import time
import HtmlTestRunner
import subprocess
import createDepartement
import creationSiteDepartement
import deleteDepartement
from setting import (
SCODOC_ADMIN_ID,
SCODOC_ADMIN_PASS,
@ -53,7 +57,7 @@ class PythonOrgSearch(unittest.TestCase):
def test_01_creation_etudiant(self):
driver = self.driver
global URL
driver.find_element_by_id("link_create_etudident").click()
driver.find_element_by_id("link-create-student").click()
self.wait.until(EC.url_changes(URL))
URL = driver.current_url
driver.find_element_by_id("tf_nom").send_keys(nomEtu)
@ -81,7 +85,7 @@ class PythonOrgSearch(unittest.TestCase):
time.sleep(1)
self.assertTrue(
"Code étudiant (code_nip) dupliqué !"
in driver.find_element_by_id("titleError").text
in driver.find_element_by_class_name("title-error").text
)
# Test Modification de l'adresse étudiant
@ -104,7 +108,7 @@ class PythonOrgSearch(unittest.TestCase):
driver.find_element_by_id("tf_submit").click()
time.sleep(1)
self.assertTrue(
codepostaldomicile in driver.find_element_by_id("adresse_etudiant").text
codepostaldomicile in driver.find_element_by_id("student-address").text
)
# Test Inscription d'un étudiant dans un semestre
@ -123,21 +127,28 @@ class PythonOrgSearch(unittest.TestCase):
self.wait.until(EC.url_changes(URL))
try:
semestres = driver.find_elements_by_xpath(
"//a[contains(@id,'inscription_Semestre_')]"
"//a[contains(@id,'inscription-semestre-')]"
)
except NoSuchElementException:
self.assertFalse(True)
semestres[0].click()
driver.find_element_by_xpath("//input[@value='Inscrire']").click()
self.assertTrue("inscrit" in driver.page_source)
time.sleep(1)
time.sleep(2)
boutonInscrireIsNotPresent = False
try:
driver.find_element_by_partial_link_text("inscrire")
except:
boutonInscrireIsNotPresent = True
self.assertTrue(boutonInscrireIsNotPresent)
# Test Supprime un étudiant
# @expected : Lors d'une recherche sur le nom de l'étudiant, aucun résultat apparait
def test_05_suppresion_etudiant(self):
driver = self.driver
urlRecherche = (
"https://scodoc-dev-iutinfo.univ-lille.fr/ScoDoc/"
"https://"
+ BASE_NOT_SECURED_URL
+ "ScoDoc/"
+ NOM_DPT
+ "/Scolarite/search_etud_in_dept"
)
@ -148,7 +159,9 @@ class PythonOrgSearch(unittest.TestCase):
time.sleep(1)
etudid = driver.find_element_by_id("euid")
url = (
"https://scodoc-dev-iutinfo.univ-lille.fr/ScoDoc/"
"https://"
+ BASE_NOT_SECURED_URL
+ "ScoDoc/"
+ NOM_DPT
+ "/Scolarite/etudident_delete?etudid="
+ etudid.text
@ -164,10 +177,10 @@ class PythonOrgSearch(unittest.TestCase):
element.submit()
time.sleep(1)
try:
element = driver.find_element_by_id("titleNoResult")
element = driver.find_element_by_id("title-no-result")
self.assertTrue("Aucun résultat" in element.text)
except:
self.assertFalse(False)
self.assertFalse(True)
# ferme la fenetre
def tearDown(self):
@ -175,9 +188,9 @@ class PythonOrgSearch(unittest.TestCase):
if __name__ == "__main__":
cmdProcess = ["./scriptCreationDepartement.sh", LINK_SCODOC_SERVER, NOM_DPT]
process = subprocess.Popen(cmdProcess)
process.wait()
deleteDepartement.main()
createDepartement.main()
creationSiteDepartement.main()
cmdProcess = [
"./scriptExecution.sh",
LINK_SCODOC_SERVER,
@ -186,4 +199,10 @@ if __name__ == "__main__":
]
process = subprocess.Popen(cmdProcess)
process.wait()
unittest.main()
unittest.main(
testRunner=HtmlTestRunner.HTMLTestRunner(
report_name="03_Etudiant_test",
output="./ResultatTest",
combine_reports=True,
)
)

View File

@ -2,6 +2,10 @@ import unittest
import time
import urllib.parse as urlparse
import subprocess
import HtmlTestRunner
import createDepartement
import creationSiteDepartement
import deleteDepartement
from setting import (
SCODOC_ADMIN_ID,
SCODOC_ADMIN_PASS,
@ -61,7 +65,7 @@ class PythonOrgSearch(unittest.TestCase):
def test_020_ajout_absence_non_justifiee(self):
driver = self.driver
global URL
driver.find_element_by_id("ajout_Absence").click()
driver.find_element_by_id("add-absence").click()
driver.find_element_by_name("datedebut").send_keys(dateDebutAbsenceNonJustifiee)
driver.find_element_by_id("butsubmit").submit()
time.sleep(1)
@ -83,7 +87,7 @@ class PythonOrgSearch(unittest.TestCase):
def test_021_ajout_absence_justifiee(self):
driver = self.driver
global URL
driver.find_element_by_id("ajout_Absence").click()
driver.find_element_by_id("add-absence").click()
driver.find_element_by_name("datedebut").send_keys(dateDebutAbsenceJustifiee)
driver.find_element_by_name("estjust").click()
driver.find_element_by_id("butsubmit").submit()
@ -103,7 +107,7 @@ class PythonOrgSearch(unittest.TestCase):
def test_022_ajout_justification(self):
driver = self.driver
global URL
driver.find_element_by_id("justifier_Absence").click()
driver.find_element_by_id("justify-absence").click()
driver.find_element_by_name("datedebut").send_keys(dateDebutAbsenceJustifiee)
driver.find_element_by_name("description").send_keys("Un test selenium")
driver.find_element_by_xpath("//input[@value='Envoyer']").click()
@ -125,16 +129,16 @@ class PythonOrgSearch(unittest.TestCase):
def test_024_supprimer_absence(self):
driver = self.driver
global URL
driver.find_element_by_id("supprimer_Absence").click()
driver.find_element_by_id("delete-absence").click()
driver.find_element_by_name("datedebut").send_keys(dateDebutAbsenceJustifiee)
driver.find_element_by_xpath("//input[@value='Supprimer les absences']").click()
self.wait.until(EC.url_changes(URL))
self.assertTrue("Annulation sur 2 demi-journées " in driver.page_source)
driver.find_element_by_id("supprimer_Absence").click()
driver.find_element_by_id("delete-absence").click()
driver.find_element_by_name("datedebut").send_keys(dateDebutAbsenceNonJustifiee)
driver.find_element_by_xpath("//input[@value='Supprimer les absences']").click()
self.wait.until(EC.url_changes(URL))
driver.find_element_by_id("afficher_Liste_Absence").click()
driver.find_element_by_id("display-list-absence").click()
self.assertTrue("Pas d'absences justifiées" in driver.page_source)
self.assertTrue("Pas d'absences non justifiées" in driver.page_source)
@ -150,9 +154,9 @@ class PythonOrgSearch(unittest.TestCase):
if __name__ == "__main__":
cmdProcess = ["./scriptCreationDepartement.sh", LINK_SCODOC_SERVER, NOM_DPT]
process = subprocess.Popen(cmdProcess)
process.wait()
deleteDepartement.main()
createDepartement.main()
creationSiteDepartement.main()
cmdProcess = [
"./scriptExecution.sh",
LINK_SCODOC_SERVER,
@ -161,4 +165,10 @@ if __name__ == "__main__":
]
process = subprocess.Popen(cmdProcess)
process.wait()
unittest.main()
unittest.main(
testRunner=HtmlTestRunner.HTMLTestRunner(
report_name="04_Absences_tests",
output="./ResultatTest",
combine_reports=True,
)
)

View File

@ -2,6 +2,10 @@ import unittest
import time
import subprocess
import urllib.parse as urlparse
import HtmlTestRunner
import createDepartement
import creationSiteDepartement
import deleteDepartement
from setting import (
SCODOC_ADMIN_ID,
SCODOC_ADMIN_PASS,
@ -57,6 +61,7 @@ class PythonOrgSearch(unittest.TestCase):
self.driver.find_element_by_name("__ac_password").send_keys(
SCODOC_CHEF_PASS
)
time.sleep(3)
self.driver.find_element_by_name("submit").click()
elif isEns:
self.driver.find_element_by_name("__ac_name").send_keys(SCODOC_ENS_ID)
@ -84,14 +89,18 @@ class PythonOrgSearch(unittest.TestCase):
driver.get(URL)
driver.find_element_by_link_text("semestre 4").click()
self.wait.until(EC.url_changes(URL))
matiereExist = False
try:
driver.find_element_by_class_name("formsemestre_status_ue")
global URL_SEMESTRE
URL_SEMESTRE = driver.current_url
self.assertTrue(True)
matiereExist = True
except NoSuchElementException:
self.assertFalse(False)
matiereExist = False
self.assertTrue(matiereExist)
#Test : Changement de responsable sur module
# @expected : Le nom du responsable choisi apparait désormais sur le module concerné
def test_030_changement_responsable_sur_module(self):
driver = self.driver
isThere = False
@ -118,7 +127,7 @@ class PythonOrgSearch(unittest.TestCase):
driver.find_element_by_id("tf_submit").click()
time.sleep(1)
driver.get(URL_MATIERE)
nomResponsable = driver.find_element_by_id("ens_Responsable")
nomResponsable = driver.find_element_by_id("ens-responsable")
self.assertTrue(SCODOC_CHEF_ID.lower() in nomResponsable.text.lower())
global isAdmin
isAdmin = False
@ -131,6 +140,7 @@ class PythonOrgSearch(unittest.TestCase):
driver = self.driver
global URL_MATIERE
driver.get(URL_MATIERE)
time.sleep(2)
driver.find_element_by_partial_link_text("modifier les enseignants").click()
time.sleep(1)
constructIDEns = (
@ -140,7 +150,7 @@ class PythonOrgSearch(unittest.TestCase):
driver.find_element_by_id("tf_submit").click()
time.sleep(1)
driver.get(URL_MATIERE)
professeurDansModule = driver.find_elements_by_class_name("ens_Dans_Module")
professeurDansModule = driver.find_elements_by_class_name("ens-in-module")
time.sleep(5)
professeurString = []
for professeur in professeurDansModule:
@ -155,12 +165,15 @@ class PythonOrgSearch(unittest.TestCase):
def test_040_creation_interrogation(self):
descriptionInterrogation = "Interrogation numero 2"
driver = self.driver
global URL_MATIERE
driver.get(
"https://"
+ SCODOC_ADMIN_ID
+ ":"
+ SCODOC_ADMIN_PASS
+ "@scodoc-dev-iutinfo.univ-lille.fr/force_admin_authentication"
+ "@"
+ BASE_NOT_SECURED_URL
+ "force_admin_authentication"
)
# driver.get(BASE_URL)
# driver.find_element_by_link_text("déconnecter").click()
@ -298,6 +311,7 @@ class PythonOrgSearch(unittest.TestCase):
time.sleep(1)
time.sleep(1)
driver.get(URL_MATIERE)
time.sleep(5)
self.assertTrue(SCODOC_ENS_ID not in driver.page_source)
# Test : Suppresion du reste des interrogations sans notes
@ -329,9 +343,9 @@ if __name__ == "__main__":
driver = webdriver.Firefox()
else:
driver = webdriver.Chrome()
cmdProcess = ["./scriptCreationDepartement.sh", LINK_SCODOC_SERVER, NOM_DPT]
process = subprocess.Popen(cmdProcess)
process.wait()
deleteDepartement.main()
createDepartement.main()
creationSiteDepartement.main()
cmdProcess = [
"./scriptExecution.sh",
LINK_SCODOC_SERVER,
@ -351,7 +365,7 @@ if __name__ == "__main__":
+ "force_admin_authentication"
)
driver.get(BASE_URL + NOM_DPT + "/Scolarite")
driver.find_element_by_id("utilisateurs_Vue").click()
driver.find_element_by_id("link-view-users").click()
time.sleep(5)
noms = driver.find_elements_by_class_name("nom_fmt")
chefCree = False
@ -362,22 +376,22 @@ if __name__ == "__main__":
if nom.text.lower() == SCODOC_ENS_ID.lower():
ensCree = True
if not chefCree:
time.sleep(5)
time.sleep(2)
constructValue = "Ens" + NOM_DPT
driver.find_element_by_id("creer_Utilisateur").click()
driver.find_element_by_id("create-user").click()
driver.find_element_by_id("tf_nom").send_keys(SCODOC_CHEF_ID)
driver.find_element_by_id("tf_user_name").send_keys(SCODOC_CHEF_ID)
driver.find_element_by_id("tf_prenom").send_keys("chef")
driver.find_element_by_id("tf_passwd").send_keys(SCODOC_CHEF_PASS)
driver.find_element_by_id("tf_passwd2").send_keys(SCODOC_CHEF_PASS)
driver.find_element_by_xpath("//input[@value='" + constructValue + "']").click()
driver.find_element_by_xpath("//input[@value='force:list']").click()
driver.find_element_by_xpath("//input[@name='force:list']").click()
driver.find_element_by_id("tf_submit").click()
driver.find_element_by_id("utilisateurs_Vue").click()
driver.find_element_by_id("link-view-users").click()
if not ensCree:
time.sleep(5)
time.sleep(2)
constructValue = "Ens" + NOM_DPT
driver.find_element_by_id("creer_Utilisateur").click()
driver.find_element_by_id("create-user").click()
driver.find_element_by_id("tf_nom").send_keys(SCODOC_ENS_ID)
driver.find_element_by_id("tf_user_name").send_keys(SCODOC_ENS_ID)
driver.find_element_by_id("tf_prenom").send_keys(PRENOM_ENS)
@ -386,6 +400,12 @@ if __name__ == "__main__":
driver.find_element_by_xpath("//input[@value='" + constructValue + "']").click()
driver.find_element_by_xpath("//input[@name='force:list']").click()
driver.find_element_by_id("tf_submit").click()
driver.find_element_by_id("utilisateurs_Vue").click()
driver.find_element_by_id("link-view-users").click()
driver.close()
unittest.main(warnings="ignore")
unittest.main(
testRunner=HtmlTestRunner.HTMLTestRunner(
report_name="05_Saisie_note_tests",
output="./ResultatTest",
combine_reports=True,
)
)

View File

@ -2,6 +2,10 @@ import unittest
import time
import subprocess
import urllib.parse as urlparse
import HtmlTestRunner
import createDepartement
import creationSiteDepartement
import deleteDepartement
from setting import (
SCODOC_ADMIN_ID,
SCODOC_ADMIN_PASS,
@ -83,13 +87,13 @@ class PythonOrgSearch(unittest.TestCase):
self.wait.until(EC.url_changes(URL))
driver.get(URL_SEMESTRE)
noteBonne = True
print(listeEtudiant)
# print(listeEtudiant)
for etudiant in listeEtudiant:
searchBar = driver.find_element_by_id("in-expnom")
searchBar.send_keys(etudiant)
searchBar.submit()
time.sleep(5)
MOY_UE1 = driver.find_element_by_id("ue_" + ue_name).text
MOY_UE1 = driver.find_element_by_id("ue-" + ue_name.lower().replace(" ","-")).text
if "12" not in MOY_UE1:
noteBonne = False
self.assertTrue(noteBonne)
@ -125,7 +129,7 @@ class PythonOrgSearch(unittest.TestCase):
searchBar.send_keys(etudiant)
searchBar.submit()
time.sleep(5)
MOY_UE2 = driver.find_element_by_id("ue_" + ue_name).text
MOY_UE2 = driver.find_element_by_id("ue-" + ue_name.lower().replace(" ","-")).text
if "8" not in MOY_UE2:
noteBonne = False
@ -162,8 +166,8 @@ class PythonOrgSearch(unittest.TestCase):
driver = self.driver
url = self.url
driver.get(url)
driver.find_element_by_id("ProgrammesLink").click()
driver.find_element_by_id("titre_DUT Info").click()
driver.find_element_by_id("link-programmes").click()
driver.find_element_by_id("titre-dut-info").click()
driver.find_element_by_xpath("//span[contains(text(),'M1101')]").click()
driver.find_element_by_id("tf_coefficient").clear()
driver.find_element_by_id("tf_coefficient").send_keys(COEFF_UE1)
@ -262,7 +266,6 @@ class PythonOrgSearch(unittest.TestCase):
numeroEtu = 0
moyenneBonne = True
affichageMoyenne = True
ueList = []
for etudiant in listeEtudiant:
URL = driver.current_url
searchBar = driver.find_element_by_id("in-expnom")
@ -335,23 +338,23 @@ class PythonOrgSearch(unittest.TestCase):
float(MOY_UE1_EXC) * COEFF_UE1
+ ((float(MOY_UE2) + float(moyenneBonusEtudiant1)) * COEFF_UE2)
) / (COEFF_UE1 + COEFF_UE2)
print(format(moyEtudiant1, "2.2f"))
print(
format(
float(driver.find_element_by_class_name("rcp_moy").text), "2.2f"
)
)
# print(format(moyEtudiant1, "2.2f"))
# print(
# format(
# float(driver.find_element_by_class_name("rcp_moy").text), "2.2f"
# )
# )
if format(moyEtudiant1, "2.2f") != format(
float(driver.find_element_by_class_name("rcp_moy").text), "2.2f"
):
moyenneBonne = False
if ue_name not in ueListText:
affichageMoyenne = False
MOY_UE1 = driver.find_element_by_id("ue_" + ue_name).text
MOY_UE1 = driver.find_element_by_id("ue-" + ue_name.lower().replace(" ","-")).text
if float(0) != float(MOY_UE1):
noteExcuseeEgaleAZero = False
elif numeroEtu == 1:
MOY_UE1 = driver.find_element_by_id("ue_" + ue_name).text
MOY_UE1 = driver.find_element_by_id("ue-" + ue_name.lower().replace(" ","-")).text
moyEtudiant2 = (
float(MOY_UE1) * COEFF_UE1
+ (float(MOY_UE2) - float(moyenneBonusEtudiant2)) * COEFF_UE2
@ -431,9 +434,9 @@ class PythonOrgSearch(unittest.TestCase):
if __name__ == "__main__":
cmdProcess = ["./scriptCreationDepartement.sh", LINK_SCODOC_SERVER, NOM_DPT]
process = subprocess.Popen(cmdProcess)
process.wait()
deleteDepartement.main()
createDepartement.main()
creationSiteDepartement.main()
cmdProcess = [
"./scriptExecution.sh",
LINK_SCODOC_SERVER,
@ -442,4 +445,10 @@ if __name__ == "__main__":
]
process = subprocess.Popen(cmdProcess)
process.wait()
unittest.main(warnings="ignore")
unittest.main(
testRunner=HtmlTestRunner.HTMLTestRunner(
report_name="06_Moyenne_tests",
output="./ResultatTest",
combine_reports=True,
)
)

View File

@ -2,6 +2,10 @@ import unittest
import time
import subprocess
import urllib.parse as urlparse
import HtmlTestRunner
import createDepartement
import creationSiteDepartement
import deleteDepartement
from setting import (
SCODOC_ADMIN_ID,
SCODOC_ADMIN_PASS,
@ -62,10 +66,11 @@ class PythonOrgSearch(unittest.TestCase):
).click()
self.wait.until(EC.url_changes(URL_ETUDIANT))
URL_DECISION = driver.current_url
# TODOOOOO
driver.find_element_by_id("input-choice-10").click()
driver.find_element_by_id("subut").click()
time.sleep(1)
driver.get(URL_ETUDIANT)
assertTrue("ADM" in driver.find_elements_by_id("rcp_dec"))
self.assertTrue("ADM" in driver.find_element_by_class_name("rcp_dec").text)
def test_020_etudiantS1_non_assidu_avec_moy_semestre_non_valide(self):
driver = self.driver
@ -82,10 +87,10 @@ class PythonOrgSearch(unittest.TestCase):
).click()
self.wait.until(EC.url_changes(URL_ETUDIANT))
URL_DECISION = driver.current_url
# TODOOOOO
driver.find_element_by_id("input-choice-40").click()
driver.find_element_by_id("subut").click()
driver.get(URL_ETUDIANT)
assertTrue("ATJ" in driver.find_elements_by_id("rcp_dec"))
self.assertTrue("ATJ" in driver.find_element_by_class_name("rcp_dec").text)
def test_030_etudiantS1_assidu_sous_la_moy_semestre_valide(self):
driver = self.driver
@ -102,20 +107,20 @@ class PythonOrgSearch(unittest.TestCase):
).click()
self.wait.until(EC.url_changes(URL_ETUDIANT))
URL_DECISION = driver.current_url
# TODOOOOOOOO
driver.find_element_by_id("input-choice-30").click()
driver.find_element_by_id("subut").click()
driver.get(URL_ETUDIANT)
assertTrue("ATB" in driver.find_elements_by_id("rcp_dec"))
self.assertTrue("ATB" in driver.find_element_by_class_name("rcp_dec").text)
driver.find_element_by_xpath("//a[contains(text(),'Scolarité')]").click()
driver.find_element_by_xpath(
"//a[contains(@href,'formsemestre_validation_etud_form?')]"
).click()
self.wait.until(EC.url_changes(URL_ETUDIANT))
URL_DECISION = driver.current_url
# TODOOOOOOOO
driver.find_element_by_id("input-choice-580").click()
driver.find_element_by_id("subut").click()
driver.get(URL_ETUDIANT)
assertTrue("ATB" in driver.find_elements_by_id("rcp_dec"))
self.assertTrue("ATB" in driver.find_element_by_class_name("rcp_dec").text)
def test_040_etudiantS1_non_assidu_sous_la_moy_semestre_valide(self):
driver = self.driver
@ -132,20 +137,20 @@ class PythonOrgSearch(unittest.TestCase):
).click()
self.wait.until(EC.url_changes(URL_ETUDIANT))
URL_DECISION = driver.current_url
# TODOOOOOOOO
driver.find_element_by_id("input-choice-40").click()
driver.find_element_by_id("subut").click()
driver.get(URL_ETUDIANT)
assertTrue("ATJ" in driver.find_elements_by_id("rcp_dec"))
self.assertTrue("ATJ" in driver.find_element_by_class_name("rcp_dec").text)
driver.find_element_by_xpath("//a[contains(text(),'Scolarité')]").click()
driver.find_element_by_xpath(
"//a[contains(@href,'formsemestre_validation_etud_form?')]"
).click()
self.wait.until(EC.url_changes(URL_ETUDIANT))
URL_DECISION = driver.current_url
# TODOOOOOOOO
driver.find_element_by_id("input-choice-580").click()
driver.find_element_by_id("subut").click()
driver.get(URL_ETUDIANT)
assertTrue("ATB" in driver.find_elements_by_id("rcp_dec"))
self.assertTrue("ATB" in driver.find_element_by_class_name("rcp_dec").text)
def test_050_calcul_automatiqueS2_jury(self):
driver = self.driver
@ -155,14 +160,10 @@ class PythonOrgSearch(unittest.TestCase):
self.wait.until(EC.url_changes(url))
urlTmp = driver.current_url
driver.find_element_by_xpath("//a[contains(text(),'Jury')]").click()
driver.find_element_by_xpath(
"//a[contains(@href,'formsemestre_recapcomplet?')]"
).click()
driver.find_element_by_link_text("Saisie des décisions du jury").click()
self.wait.until(EC.url_changes(urlTmp))
urlTmp = driver.current_url
driver.find_element_by_xpath(
"//a[contains(@href,'formsemestre_validation_auto?')]"
).click()
driver.find_element_by_partial_link_text("Calcul automatique").click()
self.wait.until(EC.url_changes(urlTmp))
urlTmp = driver.current_url
driver.find_element_by_xpath("//input[@type='submit']").click()
@ -171,12 +172,12 @@ class PythonOrgSearch(unittest.TestCase):
searchBar.send_keys("EID7")
searchBar.submit()
time.sleep(5)
assertTrue("ADM" in driver.find_elements_by_id("rcp_dec"))
self.assertTrue("ADM" in driver.find_element_by_class_name("rcp_dec").text)
searchBar = driver.find_element_by_id("in-expnom")
searchBar.send_keys("EID10")
searchBar.submit()
time.sleep(5)
assertTrue("en cours" in driver.find_elements_by_id("rcp_dec"))
self.assertTrue("en cours" in driver.page_source)
def test_060_declarer_defaillance(self):
driver = self.driver
@ -221,9 +222,9 @@ class PythonOrgSearch(unittest.TestCase):
if __name__ == "__main__":
cmdProcess = ["./scriptCreationDepartement.sh", LINK_SCODOC_SERVER, NOM_DPT]
process = subprocess.Popen(cmdProcess)
process.wait()
deleteDepartement.main()
createDepartement.main()
creationSiteDepartement.main()
cmdProcess = [
"./scriptExecution.sh",
LINK_SCODOC_SERVER,
@ -232,4 +233,10 @@ if __name__ == "__main__":
]
process = subprocess.Popen(cmdProcess)
process.wait()
unittest.main(warnings="ignore")
unittest.main(
testRunner=HtmlTestRunner.HTMLTestRunner(
report_name="07_Admission_et_passages_tests",
output="./ResultatTest",
combine_reports=True,
)
)

View File

@ -1,219 +0,0 @@
<Tests>
<Test>
<intitulé>Connexion en admin</intitulé>
<page>scodoc_admin</page>
<operation>
Acceder à la page https://scodoc-dev-iutinfo.univ-lille.fr/ScoDoc/scodoc_admin avec les identifiants admin;
</operation>
<resultat>
Connexion établie (h3 = page Administration de scodoc)
</resultat>
<role>Admin Scodoc</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé>Création d'un département</intitulé>
<page>scodoc_admin</page>
<operation>
Accès à la page https://scodoc-dev-iutinfo.univ-lille.fr/ScoDoc/scodoc_admin,
séléctionner un département dans création département,
clicker sur créer département,
valider sur la page suivante
</operation>
<resultat>
Apparition du lien du département sur la page d'accueil
</resultat>
<role>Admin Scodoc</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé>Création d'une formation</intitulé>
<page>Scolarite/Notes</page>
<operation>
https://scodoc-dev-iutinfo.univ-lille.fr/ScoDoc/[nom_formation]/Scolarite/Notes/formation_create,
remplissage des champs:
tf_acronyme (DUT Test),
tf_titre (Diplome universitaire et technologique de test),
tf_titre_officiel (Diplome universitaire et technologique de test),
tf_formation_code (123456)
Soumettre le formulaire;
</operation>
<resultat>
la page sur laquelle on est dirigée contient une class formation_descr
</resultat>
<role>AdminDPT</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé>Ajout d'une UE à la formation créée</intitulé>
<page>Scolarite/Notes</page>
<operation>
https://scodoc-dev-iutinfo.univ-lille.fr/ScoDoc/AurelienUS/Scolarite/Notes/ue_create?formation_id=FORM130
remplissage des champs:
tf_titre "Informatique"
tf_acronyme "Info"
tf_numero "1"
tf_ects "10"
tf_coefficient "10"
Soumettre le formulaire;
</operation>
<resultat>
La page sur laquelle on est dirigée contient "Info Informatique"
</resultat>
<role>AdminDPT</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé>Ajout d'une matière à l'UE créée</intitulé>
<page>Scolarite/Notes</page>
<operation>
Soumettre le formulaire d'ajout de matière
</operation>
<resultat>
La page sur laquelle on est dirigée contient la classe notes_matiere_list et un de ses enfants contient Systeme </resultat>
<role>AdminDPT</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé>Ajouter une session</intitulé>
<page>Scolarite/Notes</page>
<operation>
Verifier que la list de formation est présente
Se rendre sur la page correspondante "Mise en place d'un semestre de formation" à la formation
Vérifier que grtcontent > h2 existe et qu'il contient "Mise en place d'un semestre de formation""
Soumettre le formulaire après l'avoir rempli
</operation>
<resultat>
La page sur laquelle on est dirigée contient une classe head_message avec nouveau semestre créé
</resultat>
<role>AdminDPT</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé>Creer un étudiant</intitulé>
<page>Scolarite</page>
<operation>
https://scodoc-dev-iutinfo.univ-lille.fr/ScoDoc/AurelienUS/Scolarite/etudident_create_form
Remplir les champs et soumettre le formulaire;
</operation>
<resultat>
La page contient ficheEtud avec un h2 contenant M. Normal UnEtudiant
</resultat>
<role>AdminDPT</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé>Creer une absence</intitulé>
<page>Scolarite/Absences</page>
<operation>
Affecter une absence à un étudiant
</operation>
<resultat>
La page absence de cet étudiant contient l'absence créée
</resultat>
<role>SecraitaireDPT</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé>Justifier une absence</intitulé>
<page>Scolarite/Absences</page>
<operation>
Justifier une absence et la confirmer
</operation>
<resultat>
Ses absences apparaissent comme justifiée sur la page des absences de cet étudiant
</resultat>
<role>SecretaireDPT</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé>Générer les absences pour une journée</intitulé>
<page>Scolarite/Notes/Absences/EtatAbsences</page>
<operation>
Généner le récapitulatif des absences
</operation>
<resultat>
La page générée contient les absences préalablement créée
</resultat>
<role>SecretaireDPT</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé>Export XML de la formation</intitulé>
<page>Scolarite/Notes</page>
<operation>
Génération de l'export XML, vérifier s'il contient les informations de la formations
</operation>
<resultat>
Le xml généré contient les informations demandées
</resultat>
<role>AdminDPT</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé>Export JSON de la formation</intitulé>
<page>Scolarite/Notes</page>
<operation>
Génération de l'export JSON, vérifier s'il contient les informations de la formations
</operation>
<resultat>
Le JSON généré contient les informations demandées
</resultat>
<role>AdminDPT</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé>Verifier la génération du récapitulatif</intitulé>
<page>Scolarite/Notes/ue_list</page>
<operation>
Se rendre sur la page table récapitulative de la formation
</operation>
<resultat>
La page contient toutes les UE et matière précédemment créées
</resultat>
<role>AdminDPT</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé>Changer les données d'un étudiant</intitulé>
<page>Scolarité</page>
<operation>
Changer les données/Identitée
</operation>
<resultat>
La fiche étudiante est mise à jour avec les nouvelles informations
</resultat>
<role>SecretaireDPT</role>
<createur>Aurélien</createur>
</Test>
<Test>
<intitulé></intitulé>
<page></page>
<operation>
</operation>
<resultat>
</resultat>
<role></role>
<createur></createur>
</Test>
<Test>
<intitulé></intitulé>
<page></page>
<operation>
</operation>
<resultat>
</resultat>
<role></role>
<createur></createur>
</Test>
<Test>
<intitulé></intitulé>
<page></page>
<operation>
</operation>
<resultat>
</resultat>
<role></role>
<createur></createur>
</Test>
</Tests>

View File

@ -1,220 +0,0 @@
Context:
EtatsInitiaux: [Le département est créé,
Le programme est créé,
Des matières sont créées,
Des interrogations sont créées,
Il y a des élèves dans le département,
Des professeurs sont affectés au matières,Un/e secretaire est affectée au département]
test1:
intitulé: Connexion en admin
page: scodoc_admin
operation: Acceder à la page https://scodoc-dev-iutinfo.univ-lille.fr/ScoDoc/scodoc_admin avec les identifiants admin;
resultat: Connexion établie (h3 = page Administration de scodoc)
role: Admin
createur: Aurélien
test2:
intitulé: Création d'un département
page: scodoc_admin
operation:
Accès à la page https://scodoc-dev-iutinfo.univ-lille.fr/ScoDoc/scodoc_admin,
séléctionner un département dans création département,
clicker sur créer département,
valider sur la page suivante
resultat: Apparition du lien du département sur la page d'accueil
role: Admin Scodoc
createur: Aurélien
test3:
intitulé: Création d'une formation
page: Scolarite/Notes
operation:
https://scodoc-dev-iutinfo.univ-lille.fr/ScoDoc/[nom_formation]/Scolarite/Notes/formation_create,
remplissage des champs
tf_acronyme (DUT Test),
tf_titre (Diplome universitaire et technologique de test),
tf_titre_officiel (Diplome universitaire et technologique de test),
tf_formation_code (123456)
Soumettre le formulaire;
resultat: la page sur laquelle on est dirigée contient une class formation_descr
role: AdminDPT
createur: Aurélien
test4:
intitulé: Ajout d'une UE à la formation créée
page: Scolarite/Notes
operation:
https://scodoc-dev-iutinfo.univ-lille.fr/ScoDoc/AurelienUS/Scolarite/Notes/ue_create?formation_id=FORM130
remplissage des champs
tf_titre "Informatique"
tf_acronyme "Info"
tf_numero "1"
tf_ects "10"
tf_coefficient "10"
Soumettre le formulaire;
resultat: La page sur laquelle on est dirigée contient "Info Informatique"
role: AdminDPT
createur: Aurélien
test5:
intitulé: Ajout d'une matière à l'UE créée
page: Scolarite/Notes
operation: Soumettre le formulaire d'ajout de matière
resultat: La page sur laquelle on est dirigée contient la classe notes_matiere_list et un de ses enfants contient Systeme
role: AdminDPT
createur: Aurélien
test6:
intitulé: Ajouter une session
page: Scolarite/Notes
operation: Verifier que la list de formation est présente
Se rendre sur la page correspondante "Mise en place d'un semestre de formation" à la formation
Vérifier que grtcontent h2 existe et qu'il contient "Mise en place d'un semestre de formation""
Soumettre le formulaire après l'avoir rempli
resultat: La page sur laquelle on est dirigée contient une classe head_message avec nouveau semestre créé
role: AdminDPT
createur: Aurélien
test7:
intitulé: Creer un étudiant
page: Scolarite
operation:
https://scodoc-dev-iutinfo.univ-lille.fr/ScoDoc/AurelienUS/Scolarite/etudident_create_form
Remplir les champs et soumettre le formulaire
resultat: La page contient ficheEtud avec un h2 contenant M. Normal UnEtudiant
role: AdminDPT
createur: Aurélien
test8:
intitulé: Creer une absence
page: Scolarite/Absences
operation: Affecter une absence à un étudiant
resultat: La page absence de cet étudiant contient l'absence créée
role: SecretaireDPT
createur: Aurélien
test9:
intitulé: Justifier une absence
page: Scolarite/Absences
operation: Justifier une absence et la confirmer
resultat: Ses absences apparaissent comme justifiée sur la page des absences de cet étudiant
role: SecretaireDPT
createur: Aurélien
test10:
intitulé: Générer les absences pour une journée
page: Scolarite/Notes/Absences/EtatAbsences
operation: Généner le récapitulatif des absences
resultat: La page générée contient les absences préalablement créée
role: SecretaireDPT
createur: Aurélien
test11:
intitulé: Export XML de la formation
page: Scolarite/Notes
operation: Génération de l'export XML, vérifier s'il contient les informations de la formations
resultat: Le xml généré contient les informations demandées
role: AdminDPT
createur: Aurélien
test12:
intitulé: Export JSON de la formation
page: Scolarite/Notes
operation: Génération de l'export JSON, vérifier s'il contient les informations de la formations
resultat: Le JSON généré contient les informations demandées
role: AdminDPT
createur: Aurélien
test13:
intitulé: Verifier la génération du récapitulatif
page: Scolarite/Notes/ue_list
operation: Se rendre sur la page table récapitulative de la formation
resultat: La page contient toutes les UE et matière précédemment créées
role: AdminDPT
createur: Aurélien
test14:
intitulé: Changer les données d'un étudiant
page: Scolarité
operation: Changer les données/Identitée
resultat: La fiche étudiant est mise à jour avec les nouvelles informations
role: SecretaireDPT
createur: Aurélien
test15:
intitulé: Inscrire un étudiant
page: Scolarite
operation: Rechercher l'étudiant et l'inscrire au semestre courant
resultat: La pageEtu de l'étudiant contient maintenant le semstre courant
role: SecretaireDPT
createur: Aurélien
test16:
intitulé: Décision recommandé de validation de semestre pour un etudiant assidu
page: Scolarite/Notes
operation: Selectionner la validation de semestre dans les opérations scolarité, séléctionner étudiant assidu et valider
resultat: L'état ATT apparait sur la fiche de l'étudiant concerné
role: SecretaireDPT
createur: Aurélien
test17:
intitulé: Décision recommandé de validation de semestre pour un etudiant non assidu
page: Scolarite/Notes
operation: Selectionner la validation de semestre dans les opérations scolarité, séléctionner problème d'assiduité et valider
resultat: L'état ATT apparait sur la fiche de l'étudiant concerné et la mention (non ass.) apparait sur la page de parcours de l'étudiant
role: SecretaireDPT
createur: Aurélien
test18:
intitulé: Effectuer la démission d'un étudiant
page: Scolarite/ficheEtud
operation: Selectionner la demission dans les opérations scolarité, entrer une date et confirmer
resultat: La mention "Démission le xx" apparait sur la fiche de l'étudiant concerné
role: SecretaireDPT
createur: Aurélien
test19:
intitulé: Affecter des absences à un étudiant depuis la gestion des absences
page: Scolarite/Absences
operation: Selectionner la semaine concernée et cocher les cases correspondantes pour un étudiant
resultat: Le compteur d'absence de l'étudiant à été mis à jour
role: [SecretaireDPT, EnseignantDPT]
createur: Aurélien
test20:
intitulé: Créer une répartition
page: Scolarite/Notes
operation: Dans le menu modifier créer des groupes, rentrer le nom de la partition et clicker sur nouvelle partition
resultat: Le tableau contient une nouvelle ligne avec le nom de la partition préalablement rempli
role: [AdminDPT, SecretaireDPT]
createur: Aurélien
test21:
intitulé: Créer un groupe
page: Scolarite/Notes
operation: Dans le menu modifier/créer des groupes, clicker sur répartir à coté de la partition concernée, remplir groupName et appuyer sur créer groupe
resultat: Le groupe apprait dans la div groups
role: [AdminDPT, SecretaireDPT]
createur: Aurélien
test22:
intitulé: Affecter des étudiants à un groupe
page: Scolarite/Notes
operation: Dans une répartition, déplacer des étudiants de étudiants sans groupe au groupe souhaité, enregister ces groupes
resultat: Le groupe (discretelink) apparait maintenant sur la fiche des étudiants correspondant
role: SecretaireDPT
createur: Aurélien
test23:
intitulé: Créer une évaluation
page: /Scolarite/Notes
operation: Aller sur le module correspondant, ajouter une évaluation
resultat: L'évaluation apparait maintenant au bout de la ligne
role: [Admin,Chef des études, SecretaireDPT]
createur: Aurélien
test24:
intitulé: Entrer des notes
page: /Scolarite/Notes
operation: Se rendre sur l'interrogation correspondante et rentrer des notes pour chaque étudiant
resultat: La moyenne apparait mainteanant à côté de l'interrogation correspondante
role: [EnseignantDPT]
createur: Aurélien
test25:
intitulé: Verifier le calcul de la moyenne des notes pour une évaluation
page: /Scolarite/Notes
operation: Relever toutes les notes et comparer à la moyenne calculée
resultat: Les deux sont identiques
role: [SecretaireDPT]
createur: Aurélien
test26:
intitulé: Ajouter un module optionnel
page:
operation:
resultat:
role: AdminDPT
createur: Aurélien
test27:
intitulé: Ajouter une note optionnelle
page:
operation:
resultat:
role: EnseignantDPT
createur: Aurélien

View File

@ -62,7 +62,7 @@ test4:
champsInteractions:
[
ProgrammesLink,
create_formation_link,
link-create-formation,
tf_acronyme,
tf_titre,
tf_titre_officiel,
@ -96,7 +96,7 @@ test6:
tf_acronyme,
tf_submit,
tf_titre_officiel,
create_formation_link,
link-create-formation,
errorMessage,
]
role: *AdminDPT
@ -117,7 +117,7 @@ test7:
tf_acronyme,
tf_submit,
tf_titre_officiel,
create_formation_link,
link-create-formation,
errorMessage,
]
role: *AdminDPT
@ -144,7 +144,7 @@ test9:
champsModifie: null
champsInteractions:
[
link_create_etudident,
link-create-student,
tf_nom,
tf_prenom,
tf_annee,
@ -170,7 +170,7 @@ test10:
tf_code_nip,
dont_check_homonyms:list,
tf_submit,
titleError,
title-error,
]
role: [*AdminDPT, *Secretaire]
createur: Aurélien
@ -180,10 +180,10 @@ test11:
Se rendre sur la fiche étudiante d'un étudiant avec l'aide de la recherche à l'id in-expnom(sidebar)
Clicker sur changer de coordonnées
Remplir le formulaire et le soumestre
resultat: L'élèment à l'id adresse_etudiant contient désormais les informations mise à jour.
resultat: L'élèment à l'id student-adress contient désormais les informations mise à jour.
etat: *ProgramCreated
page: *Scolarite
champsModifie: adresse_etudiant
champsModifie: student-adress
champsInteractions:
[in-expnom, tf_domicile, tf_codepostaldomicile, tf_paysdomicile, tf_submit]
role: [*AdminDPT, *Secretaire]
@ -196,7 +196,7 @@ test12:
page: *Scolarite
champsModifie: null
champsInteractions:
[in-expnom, url_inscription_with_modules, inscription_Semestre_]
[in-expnom, url_inscription_with_modules, inscription-semestre-]
role: *Secretaire
createur: Aurélien
test13:
@ -246,7 +246,7 @@ test17:
etat: *EtudiantCreated
page: *Absence
champsModifie: null
champsInteractions: [justifier_Absence, datedebut, description]
champsInteractions: [justify-absence, datedebut, description]
role: *Secretaire
createur: Aurélien
test18:
@ -256,7 +256,7 @@ test18:
etat: *EtudiantCreated
page: *Absence
champsModifie: null
champsInteractions: [supprimer_Absence, datedebut, afficher_Liste_Absence]
champsInteractions: [delete-absence, datedebut, display-list-absence]
role: *Secretaire
createur: Aurélien
test19:
@ -420,7 +420,7 @@ test34:
[
id:in-expnom,
id:ProgrammesLink,
id:titre_,
id:titre-,
id:tf_coefficient,
id:tf_submit,
]
@ -584,31 +584,31 @@ test48:
Accès à la page de création d'UE dans la formation précédemment créée
Remplir et soumettre le formulaire
Soumettre le formulaire;
resultat: La page sur laquelle on est dirigée contient "Info Informatique"
resultat: Le nom et l'accronyme de l'UE sont dans la page de la formation
etat: *DeptCreated
page: *Notes
champsModifie:
champsModifie: null
champsInteractions:
[
tf_titre,
tf_acronyme,
tf_submit,
tf_titre_officiel,
create_formation_link,
errorMessage,
]
[id:tf_titre, id:tf_acronyme, id:tf_submit, link:ue_create]
role: *AdminDPT
createur: Aurélien
test49:
intitulé: Ajout d'une matière à l'UE créée
intitulé: Ajout d'une matière à la formation créée
operation: Soumettre le formulaire d'ajout de matière
resultat: La page sur laquelle on est dirigée contient la classe notes_matiere_list et un de ses enfants contient Systeme
resultat: La page sur laquelle on est dirigée contient la classe notes_matiere_list et l'intitulé de la matière est présent
etat: *MatiereCreated
page: *Notes
champs:
champsModifie: null
champsInteractions: [
id:tf_titre,
id:tf_acronyme,
id:tf_submit,
link:matiere_create
link:matiere_edit,
]
role: *AdminDPT
createur: Aurélien
test50:
test51:
intitulé: Affecter des absences à un étudiant depuis la gestion des absences
operation: Selectionner la semaine concernée et cocher les cases correspondantes pour un étudiant
resultat: Le compteur d'absence de l'étudiant à été mis à jour
@ -617,7 +617,7 @@ test50:
champs:
role: [*Secretaire, *Prof]
createur: Aurélien
test51:
test52:
intitulé: Générer les absences pour une journée
operation: Généner le récapitulatif des absences
resultat: La page générée contient les absences préalablement créée
@ -626,7 +626,7 @@ test51:
champs:
role: *Secretaire
createur: Aurélien
test52:
test53:
intitulé: Créer une répartition
operation: Dans le menu modifier créer des groupes, rentrer le nom de la partition et clicker sur nouvelle partition
resultat: Le tableau contient une nouvelle ligne avec le nom de la partition préalablement rempli
@ -635,7 +635,7 @@ test52:
champs:
role: [*Secretaire, *AdminDPT]
createur: Aurélien
test53:
test54:
intitulé: Créer un groupe
operation: Dans le menu modifier/créer des groupes, clicker sur répartir à coté de la partition concernée, remplir groupName et appuyer sur créer groupe
resultat: Le groupe apprait dans la div groups
@ -644,7 +644,7 @@ test53:
champs:
role: [*Secretaire, *AdminDPT]
createur: Aurélien
test54:
test55:
intitulé: Affecter des étudiants à un groupe
operation: Dans une répartition, déplacer des étudiants de étudiants sans groupe au groupe souhaité, enregister ces groupes
resultat: Le groupe (discretelink) apparait maintenant sur la fiche des étudiants correspondant

Binary file not shown.

8
createDepartement.py Normal file
View File

@ -0,0 +1,8 @@
import subprocess
from setting import LINK_SCODOC_SERVER, NOM_DPT
def main():
cmdProcess = ["./scriptCreationDepartement.sh", LINK_SCODOC_SERVER, NOM_DPT]
process = subprocess.Popen(cmdProcess)
process.wait()

View File

@ -0,0 +1,53 @@
# coding: utf8
import unittest
import time
import subprocess
import HtmlTestRunner
from setting import (
SCODOC_ADMIN_ID,
SCODOC_ADMIN_PASS,
BASE_URL,
NOM_DPT,
LINK_SCODOC_SERVER,
BASE_NOT_SECURED_URL,
NAVIGATEUR,
)
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select, WebDriverWait
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.select import Select
URL = BASE_URL + NOM_DPT + "/Scolarite"
ACRONYME_FORMATION = "FormationTEST"
def main():
if NAVIGATEUR == "firefox":
driver = webdriver.Firefox()
else:
driver = webdriver.Chrome()
driver.get(
"https://"
+ SCODOC_ADMIN_ID
+ ":"
+ SCODOC_ADMIN_PASS
+ "@"
+ BASE_NOT_SECURED_URL
+ "force_admin_authentication"
)
driver.get(BASE_URL + "scodoc_admin")
time.sleep(2)
try:
select = Select(driver.find_element_by_id("create-dept"))
select.select_by_visible_text(NOM_DPT)
driver.find_element_by_id("create-dept").submit()
time.sleep(1)
driver.find_element_by_id("tf_submit").click()
time.sleep(1)
driver.close()
except NoSuchElementException:
driver.close()

8
deleteDepartement.py Normal file
View File

@ -0,0 +1,8 @@
import subprocess
from setting import LINK_SCODOC_SERVER, NOM_DPT
def main():
cmdProcess = ["./scriptDeleteDepartement.sh", LINK_SCODOC_SERVER, NOM_DPT]
process = subprocess.Popen(cmdProcess)
process.wait()

View File

@ -1,205 +0,0 @@
<formation acronyme="DUT Info" code_specialite="" type_parcours="100" titre_officiel="DUT Informatique" formation_code="FCOD2" version="1" titre="DUT Informatique" formation_id="FORM234">
<ue acronyme="UE11" coefficient="0.0" is_external="0" code_apogee="" ue_code="UE11" numero="1" titre="Base de l'informatique" type="0">
<matiere titre="Architecture matérielle - Systèmes dexploitation - Réseaux" numero="1">
<module coefficient="2.0" code="M1101" code_apogee="" ects="" heures_tp="30.0" numero="1" abbrev="" heures_cours="10.0" module_type="0" titre="Introduction aux systèmes informatiques" semestre_id="1" heures_td="20.0" />
</matiere>
<matiere titre="Algorithmique - Programmation - Langages" numero="2">
<module coefficient="2.0" code="M1102" code_apogee="" ects="" heures_tp="30.0" numero="10" abbrev="Algorithmique" heures_cours="10.0" module_type="0" titre="Introduction à lalgorithmique et à la programmation" semestre_id="1" heures_td="20.0" />
</matiere>
<matiere titre="Algorithmique - Programmation - Langages Avancé" numero="3">
<module coefficient="2.0" code="M1103" code_apogee="" ects="" heures_tp="20.0" numero="3" abbrev="Structure de données" heures_cours="10.0" module_type="0" titre="Structure de données et algorithmes fondamentaux" semestre_id="1" heures_td="15.0" />
</matiere>
<matiere titre="Systèmes de gestion de bases de données" numero="4">
<module coefficient="3.0" code="M1104" code_apogee="" ects="" heures_tp="25.0" numero="4" abbrev="BDD" heures_cours="10.0" module_type="0" titre="Introduction aux bases de données" semestre_id="1" heures_td="25.0" />
</matiere>
<matiere titre="Web - Internet - Mobilité Expression - Communication" numero="5">
<module coefficient="2.0" code="M1105" code_apogee="" ects="" heures_tp="25.0" numero="5" abbrev="CDIN" heures_cours="0.0" module_type="0" titre="Conception de documents et dinterfaces numériques" semestre_id="1" heures_td="20.0" />
</matiere>
<matiere titre="Projets tutorés" numero="6">
<module coefficient="3.0" code="M1106" code_apogee="" ects="" heures_tp="0.0" numero="6" abbrev="Projet" heures_cours="0.0" module_type="0" titre="Projet tutoré : découverte" semestre_id="1" heures_td="0.0" />
</matiere>
</ue>
<ue acronyme="UE21" coefficient="0.0" is_external="0" code_apogee="" ue_code="UE21" numero="1" titre="Informatique approfondie" type="0">
<matiere titre="Architecture matérielle - Systèmes dexploitation - Réseaux" numero="1">
<module coefficient="2.0" code="M2101" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Architecture et Programmation des mécanismes de base dun système informatique" semestre_id="2" heures_td="10.0" />
</matiere>
<matiere titre="Architecture matérielle - Systèmes dexploitation - Réseaux avancé" numero="2">
<module coefficient="2.0" code="M2102" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Architecture des réseaux" semestre_id="2" heures_td="10.0" />
</matiere>
<matiere titre="Algorithmique - Programmation - Langages Analyse, conception et développement dapplications" numero="3">
<module coefficient="2.0" code="M2103" code_apogee="" ects="" heures_tp="30.0" numero="10" abbrev="" heures_cours="10.0" module_type="0" titre="Bases de la programmation orientée objet" semestre_id="2" heures_td="20.0" />
</matiere>
<matiere titre="Analyse, conception et développement dapplications" numero="4">
<module coefficient="2.0" code="M2104" code_apogee="" ects="" heures_tp="20.0" numero="10" abbrev="COO" heures_cours="10.0" module_type="0" titre="Bases de la conception orientée objet" semestre_id="2" heures_td="15.0" />
</matiere>
<matiere titre="Interface homme-machine" numero="5">
<module coefficient="2.0" code="M2105" code_apogee="" ects="" heures_tp="20.0" numero="10" abbrev="" heures_cours="10.0" module_type="0" titre="Introduction aux interfaces homme-machine" semestre_id="2" heures_td="15.0" />
</matiere>
<matiere titre="Systèmes de gestion de bases de données" numero="6">
<module coefficient="2.0" code="M2106" code_apogee="" ects="" heures_tp="20.0" numero="10" abbrev="" heures_cours="10.0" module_type="0" titre="Programmation et administration des bases de données" semestre_id="2" heures_td="15.0" />
</matiere>
<matiere titre="Projets tutorés" numero="7">
<module coefficient="3.0" code="M2107" code_apogee="" ects="" heures_tp="0.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Projet tutoré : Description et planification de projet" semestre_id="2" heures_td="0.0" />
</matiere>
</ue>
<ue acronyme="UE31" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD5" numero="1" titre="Informatique avancée" type="0">
<matiere titre="Architectures matérielles - Systèmes dexploitation - Réseaux" numero="1">
<module coefficient="2.0" code="M3101" code_apogee="" ects="" heures_tp="16.0" numero="10" abbrev="" heures_cours="15.0" module_type="0" titre="Principes des systèmes dexploitation" semestre_id="3" heures_td="14.0" />
</matiere>
<matiere titre="Architectures matérielles - Systèmes dexploitation, Réseaux" numero="2">
<module coefficient="2.0" code="M3102" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Services réseaux" semestre_id="3" heures_td="10.0" />
</matiere>
<matiere titre="Algorithmique - Programmation - Langages avancé" numero="3">
<module coefficient="2.0" code="M3103" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Algorithmique avancée" semestre_id="3" heures_td="10.0" />
</matiere>
<matiere titre="Web - Internet - Mobilité" numero="4">
<module coefficient="2.0" code="M3104" code_apogee="" ects="" heures_tp="16.0" numero="10" abbrev="" heures_cours="15.0" module_type="0" titre="Programmation Web côté serveur" semestre_id="3" heures_td="14.0" />
</matiere>
<matiere titre="Analyse, conception et développement dapplications" numero="5">
<module coefficient="16.0" code="M3105" code_apogee="" ects="" heures_tp="14.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Conception et programmation objet avancées" semestre_id="3" heures_td="15.0" />
</matiere>
<matiere titre="Systèmes de gestion de bases de données" numero="6">
<module coefficient="2.0" code="M3106C" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Bases de données avancées" semestre_id="3" heures_td="10.0" />
</matiere>
<matiere titre="Malus" numero="16">
<module coefficient="0.0" code="MALUS1" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="3" heures_td="0.0" />
</matiere>
</ue>
<ue acronyme="UE41" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD8" numero="1" titre="Compléments en informatique" type="0">
<matiere titre="Architectures matérielles - Systèmes dexploitation - Réseaux" numero="1">
<module coefficient="2.0" code="M4101C" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Administration système et réseau" semestre_id="4" heures_td="10.0" />
</matiere>
<matiere titre="Architectures matérielles - Systèmes dexploitation Réseaux Analyse, conception et développement dapplications" numero="2">
<module coefficient="2.0" code="M4102C" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Programmation répartie" semestre_id="4" heures_td="10.0" />
</matiere>
<matiere titre="Web Internet - Mobilité" numero="3">
<module coefficient="2.0" code="M4103C" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Programmation Web client riche" semestre_id="4" heures_td="10.0" />
</matiere>
<matiere titre="Web - Internet - Mobilité - Mobile" numero="4">
<module coefficient="3.0" code="M4104C" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Conception et développement dapplications mobiles" semestre_id="4" heures_td="10.0" />
</matiere>
<matiere titre="Analyse, conception et développement dapplications" numero="5">
<module coefficient="2.0" code="M4105C" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Compléments dinformatique en vue dune insertion immédiate" semestre_id="4" heures_td="10.0" />
</matiere>
<matiere titre="Projets tutorés" numero="6">
<module coefficient="3.0" code="M4106" code_apogee="" ects="" heures_tp="0.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Projet tutoré Compléments" semestre_id="4" heures_td="0.0" />
</matiere>
<matiere titre="Malus" numero="16">
<module coefficient="0.0" code="MALUS1" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="4" heures_td="0.0" />
</matiere>
</ue>
<ue acronyme="UE12" coefficient="0.0" is_external="0" code_apogee="" ue_code="UE12" numero="2" titre="Bases de culture scientifique, sociale et humaine" type="0">
<matiere titre="Mathématiques" numero="1">
<module coefficient="2.0" code="M1201" code_apogee="" ects="" heures_tp="17.0" numero="1" abbrev="" heures_cours="10.0" module_type="0" titre="Mathématiques discrètes" semestre_id="1" heures_td="18.0" />
</matiere>
<matiere titre="Mathématiques avancées" numero="2">
<module coefficient="2.0" code="M1202" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="6.0" module_type="0" titre="Algèbre linéaire" semestre_id="1" heures_td="12.0" />
</matiere>
<matiere titre="Économie - Gestion - Organisation - Droit" numero="3">
<module coefficient="2.0" code="M1203" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="10.0" module_type="0" titre="Environnement économique" semestre_id="1" heures_td="10.0" />
</matiere>
<matiere titre="Organisation" numero="4">
<module coefficient="1.0" code="M1204" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="10.0" module_type="0" titre="Fonctionnement des organisations" semestre_id="1" heures_td="20.0" />
</matiere>
<matiere titre="Expression - Communication" numero="5">
<module coefficient="2.0" code="M1205" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Fondamentaux de la communication" semestre_id="1" heures_td="15.0" />
</matiere>
<matiere titre="Anglais" numero="6">
<module coefficient="2.0" code="M1206" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Anglais et Informatique" semestre_id="1" heures_td="15.0" />
</matiere>
<matiere titre="PPP Expression - Communication" numero="7">
<module coefficient="1.0" code="M1207" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Connaître le monde professionnel" semestre_id="1" heures_td="10.0" />
</matiere>
<matiere titre="Malus" numero="17">
<module coefficient="0.0" code="MALUS2" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="1" heures_td="0.0" />
</matiere>
</ue>
<ue acronyme="UE22" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD4" numero="2" titre="Approfondissements en culture scientifique, sociale et humaine" type="0">
<matiere titre="Mathématiques" numero="1">
<module coefficient="2.0" code="M2201" code_apogee="" ects="" heures_tp="18.0" numero="10" abbrev="" heures_cours="11.0" module_type="0" titre="Graphes et langages" semestre_id="2" heures_td="16.0" />
</matiere>
<matiere titre="Mathématiques avancées" numero="2">
<module coefficient="2.0" code="M2202" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Analyse et méthodes numériques" semestre_id="2" heures_td="12.0" />
</matiere>
<matiere titre="Économie - Gestion - Droit - Organisation" numero="3">
<module coefficient="2.0" code="M2203" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="12.0" module_type="0" titre="Environnement comptable, financier, juridique et social" semestre_id="2" heures_td="18.0" />
</matiere>
<matiere titre="Économie - Gestion - Organisation - Droit Analyse, conception et développement dapplications" numero="4">
<module coefficient="2.0" code="M2204" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Gestion de projet informatique" semestre_id="2" heures_td="12.0" />
</matiere>
<matiere titre="Expression - Communication" numero="5">
<module coefficient="1.0" code="M2205" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Communication, information et argumentation" semestre_id="2" heures_td="15.0" />
</matiere>
<matiere titre="Anglais" numero="6">
<module coefficient="2.0" code="M2206" code_apogee="" ects="" heures_tp="22.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Communiquer en anglais" semestre_id="2" heures_td="23.0" />
</matiere>
<matiere titre="PPP" numero="7">
<module coefficient="1.0" code="M2207" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="PPP - Identifier ses compétences" semestre_id="2" heures_td="10.0" />
</matiere>
<matiere titre="Malus" numero="17">
<module coefficient="0.0" code="MALUS2" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="2" heures_td="0.0" />
</matiere>
</ue>
<ue acronyme="UE32" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD6" numero="2" titre="Culture scientifique, sociale et humaine avancées" type="0">
<matiere titre="Mathématiques" numero="1">
<module coefficient="2.0" code="M3201" code_apogee="" ects="" heures_tp="14.0" numero="10" abbrev="" heures_cours="15.0" module_type="0" titre="Probabilités et statistique" semestre_id="3" heures_td="16.0" />
</matiere>
<matiere titre="Mathématiques avancées" numero="2">
<module coefficient="2.0" code="M3202C" code_apogee="" ects="" heures_tp="14.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Modélisations mathématiques" semestre_id="3" heures_td="16.0" />
</matiere>
<matiere titre="Économie - Gestion - Organisation - Droit" numero="3">
<module coefficient="2.0" code="M3203" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="10.0" module_type="0" titre="Droit des technologies de linformation et de la communication" semestre_id="3" heures_td="10.0" />
</matiere>
<matiere titre="Gestion" numero="4">
<module coefficient="2.0" code="M3204" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="15.0" module_type="0" titre="Gestion des systèmes dinformation" semestre_id="3" heures_td="15.0" />
</matiere>
<matiere titre="Expression - Communication" numero="5">
<module coefficient="2.0" code="M3205" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Communication professionnelle" semestre_id="3" heures_td="15.0" />
</matiere>
<matiere titre="Anglais" numero="6">
<module coefficient="2.0" code="M3206" code_apogee="" ects="" heures_tp="22.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Collaborer en anglais" semestre_id="3" heures_td="23.0" />
</matiere>
<matiere titre="Malus" numero="16">
<module coefficient="0.0" code="MALUS2" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="3" heures_td="0.0" />
</matiere>
</ue>
<ue acronyme="UE33" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD7" numero="2" titre="Méthodologie et projets" type="0">
<matiere titre="Analyse, conception et développement dapplications Économie - gestion - Organisation - Droit" numero="1">
<module coefficient="2.0" code="M3301" code_apogee="" ects="" heures_tp="24.0" numero="10" abbrev="" heures_cours="14.0" module_type="0" titre="Méthodologie de la production dapplications" semestre_id="3" heures_td="22.0" />
</matiere>
<matiere titre="Projets tutorés" numero="2">
<module coefficient="3.0" code="M3302" code_apogee="" ects="" heures_tp="0.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Projet tutoré - Mise en situation professionnelle" semestre_id="3" heures_td="0.0" />
</matiere>
<matiere titre="PPP" numero="3">
<module coefficient="2.0" code="M3303" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="PPP - Préciser son projet" semestre_id="3" heures_td="10.0" />
</matiere>
<matiere titre="Malus" numero="13">
<module coefficient="0.0" code="MALUS2" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="3" heures_td="0.0" />
</matiere>
</ue>
<ue acronyme="UE42" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD9" numero="2" titre="Compléments de culture scientifique, sociale et humaine" type="0">
<matiere titre="Économie - Gestion - Organisation - Droit" numero="1">
<module coefficient="2.0" code="M4201C" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Ateliers de création dentreprise" semestre_id="4" heures_td="12.0" />
</matiere>
<matiere titre="Mathématiques" numero="2">
<module coefficient="2.0" code="M4202C" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Introduction à la recherche opérationnelle et aide à la décision" semestre_id="4" heures_td="12.0" />
</matiere>
<matiere titre="Expression Communication" numero="3">
<module coefficient="2.0" code="M4203" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Communication dans les organisations" semestre_id="4" heures_td="15.0" />
</matiere>
<matiere titre="Anglais" numero="4">
<module coefficient="2.0" code="M4204" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Travailler en anglais" semestre_id="4" heures_td="15.0" />
</matiere>
<matiere titre="Malus" numero="14">
<module coefficient="0.0" code="MALUS2" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="4" heures_td="0.0" />
</matiere>
</ue>
<ue acronyme="UE43" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD10" numero="3" titre="Mise en situation professionnelle" type="0">
<matiere titre="STAGE" numero="1">
<module coefficient="12.0" code="M4301" code_apogee="" ects="" heures_tp="0.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Stage professionnel" semestre_id="4" heures_td="0.0" />
</matiere>
<matiere titre="Malus" numero="11">
<module coefficient="0.0" code="MALUS3" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="4" heures_td="0.0" />
</matiere>
</ue>
</formation>

File diff suppressed because it is too large Load Diff

21
lancement_de_tout_les_tests.sh Executable file
View File

@ -0,0 +1,21 @@
#!/bin/bash
#Ce script lance en séquence les différents jeux de tests.
if [ "$#" -eq 1 ]
then
if [ "$1" = "--cleanup" ] || [ "$1" = "--c" ]
then
rm -rf ./ResultatTest/*
else
echo "Mauvaise utilisation de la commande, utilisez --cleanup ou -c pour supprimer les anciens rapport de tests"
fi
fi
python3 01_creation_departement_test.py;
python3 02_creation_formation_test.py;
python3 03_etudiant_test.py;
python3 04_creation_absence_test.py;
python3 05_saisie_note_test.py;
python3 06_test_moyenne.py;
python3 07_test_admission.py;
python3 deleteDepartement.py;
./scriptGenerateReportPage.sh

View File

@ -1,6 +0,0 @@
>>>
.....
----------------------------------------------------------------------
Ran 5 tests in 77.731s
OK

108
readme.md
View File

@ -1,14 +1,102 @@
I Configuration
#Tests E2E du logiciel Scodoc
Environnement de test :
Editer le .envmodel pour remplacer les différentes informations qui permettent d'intéragir avec Scodoc (attention au / dans les liens, il y a des exemples)
Renommer le fichier en .env
Ces jeux de tests ont été conçus pour tester automatiquement Scodoc d'un point de vue E2E (End to End). Ils sont en théorie indépendants les uns des autres. Ils ont étés développés en python 3.
## I Configuration
Dans cette partie je vais détailler les prérequis pour l'environnement de développement
### Prérequis Module
Ces prérequis peuvent être trouvés dans requirements.txt qui se trouvent à la base du projet.
Vous devez avoir pip d'installé, normalement il est fourni avec les versions de python3, sinon vous trouverez les étapes d'installation [ici](https://pip.pypa.io/en/stable/installing/)
Les modules suivant sont nécessaire :
>selenium==3.141.0
>python-dotenv==0.17.1
>HtmlTestRunner==0.8.0
Les tests sont prévus pour fonctionner avec firefox, le webdriver (geckodriver) est intégré dans le projet pour éviter de devoir l'installer manuellement, il est également possible de préciser un autre webdriver en le précisant dans le .env, en remplaçant firefox par chrome par exemple
Vous pouvez les installer manuellement avec pip avec la commande suivante :
>pip install selenium
IL y a certains module qui sont requis pour lancer ces tests pour cela les installer avec pip à l'aide des commandes suivante :
pip install selenium
pip install python-dotenv
Les tests sont prévus pour fonctionner en python 3 avec unit test
ou alternativement avec
>pip install -r requirements.txt
### Environnement de test
Un modèle de .env est fourni dans ce projet, pour que les tests soient fonctionnel vous devez le remplir et le renommer en .env. Ce dernier servira à remplir différentes informations spécifiques concernant votre environnement Scodoc. Nous allons le voir ici en détail
#### .env
>BASE_URL = "https://scodoc-dev-iutinfo.univ-lille.fr/ScoDoc/"
Ici sera le lien vers la page d'accueil de votre Scodoc
>NOM_DPT = "test01"
Le nom du département surlequel vous allez effectuer vos tests, il est **FORTEMENT** conseillés de mettre ici un nom de département qui n'existe pas, sous risque de perte de données.
>SCODOC_ADMIN_ID = "admin_id"
Le nom d'utilisateur d'un Admin Scodoc.
>SCODOC_ADMIN_PASS = "admin_password"
Le mot de passe d'un Admin Scodoc.
>SCODOC_ENS_ID = "enseignant_id"
Le nom d'utilisateur d'un enseignant lambda qui servira pour rentrer des notes, soit qui existe, soit qui sera créé.
>SCODOC_ENS_PASS = "enseignant_password@10"
Le mot de passe de l'utilisateur précédent, si l'utilisateur précédent n'existe pas, veillez à avoir un mot de passe suffisamenent compliqué pour la création de ce dernier.
>SCODOC_CHEF_ID = "chef_id"
Le nom d'utilisateur d'un enseignant lambda qui se verra attribué le rôle de résponsable d'un module afin de créer des interrogations , soit qui existe, soit qui sera créé.
>SCODOC_CHEF_PASS = "p@ssword42@"
Le mot de passe de l'utilisateur précédent, si l'utilisateur précédent n'existe pas, veillez à avoir un mot de passe suffisamenent compliqué pour la
>LINK_SCODOC_SERVER = "root@ssh_server_scodoc"
Le lien vers votre serveur Scodoc, ce dernier servira à lancer des scripts de mise en place sur le serveur. Veillez donc à avoir une connexion avec les droits root sur votre serveur, de préférences avec échange de clef ssh.
>BASE_NOT_SECURED_URL = "scodoc-dev-iutinfo.univ-lille.fr/"
Le lien vers la page de choix de département, avec le format précisé.
>NAVIGATEUR = "firefox"
Ici vous pouvez choisir entre firefox et chrome,choisissez le navigateur dans lequel vous voulez que vos tests se déroulent. Cette ligne permettra au programme de choisir le webdriver correspondant.
#### Explications du fonctionnement des tests
Les tests sont prévus pour fonctionner avec firefox ou chrome les webdrivers sont intégrés dans le projet pour éviter de devoir les installer manuellement. Ces webdrivers servent à faire la connexion entre python et le navigateur.
##Lancement des tests
Pour lancer les tests, assurez vous d'avoir une connexion possible avec votre serveur. Positionnez vous à la racine de ce projet et il suffit donc de lancer la commande par exemple pour le premier jeux de tests
>python3 01_creation_departement_test.py
Alternativement vous pouvez lancer l'ensemble des tests avec la commande
>./lancement_de_tout_les_tests.sh
L'option --c ou --cleanup est disponible si vous souhaitez effacer tout les rapports précédents
###Resultats des tests
Les tests sont présentés sur une page HTML qui se trouve dans le dossier ResultatTest, il y a une page HTML par jeux de tests créée. Un récapitulatif est également créé par le biais du script
>./scriptGenerateReportPage.sh
Celui ci est lancé automatiquement à la fin du script
>./lancement_de_tout_les_tests.sh
Vous y retrouverez les liens menant au détails de chaque rapport ainsi qu'un résumé du nombre de test passés/échoués
##Correctifs
* Modifier le PATH pour que geckodriver soit executable `export PATH=".:$PATH"`
* pip install HtmlTestRunner-Python3
* Créer un utilisateur Nom:BACH Prenom:Test User:Bach
#TODO Lancer les test en parrallèle

View File

@ -1,2 +1,3 @@
selenium==3.141.0
python-dotenv==0.17.1
HtmlTestRunner==0.8.0
python-dotenv==0.18.0

View File

@ -1,4 +1,5 @@
#!/bin/bash
#Se script se charge de se connecter au serveur scodoc et créer le département donné en paramètre
if [ "$#" -ne 2 ];
then
echo "Pas assez d'arguments"

View File

@ -1,4 +1,5 @@
#!/bin/bash
#Se script se charge de se connecter au serveur scodoc et supprimer le département donné en paramètre
if [ "$#" -ne 2 ];
then
echo "Pas assez d'arguments"
@ -8,4 +9,4 @@ ssh $1 /bin/bash<< EOF
cd /opt/scodoc/Products/ScoDoc/config
./delete_dept.sh -n ${2}
EOF
ssh $1 'systemctl restart ScoDoc.service'
ssh $1 'systemctl restart scodoc'

View File

@ -1,4 +1,5 @@
#!/bin/bash
#Ce script se rends sur le serveur scodoc et lance le script précisé sur celui ci
if [ "$#" -ne 3 ];
then
echo "Pas assez d'arguments"
@ -8,4 +9,4 @@ ssh $1 /bin/bash<< EOF
cd /opt/scodoc/Products/ScoDoc/
scotests/scointeractive.sh -r ${2} scotests/${3}
EOF
ssh $1 'systemctl restart ScoDoc.service'
ssh $1 'systemctl restart scodoc'

43
scriptGenerateReportPage.sh Executable file
View File

@ -0,0 +1,43 @@
#!/bin/bash
TIME=$(date +%d%m_%H%M%S)
echo '<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Author" content="Made by 'tree'">
<meta name="GENERATOR" content="$Version: $ tree v1.8.0 (c) 1996 - 2018 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro $">
<title>Directory Tree</title>
<style type="text/css">
<!--
BODY { font-family : ariel, monospace, sans-serif; }
P { font-weight: normal; font-family : ariel, monospace, sans-serif; color: black; background-color: transparent;}
B { font-weight: normal; color: black; background-color: transparent;}
A:visited { font-weight : normal; text-decoration : none; background-color : transparent; margin : 0px 0px 0px 0px; padding : 0px 0px 0px 0px; display: inline; }
A:link { font-weight : normal; text-decoration : none; margin : 0px 0px 0px 0px; padding : 0px 0px 0px 0px; display: inline; }
A:hover { color : #000000; font-weight : normal; text-decoration : underline; background-color : yellow; margin : 0px 0px 0px 0px; padding : 0px 0px 0px 0px; display: inline; }
A:active { color : #000000; font-weight: normal; background-color : transparent; margin : 0px 0px 0px 0px; padding : 0px 0px 0px 0px; display: inline; }
.VERSION { font-size: small; font-family : arial, sans-serif; }
.NORM { color: black; background-color: transparent;}
.FIFO { color: purple; background-color: transparent;}
.CHAR { color: yellow; background-color: transparent;}
.DIR { color: blue; background-color: transparent;}
.BLOCK { color: yellow; background-color: transparent;}
.LINK { color: aqua; background-color: transparent;}
.SOCK { color: fuchsia;background-color: transparent;}
.EXEC { color: green; background-color: transparent;}
-->
</style>
</head>
<body>
<h1>Directory Tree</h1><p>
<a href="./ResultatTest/">./ResultatTest/</a><br>
' >> ./ResultatTest/Résumé_"${TIME}".html
for file in ./ResultatTest/*.html; do
RESULT=$(cat $file | grep "Summary")
BASEFILE=$(basename $file)
LINK="$BASEFILE"
if [[ $LINK != *"Résumé"* ]] ; then
echo "├── <a href=${LINK}>${BASEFILE}</a>${RESULT}<br>" >> ./ResultatTest/Résumé_${TIME}.html
fi
done
echo '<br><br><br><br></body></html>' >> ./ResultatTest/Résumé_"${TIME}".html

View File

@ -15,4 +15,4 @@ SCODOC_CHEF_ID = os.environ.get("SCODOC_CHEF_ID")
SCODOC_CHEF_PASS = os.environ.get("SCODOC_CHEF_PASS")
LINK_SCODOC_SERVER = os.environ.get("LINK_SCODOC_SERVER")
BASE_NOT_SECURED_URL = os.environ.get("BASE_NOT_SECURED_URL")
NAVIGATEUR = os.environ.get("NAVIGATEUR")
NAVIGATEUR = os.environ.get("NAVIGATEUR")

View File

@ -0,0 +1,50 @@
# coding: utf8
import unittest
import time
import subprocess
import HtmlTestRunner
from setting import (
SCODOC_ADMIN_ID,
SCODOC_ADMIN_PASS,
BASE_URL,
NOM_DPT,
LINK_SCODOC_SERVER,
BASE_NOT_SECURED_URL,
NAVIGATEUR,
)
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select, WebDriverWait
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.select import Select
URL = BASE_URL + NOM_DPT + "/Scolarite"
ACRONYME_FORMATION = "FormationTEST"
def main():
if NAVIGATEUR == "firefox":
driver = webdriver.Firefox()
else:
driver = webdriver.Chrome()
driver.get(
"https://"
+ SCODOC_ADMIN_ID
+ ":"
+ SCODOC_ADMIN_PASS
+ "@"
+ BASE_NOT_SECURED_URL
+ "force_admin_authentication"
)
driver.get(BASE_URL + "scodoc_admin")
time.sleep(2)
try:
select = Select(driver.find_element_by_id("delete-dept"))
select.select_by_visible_text(NOM_DPT)
driver.find_element_by_id("delete-dept").submit()
driver.close()
except NoSuchElementException:
driver.close()