Python 两个测试单独工作,但不能同时工作

Python 两个测试单独工作,但不能同时工作,python,django,django-tests,Python,Django,Django Tests,我在不同的类中有两个测试,测试相似的行为: 使用Client()在书签中添加产品 使用ORM在书签中添加产品 就个人而言,它正在发挥作用: ./manage.py test compare.test.CompareBookmarkTests 或 它们在一起发射时失败: ./manage.py test 我试图: 使用setUp和tearDown方法 类和方法的变更顺序 在我尝试诊断问题时使用--reverse 使用测试数据库在交互式django shell中启动代码行(它正在工作) 进行一

我在不同的类中有两个测试,测试相似的行为:

  • 使用
    Client()
    在书签中添加产品
  • 使用ORM在书签中添加产品
  • 就个人而言,它正在发挥作用:

    ./manage.py test compare.test.CompareBookmarkTests
    

    它们在一起发射时失败:

    ./manage.py test
    
    我试图:

    • 使用
      setUp
      tearDown
      方法
    • 类和方法的变更顺序
    • 在我尝试诊断问题时使用--reverse
    • 使用测试数据库在交互式django shell中启动代码行(它正在工作)
    • 进行一些打印调试,从测试数据库正确调用我的对象
    • 将这两个类合并为一个类
    目前,我还没有找到有关stackoverflow的相关答案。django文档中都没有

    
    从django.contrib.auth.models导入用户
    从django.test导入TestCase
    从。模型导入书签、分类、产品
    类CompareBookmarkTests(TestCase):
    def设置(自):
    Categorie.objects.create(id\u Categorie='someid',name='somename')
    p=Categorie.objects.get(pk='someid')
    p、 产品集。创建(id\u product='1',product\u name='橙色',category='someid')
    User.objects.create\u User('john@sign.in', 'john@sign.in","史密斯")
    def拆卸(自):
    User.objects.all().delete()
    Categorie.objects.all().delete()
    Bookmark.objects.all().delete()
    def测试_重定向_记录(自):
    self.client.login(用户名=)john@sign.in“,密码=”史密斯“)
    #正在书签中添加id为1的产品
    response=self.client.get(“/compare/1/bookmark/”)
    #获取添加的产品表单书签
    bookmark=bookmark.objects.get(pk=1)
    self.assertEqual(str(bookmark),'bookmark对象(1)'
    self.assertEqual(response.status_代码,302)
    类CompareAccountTests(TestCase):
    def设置/拆卸:[与上一类相同]
    def测试获取产品(自我):
    self.client.login(用户名=)john@sign.in“,密码=”史密斯“)
    user=user.objects.get(pk=1)
    product=product.objects.get(pk='1')
    #正在书签中添加id为1的产品
    add\u bookmark=bookmark.objects.create(id\u result=product,user=user)
    bookmark=bookmark.objects.get(pk=1)
    response=self.client.get(“/compare/account/”)
    self.assertEqual(str(bookmark),'bookmark对象(1)'
    self.assertEqual(response.status_代码,200)
    
    我希望两个测试在一起启动时都能成功,但我得到:

    compare.models.Bookmark.DoesNotExist:书签匹配查询不存在。

    使用--reverse:

    django.contrib.auth.models.User.DoesNotExist


    这可能是初学者的错误,但我看不出来,谢谢你的帮助

    我已经找到了可能导致问题的原因:

    我使用了
    psql
    ,找到了未删除的测试数据库:

    test_myprojet_1
    test_myprojet_2
    test_myprojet_3
    test_myprojet_4
    ...and so on...
    
    除了一个非常奇怪的问题:

    test_test_test_test_test_test_test_test_test_test_test_myprojec[truncated name]
    
    我在
    psql
    中使用了:

    删除数据库[名称];
    
    现在,我的测试按预期进行


    多亏了,您的建议让我走上了正轨。

    我发现了可能导致问题的原因:

    我使用了
    psql
    ,找到了未删除的测试数据库:

    test_myprojet_1
    test_myprojet_2
    test_myprojet_3
    test_myprojet_4
    ...and so on...
    
    除了一个非常奇怪的问题:

    test_test_test_test_test_test_test_test_test_test_test_myprojec[truncated name]
    
    我在
    psql
    中使用了:

    删除数据库[名称];
    
    现在,我的测试按预期进行


    多亏了,您的建议让我走上了正轨。

    在测试中依赖具体的ID不是一个好主意,因为测试后可能不会清除DB序列,您将创建一个具有
    pk=2
    的对象。尝试在不使用具体pk值的情况下重写测试。谢谢您的回答。我不确定是否完全理解您的建议:例如,我是否应该通过另一个字段而不是pk值获取对象?如果是这样的话,我尝试了它,但没有成功。在我的实验中,我还试图找到两次测试之间可能产生的任何重复。情况似乎并非如此。不,使用pk,但不要期望pk总是
    1
    2
    或其他。如果您需要访问在
    设置
    中创建的对象的pk,您可以将对象存储到
    self
    中,然后在测试用例中使用它。在测试中依赖具体ID不是一个好主意,因为测试后可能不会清除DB序列,并且您将创建一个具有
    pk=2
    的对象对象。尝试在不使用具体pk值的情况下重写测试。谢谢您的回答。我不确定是否完全理解您的建议:例如,我是否应该通过另一个字段而不是pk值获取对象?如果是这样的话,我尝试了它,但没有成功。在我的实验中,我还试图找到两次测试之间可能产生的任何重复。情况似乎并非如此。不,使用pk,但不要期望pk总是
    1
    2
    或其他。如果您需要访问在
    setUp
    中创建的对象的pk,您可以将对象存储到
    self
    中,然后在测试用例中使用它。