pytest基础教程
【摘要】 安装pip install pytest 验证版本pytest --version 使用def f(a): return a + 1def tests_f(): # 断言 assert func(1) == 2 执行执行shell命令pytest django 使用 安装pip install pytest-django 使用在Django项目的根目录,也就是和manage.py同一...
安装
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
:整个会话调用一次。
pytest mock
简单使用return_value
返回固定的数据
- 方法一,使用装饰器。
import mock def add(a, b): return a + b # 使用mock的return_value参数改变add返回的数据 @mock.patch('add', return_value=10) def test_add(): print(add(1, 2)) # 10
- 方法二,使用mock.path方法。
import mock def test_add(): with mock.patch('add', return_value=10): print(add(1, 2)) # 10
使用side_effect
返回可变的数据
-
当一个方法被同一个测试调用多次,而自己又不想得到同一个返回值,就轮到
side_effect
上场了。 -
依次返回list里的数据。
# 方法一 @mock.patch('add', side_effect=[10, 20]) def test_add(): print(add(1, 2)) # 10 print(add(1, 2)) # 20 # 方法二 def test_add(): with mock.patch('add', side_effect=[10, 20]): print(add(1, 2)) # 10 print(add(1, 2)) # 20
-
根据传入的参数返回指定的数据。
# 方法一 @mock.patch('add', side_effect={(1, 2): 10, (2, 3): 20}) def test_add(): print(add(2, 3)) # 20 print(add(1, 2)) # 10 # 方法二 def test_add(): with mock.patch('add', side_effect={(1, 2): 10, (2, 3): 20}): print(add(2, 3)) # 20 print(add(1, 2)) # 10
-
参考地址:pytest基础教程
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)