Compare commits

..

1 Commits

Author SHA1 Message Date
Aurelien PLANCKE
d09e805a15 backup save 2021-06-21 08:11:45 +02:00
28 changed files with 2189 additions and 539 deletions

View File

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

2
.gitignore vendored
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

219
UserStory.xml Normal file
View File

@ -0,0 +1,219 @@
<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>

220
UserStory.yaml Normal file
View File

@ -0,0 +1,220 @@
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: champsInteractions:
[ [
ProgrammesLink, ProgrammesLink,
link-create-formation, create_formation_link,
tf_acronyme, tf_acronyme,
tf_titre, tf_titre,
tf_titre_officiel, tf_titre_officiel,
@ -96,7 +96,7 @@ test6:
tf_acronyme, tf_acronyme,
tf_submit, tf_submit,
tf_titre_officiel, tf_titre_officiel,
link-create-formation, create_formation_link,
errorMessage, errorMessage,
] ]
role: *AdminDPT role: *AdminDPT
@ -117,7 +117,7 @@ test7:
tf_acronyme, tf_acronyme,
tf_submit, tf_submit,
tf_titre_officiel, tf_titre_officiel,
link-create-formation, create_formation_link,
errorMessage, errorMessage,
] ]
role: *AdminDPT role: *AdminDPT
@ -144,7 +144,7 @@ test9:
champsModifie: null champsModifie: null
champsInteractions: champsInteractions:
[ [
link-create-student, link_create_etudident,
tf_nom, tf_nom,
tf_prenom, tf_prenom,
tf_annee, tf_annee,
@ -170,7 +170,7 @@ test10:
tf_code_nip, tf_code_nip,
dont_check_homonyms:list, dont_check_homonyms:list,
tf_submit, tf_submit,
title-error, titleError,
] ]
role: [*AdminDPT, *Secretaire] role: [*AdminDPT, *Secretaire]
createur: Aurélien 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) 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 Clicker sur changer de coordonnées
Remplir le formulaire et le soumestre Remplir le formulaire et le soumestre
resultat: L'élèment à l'id student-adress contient désormais les informations mise à jour. resultat: L'élèment à l'id adresse_etudiant contient désormais les informations mise à jour.
etat: *ProgramCreated etat: *ProgramCreated
page: *Scolarite page: *Scolarite
champsModifie: student-adress champsModifie: adresse_etudiant
champsInteractions: champsInteractions:
[in-expnom, tf_domicile, tf_codepostaldomicile, tf_paysdomicile, tf_submit] [in-expnom, tf_domicile, tf_codepostaldomicile, tf_paysdomicile, tf_submit]
role: [*AdminDPT, *Secretaire] role: [*AdminDPT, *Secretaire]
@ -196,7 +196,7 @@ test12:
page: *Scolarite page: *Scolarite
champsModifie: null champsModifie: null
champsInteractions: champsInteractions:
[in-expnom, url_inscription_with_modules, inscription-semestre-] [in-expnom, url_inscription_with_modules, inscription_Semestre_]
role: *Secretaire role: *Secretaire
createur: Aurélien createur: Aurélien
test13: test13:
@ -246,7 +246,7 @@ test17:
etat: *EtudiantCreated etat: *EtudiantCreated
page: *Absence page: *Absence
champsModifie: null champsModifie: null
champsInteractions: [justify-absence, datedebut, description] champsInteractions: [justifier_Absence, datedebut, description]
role: *Secretaire role: *Secretaire
createur: Aurélien createur: Aurélien
test18: test18:
@ -256,7 +256,7 @@ test18:
etat: *EtudiantCreated etat: *EtudiantCreated
page: *Absence page: *Absence
champsModifie: null champsModifie: null
champsInteractions: [delete-absence, datedebut, display-list-absence] champsInteractions: [supprimer_Absence, datedebut, afficher_Liste_Absence]
role: *Secretaire role: *Secretaire
createur: Aurélien createur: Aurélien
test19: test19:
@ -420,7 +420,7 @@ test34:
[ [
id:in-expnom, id:in-expnom,
id:ProgrammesLink, id:ProgrammesLink,
id:titre-, id:titre_,
id:tf_coefficient, id:tf_coefficient,
id:tf_submit, id:tf_submit,
] ]
@ -589,22 +589,28 @@ test48:
page: *Notes page: *Notes
champsModifie: null champsModifie: null
champsInteractions: champsInteractions:
[id:tf_titre, id:tf_acronyme, id:tf_submit, link:ue_create] [
id:tf_titre,
id:tf_acronyme,
id:tf_submit,
link:ue_create
]
role: *AdminDPT role: *AdminDPT
createur: Aurélien createur: Aurélien
test49: test49:
intitulé: Ajout d'une matière à la formation créée intitulé: Ajout d'une matière à l'UE créée
operation: Soumettre le formulaire d'ajout de matière 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 l'intitulé de la matière est présent resultat: La page sur laquelle on est dirigée contient la classe notes_matiere_list et un de ses enfants contient Systeme
etat: *MatiereCreated etat: *MatiereCreated
page: *Notes page: *Notes
champsModifie: null champsModifie: null
champsInteractions: [ champsInteractions:
[
id:tf_titre, id:tf_titre,
id:tf_acronyme, id:tf_acronyme,
id:tf_submit, id:tf_submit,
link:matiere_create link:matiere_create
link:matiere_edit, link:matiere_edit
] ]
role: *AdminDPT role: *AdminDPT
createur: Aurélien createur: Aurélien

Binary file not shown.

View File

@ -1,8 +0,0 @@
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

@ -1,53 +0,0 @@
# 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()

View File

@ -1,8 +0,0 @@
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()

205
export_formation.xml Normal file
View File

@ -0,0 +1,205 @@
<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>

1352
formation_export.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +0,0 @@
#!/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

6
output.txt Normal file
View File

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

108
readme.md
View File

@ -1,102 +1,14 @@
#Tests E2E du logiciel Scodoc I Configuration
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. Environnement de test :
## I Configuration 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)
Dans cette partie je vais détailler les prérequis pour l'environnement de développement Renommer le fichier en .env
### 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
Vous pouvez les installer manuellement avec pip avec la commande suivante : 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
>pip install selenium
ou alternativement avec 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 -r requirements.txt pip install selenium
### Environnement de test pip install python-dotenv
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 Les tests sont prévus pour fonctionner en python 3 avec unit test
#### .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,3 +1,2 @@
selenium==3.141.0 selenium==3.141.0
HtmlTestRunner==0.8.0 python-dotenv==0.17.1
python-dotenv==0.18.0

View File

@ -1,5 +1,4 @@
#!/bin/bash #!/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 ]; if [ "$#" -ne 2 ];
then then
echo "Pas assez d'arguments" echo "Pas assez d'arguments"

View File

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

View File

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

View File

@ -1,43 +0,0 @@
#!/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

@ -1,50 +0,0 @@
# 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()