Python 如何重写django测试用例以避免不可预知的偶然失败
我有一个完全像这样编写的测试用例Python 如何重写django测试用例以避免不可预知的偶然失败,python,django,unit-testing,testing,Python,Django,Unit Testing,Testing,我有一个完全像这样编写的测试用例 def test_material_search_name(self): """ Tests for `LIKE` condition in searches. For both name and serial number. """ material_one = MaterialFactory(name="Eraenys Velinarys", serial_number="SB2341") material_t
def test_material_search_name(self):
"""
Tests for `LIKE` condition in searches.
For both name and serial number.
"""
material_one = MaterialFactory(name="Eraenys Velinarys", serial_number="SB2341")
material_two = MaterialFactory(name="Nelaerla Velnaris", serial_number="TB7892")
response = self.client.get(reverse('material-search'), {'q': 'vel'})
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['count'], 2)
self.assertEqual(response.data['results'][0]['name'], material_one.name)
self.assertEqual(response.data['results'][1]['name'], material_two.name)
我的错误消息是:
line 97, in test_material_search_name
self.assertEqual(response.data['results'][0]['name'], material_one.name)
AssertionError: 'Nelaerla Velnaris' != 'Eraenys Velinarys'
- Nelaerla Velnaris
+ Eraenys Velinarys
然后,当我在不更改任何代码的情况下重新运行时,它就成功了
这种错误偶尔发生,但并不总是发生
我想知道是否有更好的方法来实现测试用例的目标,而不会偶尔出现这种奇怪的失败
此错误发生的频率约为每运行测试50次1次
我使用的典型测试命令:
python manage.py test app_name.tests --keepdb
以下是一些选项: 在执行assertEquals之前,按名称对返回的结果进行排序 首先从结果中收集所有名称,然后对每个名称执行self.assertInname,names 对后端返回的结果进行排序
您可以在执行assertEquals之前按名称对返回的结果进行排序,或者您可以先从结果中收集所有名称,然后对每个名称执行self.assertenName、names,或者您可以对后端返回的结果进行排序。我选择了第二个更有效的建议。你介意写下答案吗?只要允许,我会尽快用绿色勾选它