Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何重写django测试用例以避免不可预知的偶然失败_Python_Django_Unit Testing_Testing - Fatal编程技术网

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,或者您可以对后端返回的结果进行排序。我选择了第二个更有效的建议。你介意写下答案吗?只要允许,我会尽快用绿色勾选它