安装
pip install pytest
验证版本
pytest --version
使用
def f(a):
return a + 1
def tests_f():
# 断言
assert func(1) == 2
执行
-
执行shell命令
pytest
django 使用
安装
pip install pytest-django
使用
-
在Django项目的根目录,也就是和
manage.py
同一级,创建配置文件pytest.ini
。[pytest] DJANGO_SETTINGS_MODULE=settings.local python_files=pytest_*.py python_paths=app filterwarnings = ignore::Warning
-
DJANGO_SETTINGS_MODULE
:根据自己项目实际配置文件填充。 -
python_files
:所有以pytest_开头的文件,在单独运行pytest之时都会被执行。 -
python_paths
:此项配置python路径,若app在当前目录,可忽略,若app均在指定的目录之下,这里指定app文件目录。 -
filterwarnings
:配置忽略的预警级别。 -
测试代码
import json import mock import pytest from django.test import Client @pytest.mark.django_db @pytest.fixture(scope='function') def create_user(): user = User.objects.create(name="测试姓名") @pytest.mark.django_db def test_user_api(): response = Client().get(path='/user', data=json.dumps(data), HTTP_AUTHORIZATION="token 123456") content = response.json() assert content['name'] == "测试姓名"
-
@pytest.mark.django_db
:启用数据库的访问。 -
@pytest.fixture(scope='function')
:fixture
修饰器来标记固定的一个函数,其他函数和模块之类的方法调用被修饰器标记的函数时会被激活并优先执行,通常会被用于完成预置处理和重复操作。例如上面test_user_api
方法执行之前会自动调用加了fixture
修饰器的create_user()
方法。
fixture修饰器
- 修饰器使用方式:
@pytest.fixture(scope='session')
-
fixture
中的scope
参数用来控制fixture
的作用范围:session > module > class > function
。-
function
:每一个函数或方法都会调用。 -
class
:每一个类调用一次,一个类可以有多个方法。 -
module
:每一个.py
文件调用一次。 -
session
:整个会话调用一次。
-
- 参考地址:https://pytest-django.readthedocs.io/en/latest/