Contenu : guide
-
- avant-propos
- 1. De l'entrée à la maîtrise de la programmation Python
- 2. Combat réel du projet d'automatisation de l'interface
- 3. Combat réel du projet d'automatisation Web
- 4. Combat réel du projet d'automatisation des applications
- 5. CV des fabricants de premier rang
- 6. Tester et développer le système DevOps
- 7. Outils de test automatisés couramment utilisés
- Huit, test de performance JMeter
- 9. Résumé (petite surprise à la fin)
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"])
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"])
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"])
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
2. Combat réel du projet d'automatisation de l'interface
3. Combat réel du projet d'automatisation Web
4. Combat réel du projet d'automatisation des applications
5. CV des fabricants de premier rang
6. Tester et développer le système DevOps
7. Outils de test automatisés couramment utilisés
Huit, test de performance JMeter
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 !