python - Django REST框架测试用例顺序
问题描述
我想测试 Django 应用程序的 API。例如,我有这些 API:
- /用户/注册/
- /用户登录/
我这样写 test.py :
class UserTest(APITestCase):
def test_register(self):
# ...
# self.assertEqual( ... )
def test_login(self):
# ...
# login with registered user (test_register function)
test_register工作正常,但test_login不工作。
test_login运行时,我在test_register中创建的用户在数据库中不存在。
如何在测试过程中保持数据库的状态?
以及如何设置测试类的运行顺序?
解决方案
单元测试应该彼此独立,因此顺序应该无关紧要。如果你需要在每次测试之前执行一个动作,比如创建一个全新的用户,你应该把它放在setUp
函数中
然后,如果您需要您的用户注册登录测试,只需在测试中手动进行。基本上:
test_register
是测试注册工作流程test_login
是测试登录工作流程,你可以在那里手动设置注册状态(你这里不测试)
class UserTest(APITestCase):
def setUp(self):
# call super().setUp() if necessary
self.user = User.objects.create_user(**your_data)
# More stuff
def test_register(self):
# ...
# self.assertEqual( ... )
def test_login(self):
self.user.register() # or any action required
# ...
# login with registered user (test_register function)
编辑:仅供参考,测试用例中有 4 个非常有用的钩子:
setUpClass
: 发生在 FIRST 测试之前setUp
: 在每次测试之前发生tearDown
:每次测试后都会发生tearDownClass
:在最后一次测试之后发生
您将经常使用该setUp
功能来准备您的数据库,而不是什么(因为它会在每次测试后自动重置)
推荐阅读
- ios - 如何制作这个浮动视图动画
- r - 将最近邻列表转换为r中的二进制邻接矩阵
- javascript - jsPDF:生成的pdf文件中不必要的空格
- json - 如何通过在 sqlite 表中引用自身来更新 json 对象值?
- azure-aks - 如何使用 DNS 在 azure aks 上公开 nginx-ingress
- javascript - 多行显示字符串
- rhel - 使用无根 podman 暴露端口
- python - 如何使用 python 连接到 AMAZON SP_API 端点?
- java - 如何从对流中创建集合映射?
- vb.net - 如何更改 OpenXML word 文档 (vb.net) 中的字体大小?