1、概念
pytest 是 Python 的一种单元测试框架,同自带的UnitTest 测试框架类似,相比于 UnitTest 框架使用起来更简洁,效率更高。
2、特点
- 简单易上手,文档丰富,入门简单,文档中有很多实例可以参考
- 支持简单的单元测试和复杂的功能测试
- 支持参数化
- 执行测试过程中可以将某些测试跳过,或者对某些预期失败的 Case 标记成失败
- 支持重复执行失败的 Case
- 支持运行由 Nose,UnitTest 编写的测试Case(UnitTest代码可以直接用pytest运行)
- 具有很多第三方插件,并且可以自定义拓展
- 方便的和持续集成工具集成
3、安装
安装:pip3 install pytest
查看:pip show pytest
确认版本:pytest --version
或者直接在pycharm中安装pytest
注:如果出现pytest 命令不可用,则需要使用管理员身份打开终端重新安装pytest
4、代码格式
class Testxxx: # Test 开头的测试类
def testxxx(self): # test 开头的测试方法
pass
5、运行方式
(1)命令行模式
命令行中执行 pytest -s test.py(文件名)
(2)主函数模式
在Python文件中增加主函数:
if __name__ == '__main__'
pytest.main(['-s',"文件名"])
-s 表示支持控制台打印,如果不加 print不会出现任何内容
6、特殊方法(跟 UnitTest 框架中 fixture 效果一样)
(1)方法级别
# 初始化(前置处理)
def setup(self): --> 首先自动执行
# 销毁(后置处理)
def teardown(self): --> 最后自动执行
# 运行于测试方法的始末,即:运行一次测试方法就会运行一次setUp和tearDown
(2)类级别
# 初始化(前置处理)
def setup_class(self): --> 首先自动执行
# 销毁(后置处理):
def teardown_class(self): --> 最后自动执行
# 运行于测试类的始末,即:每个测试类只会运行一次setup_class和teardown_class
7、配置文件
应用场景:使用配置文件后可以快速的使用配置的项来选择执行哪些测试模块
使用方法:在根目录创建 pytest.ini 文件(tox.ini 或者 setup.cfg 文件也可以)
文件内容:
[pytest]
testpaths = ./study/pytest # 文件搜索路径,即文件所在位置
addopts = -s # 添加命令行参数
python_files = test*.py # 指定文件名称
python_classes = Test* # 指定类名称
python_functions = test* # 指定方法名称
注:
1. 在Windows 系统下,pytest 配置文件中,不允许写注释信息
2. 一个工程只需要一个 pytest 配置文件,并且需要保证文件名正确
3. 一般情况下只需要将 pytest 配置文件置于工程根目录下
4. 配置有 pytest 配置文件的工程,只需要打开命令行,输入 pytest 指令即可执行测试
8、 pytest 常用插件
(1)生成 pytest-html 测试报告插件
Installation : Installer via pip3 install pytest-html ou installer le plugin pytes-html via pycharm
Utilisez : Ajoutez --html=report path/report.html au paramètre de ligne de commande addopts dans le fichier de configuration
Si vous souhaitez fusionner des fichiers CSS, ajoutez --self-contained-html après
(2) Plug-ins qui contrôlent l'ordre d'exécution des fonctions pytest
Installation : Installer via pip3 install pytest-ordering ou installer le plugin pytest-ordering via pycharm
Utilisation : marque et fonction testée, @pytest.mark.run(order=x)
ordre Qu'il soit entièrement positif ou entièrement négatif, plus la valeur est petite, plus la priorité est élevée ; lorsque des nombres positifs et négatifs existent en même temps, le nombre positif a la priorité la plus élevée
(3) plugin de nouvelle tentative d'échec de pytest
Installation : installez via pip3 installez pytest-rerunfailures ou installez le plugin pytest-rerunfailures via pycharm
Utilisation : Ajoutez --reruns -n au paramètre de ligne de commande addopts dans le fichier de configuration (n détermine le nombre de tentatives, pas plus de 3)
9. Opération de saut
# 跳过测试函数
# 参数:
# condition:跳过的条件,必传参数
# reason:标注原因,必传参数
@pytest.mark.skipif(condition , reason=None)
Utilisation : ajoutez le décorateur @pytest.mark.skipif(condition,reason="xxx") au script de test qui doit être ignoré
10. Paramétrage
# 数据参数化
# 参数:
# argnames:参数名
# argvalues:参数对应值,类型必须为可迭代类型,一般用list
@pytest.mark.parametrize(argnames,argvalues,indirect=False,ids=None,scope=None)
Utilisation : ajouter le décorateur @pytest.mark.parametrize(argnames,argvalues) au-dessus de la fonction de test qui doit être paramétrée
Exemple d'un seul paramètre :
import pytest
class Test1:
@pytest.mark.parametrize("name",["小明","小李","小张"])
def test_method(self,name):
print(name)
Exemple avec plusieurs paramètres :
import pytest
class TestLogin:
# 拓展:另一种写法
# @pytest.mark.parametrize(("admin","passwd"),[("admin",123456),("test",456789)])
@pytest.mark.parametrize("admin,passwd",[("admin",123456),("test",456789),("xxx","yyy")])
def test_method(self,admin,passwd):
print(admin)
print(passwd)
11, Affirmation
Méthode : assert xxx fourni avec le système (la méthode d'assertion fournie avec le framework UnitTest)
Exemple:
assert 1==2 # 判断是否相等
assert "name" in "my name is student" # 判断是否包含
assert 2 > 1 # 判断大小