pytest pour les tests unitaires

Prérequis : pytest et pytest-html doivent être installés ( générer un rapport de test html )
pip installer pytest et pip installer pytest-html

1 : Règles de nommage

Le nom de la classe et le nom de la méthode dans le test unitaire Pytest doivent commencer par test Seules les classes et les méthodes commençant par test peuvent être trouvées lors de l'exécution .
plus rigoureux
unittest : Setup >> setupclass , teardown >> teardownclass (classwork)
Pytest : fonctions setup, setup_class et teardown , teardown_class ( identique à l' exécution unittest )
Exécuter au début et à la fin de la méthode de test, c'est-à-dire  : l'exécution d'une fonction de test entraînera une configuration et un démontage
S'exécute au début et à la fin de la méthode de test , mais n'exécute qu'une seule fois setup_class et teardown_class , quel que soit le nombre de fonctions de test.

2 : Pytest génère son propre rapport de test html

Prérequis : vous devez télécharger le module pytest-html (le module de rapport de test intégré de python )

pip installer pytest-html

Cas numéro un

pytest.main("module.py ") [exécuter le module spécifié , exécuter toutes les classes et tous les cas de test en commençant par test]

 Générer un rapport

Cas 2

Exécutez le cas d'utilisation spécifié de la classe spécifiée du module spécifié, divisez les deux-points et générez un rapport de test

 Rapport de sortie :

Cas trois :

Exécutez directement pytest.main() [Rechercher automatiquement les fichiers commençant par test ou les fichiers py se terminant par test dans le répertoire actuel ] (pytest_test )

Générer un rapport:

 Instruction d'appel pytest

Rapport de sortie : 

-x Quitter le test lorsqu'un scénario de test échoue

-s : affiche le contenu à imprimer

Extension : sauter
Utilisez @pytest.mark.skip() pour ignorer ce cas d'utilisation ( fonction )

 Générer un rapport:

 3 : Comment fonctionne Pytest

.dot , indiquant que le cas d'utilisation passe
F signifie échec
E indique qu'il y a une erreur d'exception dans le cas d'utilisation

4 : Lire le fichier xml

fichier xml

 Module de code de développement :

Lire le module de données :

 Tester le module de codes :

Générer un rapport:

Code d'implémentation :

#xml文件
<ento>
    <add>
        <add1>1</add1>
        <add2>2</add2>
        <denyu>3</denyu>
    </add>
</ento>

#开发代码
class Clac():
    def add(self,a,b):
        return a + b

    def jian(self,a,b):
        return a - b

#读取数据
from xml.dom import minidom

class ReadXml():
    def readxml(self,path,firsthod,secondnode):
        root = minidom.parse(path)
        firsthod = root.getElementsByTagName(firsthod)[0]
        secondnode = firsthod.getElementsByTagName(secondnode)[0].firstChild.data

        return secondnode

#测试代码
from readdata.readxml import ReadXml  #获取数据
from assets.clac import Clac  #引入开发代码
import pytest,allure,os
readxmlclass = ReadXml()
c = Clac()
aa = int(readxmlclass.readxml("../data/test.xml","add","add1"))
bb = int(readxmlclass.readxml("../data/test.xml","add","add2"))
cc = int(readxmlclass.readxml("../data/test.xml","add","denyu"))

class TestClass():

    def test001(self):
        result =  c.add(int(aa),int(bb))
        assert result == int(cc)

4.1 Lire le fichier csv

 Module de code de développement :

Lire le module de données :

 

 Tester le module de codes :

Générez un rapport de test :

 Code d'implémentation :

#csv文件
10,20,30

#开发代码
class Clac():
    def add(self,a,b):
        return a + b

    def jian(self,a,b):
        return a - b

#读取数据
import csv
class CsvClass():
    def csvclass(self):
        item = []
        c = csv.reader(open("../data/test.csv"))
        for csv_i in c:
            item.append(csv_i)
        return item

r = CsvClass()
print(r.csvclass())

#测试代码
from readdata.redatacsv import CsvClass
from assets.clac import Clac
import pytest
r = CsvClass()
data = r.csvclass()
c = Clac()

class TestCsv():
    def test001(self):
        for item_i in data:
            result = c.add(int(item_i[0]),int(item_i[1]))
            assert result == int(item_i[2])

if __name__ == '__main__':
    pytest.main(["-s","test_02.py","--html=./report123.html"])

 

5:allure

Allure est un cadre de rapport de test open source léger et très flexible. Il prend en charge la plupart des frameworks de test tels que TestNG ,
Pytest , JUint , etc. Il est simple à utiliser et facile à intégrer.
Configurez d'abord les variables d'environnement d' allure

Vérifiez que l' allure est configurée avec succès

Ensuite, installez allure

pip installer allure-pytest

allure-pytest est un plugin pour Pytest , à travers lequel nous pouvons générer les données nécessaires à Allure pour générer des rapports de test 

5.1 : Plusieurs fonctionnalités couramment utilisées par Allure

@allure.feature # est utilisé pour décrire les exigences du produit testé
@allure.story #Utilisé pour décrire le scénario utilisateur de la fonctionnalité , c'est-à-dire l'exigence de test
avec allure.step () : # utilisé pour décrire les étapes de test, qui seront sorties dans le rapport
allure.attach #Utilisé pour entrer des informations supplémentaires dans le rapport de test, généralement des données de test, des captures d'écran, etc.

5.1.1:allure.fonctionnalité

@allure.feature # est utilisé pour décrire les exigences du produit testé

5.1.2:allure.histoire

@allure.story #Utilisé pour décrire le scénario utilisateur de la fonctionnalité , c'est-à-dire l'exigence de test

Cas

Implémenter la fonction de connexion de l'utilisateur, les scénarios sont le succès de la connexion et l'échec de la connexion

 Affichage effet pytest et allure

Lire xml pour générer un rapport d'allure

 Code de développement :

Lire les données :

 Générer un rapport:

#xml文件
<ento>
    <add>
        <add1>1</add1>
        <add2>2</add2>
        <denyu>3</denyu>
    </add>
</ento>

#开发代码
class Clac():
    def add(self,a,b):
        return a + b

    def jian(self,a,b):
        return a - b

#读取数据
from xml.dom import minidom

class ReadXml():
    def readxml(self,path,firsthod,secondnode):
        root = minidom.parse(path)
        firsthod = root.getElementsByTagName(firsthod)[0]
        secondnode = firsthod.getElementsByTagName(secondnode)[0].firstChild.data

        return secondnode

#测试代码
from readdata.readxml import ReadXml  #获取数据
from assets.clac import Clac  #引入开发代码
import pytest,allure,os
readxmlclass = ReadXml()
c = Clac()
aa = int(readxmlclass.readxml("../data/test.xml","add","add1"))
bb = int(readxmlclass.readxml("../data/test.xml","add","add2"))
cc = int(readxmlclass.readxml("../data/test.xml","add","denyu"))

class TestClass():
    @allure.feature("加法判断功能") #用于定义被测试的功能,被测产品的需求点
    @allure.story("断言成功")       #用于定义被测功能的用户场景,即子功能点
    def test001(self):
        with allure.step("查看相加结果"):  #用于描述测试步骤,将会输出到报告中
            allure.attach("等于3","1加2")
        result =  c.add(int(aa),int(bb))
        assert result == int(cc)
    @allure.feature("等于判断功能")
    @allure.story("断言失败")
    def test002(self):
        assert 1==2

if __name__ == '__main__':
    pytest.main(['--alluredir', 'report/result', 'test_01.py'])  # 生成json类型的测试报告
    split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'  # 将测试报告转为html格式
    os.system(split)  # system函数可以将字符串转化成命令在服务器上运行

Je suppose que tu aimes

Origine blog.csdn.net/shitoureng/article/details/124276292
conseillé
Classement