N.C*_*.C. 4 django django-testing pytest django-rest-framework pytest-django
现在我有这样的代码:
from rest_framework.test import APITestCase
class MyTestClass(ApiTestCase):
fixtures = ['some_fixtures.json', ]
@pytest.mark.parametrize('field, reverse_ordering', [
('id', False),
('id', True)])
def test_ordering(self, field, reverse_ordering):
# some test function
Run Code Online (Sandbox Code Playgroud)
每次因该错误而失败时:
======================================================================
ERROR: test_ordering (my_module.tests.MyTestClass)
----------------------------------------------------------------------
TypeError: test_ordering() missing 2 required positional arguments: 'field' and 'reverse_ordering'
Run Code Online (Sandbox Code Playgroud)
如何@pytest.mark.parametrize在APITestCaseDRF 测试类中使用装饰器进行测试?
也许有另一种方法来参数化测试(但不是循环)?
也许有另一种方法来参数化测试(但不是循环)?
从 Python 3.4 开始,在标准库中可以使用subTest以下参数进行参数化:
class MyTest(APITestCase):
test_ordering_params = [('id', False), ('id', True)]
def test_ordering(self):
for field, reverse_ordering in self.test_ordering_params:
with self.subTest(field=field, reverse=reverse_ordering):
query = ('-' if reverse_ordering else '') + field
resp = self.client.get(reverse('url-name'), {'ordering': query}, format='json')
assert resp.data
Run Code Online (Sandbox Code Playgroud)
但是,如果您想从使用中获得真正的好处pytest,请考虑从unittest- 样式类测试转移到测试函数。pytest与pytest-django插件结合使用的相同测试:
import pytest
from rest_framework.test import APIClient
@pytest.fixture
def apiclient():
return APIClient()
@pytest.mark.parametrize('field, reverse_ordering', [('id', False), ('id', True)])
def test_ordering(apiclient, db, field, reverse_ordering):
query = ('-' if reverse_ordering else '') + field
resp = apiclient.get(reverse('url-name'), {'ordering': query}, format='json')
assert resp.data
Run Code Online (Sandbox Code Playgroud)
您还可以查看parameterized库,它pytest为测试类方法提供类似参数化。例子:
from parameterized import parameterized
class MyTest(APITestCase):
@parameterized.expand([('id', False), ('id', True)])
def test_ordering(self, field, reverse_ordering):
query = ('-' if reverse_ordering else '') + field
resp = self.client.get(reverse('url-name'), {'ordering': query}, format='json')
assert resp.data
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2259 次 |
| 最近记录: |