Estimation du temps de lecture : 5 procès-verbal
Vous travaillez donc avec de grandes quantités de données, et ces données subissent des transformations ou, tout simplement, vous avez besoin de voir si les données ont changé d'une manière ou d'une autre lorsque vous les déplacez.
La question qui se pose est la suivante : si j'ai beaucoup de validations à effectuer, comment puis-je voir rapidement si elles réussissent ou échouent ?
Nous vous présentons ici unittest, un cadre de test Python qui vous permettra de valider rapidement les données avec lesquelles vous travaillez.
Étape 1 - Définissez vos scénarios de test
Comme dans tout test, la première étape consiste à définir ce que vous voulez tester et quel est votre résultat attendu. Ici, nous testons des données qui ont été transformées en une valeur différente.
Le test examine ensuite les nouvelles valeurs et les compare à une liste de valeurs attendues dans la sortie.
Comme on peut le voir, les deux lignes ci-dessus seront utilisées pour créer nos cas de test, qui seront décrits ci-dessous.
Bien que les critères ci-dessous puissent sembler très stricts, ils soulignent exactement ce que nous testons. Soit toutes les données passent le test, soit elles ne le passent pas.
En réalité, ces règles peuvent être modifiées/assouplies en fonction de ce que vous devez tester, ceci est purement illustratif :
Étape 2 - Créer notre fichier python qui transmettra les données transformées
C'est le premier fichier dont nous avons besoin, ce sera le fichier source qui sera utilisé pour transformer les données et qui sera ensuite transmis au module de test.
Dans ce cas, il s'appelle "automate_testing_python.py".
J'ai créé un dictionnaire ici, mais vous pouvez lire un fichier CSV ou tout autre fichier que vous souhaitez. Assurez-vous simplement qu'il est transmis au cadre de données.
import pandas as pd
data = {'Name_before':['Joe','Liz','Pat'],'Name_after':['Joseph','Elizabeth','Patrick']} #===> Creating a dictionary
df = pd.DataFrame(data) #===> Creating a dataframe
def main():
transfromations_applied = data['Name_after'] #===> Defines the column you want to test against
return transfromations_applied #===> Returns the values that will be used in the automation script
La fonction "main" ci-dessus définit clairement quelle colonne contient les données à transmettre au test automatisé, dans ce cas " transfromations_applied ".
Étape 3 - Créer un fichier de script de test
Il y a un certain nombre d'étapes à suivre :
- Installez le paquet HTMLTestrunner dans la solution que vous utilisez.
- Installez la bibliothèque Unittest dans le même programme. Cela permettra d'effectuer les tests demandés et de fournir les sorties de résultats.
- Ensuite, nous importons ce qui a été retourné par la fonction "main" dans le fichier "automate_testing_python.py".
- L'étape suivante est la création de la classe, qui sert les objectifs suivants :
- Définit les tests exacts que nous voulons effectuer.
- Dans la première méthode, elle définit clairement les valeurs attendues et ce qui doit être testé.
- La deuxième méthode consiste à vérifier purement et simplement que toutes les valeurs sont alphabétiques.
- La dernière ligne est un fichier qui exécutera les tests et renverra ensuite les valeurs dans le fichier html de sortie.
from HTMLTestRunner import HTMLTestRunner
import unittest
from automate_testing_python import main #===> Importe les données retournées
#C'est le code qui effectue les tests
#Chaque méthode est un test spécifique
class test_values(unittest.TestCase) :
def test_ValueEquals(self) :
ExpectedValues = ['Joseph','Elizabeth','Patrick']
values_received = main()
self.assertListEqual(ExpectedValues,values_received)
def test_Valueisalphabetic(self) :
values_received = main()
for c in values_received :
self.assertTrue(c.isalpha())
if __name__ == "__main__":
HTMLTestRunner.main()
Étape 4 - Créer le fichier qui générera le fichier HTML de sortie avec les résultats.
À la suite des étapes ci-dessus, nous avons créé les données, les avons apportées pour les tester par rapport à des scénarios de test prédéfinis.
Maintenant, il ne nous reste plus qu'à présenter les résultats dans un fichier HTML.
Dans ce cas, le résultat sera plus facile à comprendre et plus rapide à digérer.
Dans le code ci-dessous, il suit les étapes suivantes :
(A) La première et la deuxième ligne importent les bibliothèques dont nous aurons besoin pour exécuter ce bout de code.
(B) La troisième ligne reçoit les valeurs qui ont été générées à partir de la classe à l'étape 3.
(C) Les quatre lignes suivantes permettent de récupérer les données et de les joindre au fichier myreport.html.
(D) Les deux dernières lignes font ce qui suit :
- Dites au programme de prendre les données reçues, puis d'utiliser le paquet HTMLTestRunner pour les traiter et créer le modèle de sortie.
from HTMLTestRunner import HTMLTestRunner
import unittest
from test_automate_testing_python import test_values
if __name__=='__main__':
suite=unittest.makeSuite(test_values)
filename='C:\\Users\haugh\OneDrive\dataanalyticsireland\YOUTUBE\how_to_automate_testing_with_python\myreport.html'
fp=open(filename,'w')
runner=HTMLTestRunner.HTMLTestRunner(fp,title=u'Data Analytics Ireland Test Output',description=u'This shows the testing output result')
runner.run(suite)
Étape 5 - Exécutez le fichier html_report.py
L'exécution de ce fichier ouvrira et exécutera également le code dans les autres fichiers référencés dans ce post.
En conséquence, lorsque le programme est terminé, la sortie ressemblera à ceci :
Plus tôt dans le programme, nous avons créé un dictionnaire (STEP 1) comme ceci :
data = {‘Name_before’:[‘Joe’,’Liz’,’Pat’],’Name_after’:[‘Joseph’,’Elizabeth’,’Patrick’]} #===> Creating a dictionary
et ensuite, à l'étape 2, dans notre classe "test_values", nous avons défini les résultats attendus.
def test_ValueEquals(self) : ExpectedValues = ['Joseph','Elizabeth','Patrick']
Dans ce cas, les valeurs sont les mêmes, la sortie ci-dessus indiquera que les deux tests sont réussis.
Mais si les valeurs transmises sont :
data = {‘Name_before’:[‘Joe’,’Liz’,’Pat’],’Name_after’:[‘Joseph’,’Elizabeth’,‘Patrick1’]} #===> Creating a dictionary
et sont comparés à
def test_ValueEquals(self) : ExpectedValues = ['Joseph','Elizabeth','Patrick']
La sortie suivante apparaîtra, car les deux tests échoueront :
Nous avons donc créé deux cas de test ici, mais nous pourrions en ajouter beaucoup d'autres et faire en sorte que l'automatisation nous renvoie rapidement les résultats du test.