L'ensemble du réseau est chaud, le cadre de test automatisé pytest est compétent dans le combat réel de 0 à 1, votre route avancée ...


avant-propos

1. Mode de fonctionnement

Mode ligne de commande :

pytest -s login.py

Mode de fonction principal :

if __name__ == '__main__':
	pytest.main(["-s", "login.py"])

pytest.ini en cours d'exécution :
configurez les paramètres d'exécution de pytest dans le fichier pytest.ini.
A noter :
emplacement : le fichier de configuration est généralement placé à la racine du projet ;
encodage : doit être ANSI, vous pouvez utiliser un outil d'édition de texte pour modifier le format d'encodage ;
règles : quel que soit le mode de fonctionnement, la configuration le fichier sera lu, qui est le plus haut niveau ;
la première ligne au début du fichier doit être [pytest] sauf pour le commentaire, qui est un format fixe, et le nom de fichier pytest.ini est également fixe, et ne peut pas être renommé par lui-même ;

Paramètres couramment utilisés :
paramètres de ligne de commande addopts, séparés par des espaces ;
chemin de cas de test testpaths ;
paramètres de marque de marqueurs, la méthode d'affectation est clé : valeur ;
règles de nommage du module python_files xx.py ;
règles de nommage du nom de la classe python_classes Xxx ;
règles de nommage de la méthode python_functions* *
utilisation du plugin required_plugins ;
xfail_strict = true désactive xpass ;

2, confirmation

Le framework de test unitaire pytest ne fournit pas de méthode d'assertion spéciale, mais utilise directement l'assertion de Python pour affirmer.

import pytest

# 功能:用于计算 a 与 b 相加的和
def add(a, b):
    return a + b

# 功能:用于判断素数
def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
        return True

# 测试相等
def test_add_1():
    assert add(3, 4) == 7

# 测试不相等
def test_add_2():
    assert add(17, 22) != 50

# 测试大于或等于
def test_add_3():
    assert add(17, 22) <= 50

# 测试小于或等于
def test_add_4():
    assert add(17, 22) >= 38

# 测试包含
def test_in():
    a = "hello"
    b = "he"
    assert b in a

# 测试不包含
def test_not_in():
    a = "hello"
    b = "hi"
    assert b not in a

# 判断是否为 True
def test_true_1():
    assert is_prime(13)

# 判断是否为 True
def test_true_2():
    assert is_prime(7) is True

# 判断是否不为 True
def test_true_3():
    assert not is_prime(4)

# 判断是否不为 True
def test_true_4():
    assert is_prime(6) is not True

# 判断是否为 False
def test_false_1():
    assert is_prime(8) is False


if __name__ == '__main__':
    pytest.main(["-s", "0701.py"])

3、Montage

Fixture est généralement utilisé pour initialiser ou restaurer l'environnement de test pour les méthodes de test, les fonctions de test, les classes de test et l'ensemble du fichier de test.

setup_module/teardown_module : exécuté avant et après tous les cas de test dans le fichier actuel.

setup_function/teardown_function : exécuté avant et après chaque fonction de test.

setup/teardown : exécuté avant et après chaque fonction de test. Ces deux méthodes fonctionnent également sur les méthodes de classe.

4. Paramétrage

# argnames:参数名 
# argvalues:参数对应值,类型必须为可迭代类型,一般使用list 
@pytest.mark.parametrize(argnames, argvalues, indirect=False,ids=None, scope=None)

Exemple:

import pytest

class TestLogin:
    @pytest.mark.parametrize(("username", "password"), [("zhangsan", "zhangsan123"), (" xiaoming", "xiaoming123")])
    def test_a(self, username, password):
        print(username)
        print(password)
        assert 1

5. Exécutez le test

pytest fournit une multitude de paramètres pour exécuter des cas de test, et vous pouvez afficher l'aide via "pytest --help".

Exécutez des cas de test dont le nom contient une certaine chaîne :
Par exemple : passez "-k" pour spécifier un cas de test dont le nom contient "add"

pytest -k add test.py
if __name__ == '__main__':
	pytest.main(["-k", "add", "test.py"])

D1

Réduisez la verbosité de l'exécution du test :
le journal d'exécution contient beaucoup moins d'informations, "-q" est utilisé pour réduire la verbosité de l'exécution du test ; vous pouvez également utiliser "-quiet" à la place.

pytest -q test.py
if __name__ == '__main__':
	pytest.main(["-q", "test.py"])

D2

Si un scénario de test échoue, quittez le test :
ceci est utile dans la phase de débogage du scénario de test. Lorsqu'un scénario de test a échoué, vous devez d'abord passer le scénario de test par débogage au lieu de continuer à exécuter les tests suivants. Exemple.

pytest -x test.py
if __name__ == '__main__':
	pytest.main(["-x", "test.py"])

D3

