以前没怎么写过 Test ,如有原则性错误请勿喷……
我没有直接用 Django 的 TestCase ,而是用的 pytest-django ,但原理都差不多的
我想达到如下的目的:
import pytest
@pytest.mark.django_db
class Test_API:
@classmethod
def setup_class(cls):
cls.client = APIClient()
@classmethod
def teardown_class(cls):
pass
def test_register(self):
resp = self.client.put('/account/', {
'username': 'user1',
'password': 'pass1'
})
assert resp.status_code == 200
def test_login(self):
resp = self.client.post('/login/', {
'username': 'user1',
'password': 'pass1'
})
assert resp.status_code == 200
def test_logout(self):
r = self.client.get('/logout/')
assert r.status_code == 200
我的目的是:先跑注册,再跑登录,最后登出,简单来说,我想编写有前后依赖关系的 test case 然而上面的代码运行结果如下:
tests/test_api.py::Test_API::test_register PASSED
tests/test_api.py::Test_API::test_login FAILED
tests/test_api.py::Test_API::test_logout FAILED
问题的原因我知道,文档中也有说明,跟 Django 类似,每一个 test 跑完后,会自动 rollback 。这个原因导致了我上述目的无法达成。
然而我很想知道,有没有办法禁用每一个 test 跑完后的自动 rollback?最好能让我在setup
中手动开启 transaction ,在teardown
中手动 rollback
我找遍了 Django 、 pytest 、 pytest-django 的文档,不知道怎么搞。
还是说我的思路根本就是错误的,不要写这种有依赖性的 test case?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.