Exécutez le répertoire de test :
le répertoire de test peut spécifier un chemin relatif (tel que ./test_dir) ou un chemin absolu (tel que D:\pytest_sample\test_dir).

pytest ./test_dir

Spécifiez une classe ou une méthode spécifique à exécuter :
spécifiez ici d'exécuter la méthode test_numbers_5_6() sous la classe TestMultiply dans le fichier test_fixtures_02.py, et le nom du fichier, le nom de la classe et le nom de la méthode sont séparés par le symbole " :: ".

pytest test_fixtures_02.py::TestMultiply::test_numbers_5_6

6. Passer le test

Comment l'utiliser : Ajoutez le décorateur @pytest.mark.skipif(condition, reason="xxx") en haut du script de test qui doit être ignoré

# condition:跳过的条件,必传参数 
# reason:标注原因,必传参数 
@pytest.mark.skipif(condition, reason=None)

7. Générer un rapport de test

Générez le fichier XML JUnit :

pytest ./test_dir --junit-xml=./report/log.xml

Générez un rapport de test en ligne :

pytest ./test_dir --pastebin=all

Le code ci-dessus peut générer un lien de journal de session, copier le lien, l'ouvrir via un navigateur et vous obtiendrez un rapport de test au format HTML.

8. plug-in pytest

pytest-html :
pytest-html peut générer des rapports de test au format HTML.
Tout d'abord, installez l'extension pytest-html via la commande pip.

pip install pytest-html

Ensuite, exécutez le scénario de test et générez un rapport de test.

pytest ./ --html=./report/result.html

pytest-rerunfailures :
pytest-rerunfailures permet de réessayer les cas de test lorsqu'ils échouent.

pip install pytest-rerunfailures

Définissez le nombre de tentatives après l'échec de l'exécution du cas de test via le paramètre "-reruns".

pytest -v test.py --reruns 3

pytest-parallel :
l'extension pytest-parallel permet l'exécution parallèle de cas de test.

pip install pytest-parallel

Le paramètre "–tests-per-worker" est utilisé pour spécifier le nombre de threads, et "auto" signifie une allocation automatique.

pytest -q test.py --tests-per-worker auto

Exemple:

from time import sleep

def test_01():
    sleep(3)

def test_02():
    sleep(5)

def test_03():
    sleep(6)

L'exécution du cas de test sans utiliser de threads a pris 14,05 s, qui a été raccourci à 6,02 s après l'avoir utilisé.

pytest-ordering :
contrôle l'ordre d'exécution des fonctions.

pip3 install pytest-ordering

Utilisation :
marquez la fonction sous test, @pytest.mark.run(order=x) ;
résolvez l'ordre d'exécution en fonction des paramètres passés en ordre ;
lorsque les valeurs d'ordre sont toutes positives ou toutes négatives, l'ordre d'exécution : plus la valeur est petite, plus la priorité est élevée ; il
existe des nombres positifs et négatifs : les nombres positifs ont une priorité plus élevée ;

Ce qui suit est le diagramme de système d'architecture de connaissances d'ingénieur de test logiciel le plus complet en 2023 que j'ai compilé

1. De l'entrée à la maîtrise de la programmation Python

Veuillez ajouter une description de l'image

2. Combat réel du projet d'automatisation de l'interface

Veuillez ajouter une description de l'image

3. Combat réel du projet d'automatisation Web

Veuillez ajouter une description de l'image

4. Combat réel du projet d'automatisation des applications

Veuillez ajouter une description de l'image

5. CV des fabricants de premier rang

Veuillez ajouter une description de l'image

6. Tester et développer le système DevOps

Veuillez ajouter une description de l'image

7. Outils de test automatisés couramment utilisés

Veuillez ajouter une description de l'image

Huit, test de performance JMeter

Veuillez ajouter une description de l'image

9. Résumé (petite surprise à la fin)

Ce n'est qu'en transpirant et en travaillant dur que nous pourrons récolter de brillantes réalisations ; ce n'est qu'en travaillant dur que nous pourrons créer notre propre vie merveilleuse. Persévérez et poursuivez vos rêves, vous deviendrez un homme fort inégalé !

Ce n'est qu'avec des efforts inlassables que nous pouvons atteindre l'éclat ; ce n'est qu'avec la détermination d'aller de l'avant avec courage que nous pouvons réussir à poursuivre nos rêves ; n'ayez pas peur des difficultés et relevez les défis avec courage, vous pourrez certainement écrire votre propre chapitre magnifique !

Ce n'est qu'en faisant de notre mieux que nous pourrons nous épanouir brillamment ; ce n'est qu'en persévérant que nous pourrons créer des miracles ; ce n'est qu'en avançant courageusement que nous pourrons réaliser nos rêves. Croyez en vous, gardez les pieds sur terre et travaillez dur, l'avenir vous appartiendra sûrement !

Je suppose que tu aimes

Origine blog.csdn.net/csdnchengxi/article/details/131810534
conseillé
Classement