gpt4 book ai didi

python - Django 单元测试随机失败

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:52 24 4
gpt4 key购买 nike

我遇到了单元测试随机失败的奇怪问题。我基本上是在测试联合提要

这是我的代码的相关部分:

class ObjectFeedTests(PuppyTestCase):

def test_object_feeds(self):
site = Site.objects.get_or_create(id=site_id)[0]

#Some preprocessing and initialization

with self.settings(ROOT_URLCONF='myapp.urls.something'):

#Some more preprocessing is done here

show = ShowFactory.create(slug=show_slug, title=show_name,
site=site)

for feed_name, entry_points in OBJECT_FEEDS.items():

factory = default_factories[model] #fetches the correct factory

if feed_name == "podcast":
instance = factory.create(show=show, slug="podcasts")
else:
instance = factory.create()

#Creates the instance with the factory correctly

for feed_type in ['rss', 'atom']:

with self.settings(SITE_ID=site.id):
class_url_pattern = feed_class().get_url_pattern()

slug_of_note = '%s/%s' % (show_slug, instance.slug)
presumed_url = '/%s/%s/%s' % (FEED_URL_PREFIXES[feed_type],
feed_name, slug_of_note)

with self.settings(SITE_ID=site.id):
response = self.client.get(presumed_url,
{'password': '****'})

self.assertContains(response, '<?xml',
msg_prefix="%s %s feed raised a 404 \
or wasn't XML (tried %s)" \
% (feed_name, feed_type, presumed_url))

# End of our loop. We'll delete the object
# so that we're not hung up by unique_together constraints
instance.delete()

工厂:

class ShowFactory(factory.Factory):
FACTORY_FOR = Show

title = factory.Sequence(lambda name: 'My Show {0}'.format(name))
slug = factory.Sequence(lambda name: 'my-show-{0}'.format(name))
creator = factory.SubFactory(UserFactory)
last_editor = factory.SubFactory(UserFactory)
site = factory.SubFactory(SiteFactory)
status = STATUS_CHOICES.PUBLISHED

每次我运行测试时,都会创建 3 个工厂,并且测试会随机失败。

如果我在此处的代码中遗漏了任何局部变量声明,请忽略它,因为我已压缩代码以使其尽可能小。

我正在考虑 using this , 但结果还是一样。

如果我可以提供更多信息,请告诉我。

这是失败的堆栈跟踪:

======================================================================
FAIL: test_object_feeds (tests.syndication_tests.ObjectFeedTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests/cases.py", line 44, in run
testMethod()
File "tests/syndication_tests.py", line 370, in test_object_feeds
presumed_url))
File "/usr/local/virtualenvs/lib/python2.6/site-packages/django/test/testcases.py", line 622, in assertContains
" (expected %d)" % (response.status_code, status_code))
AssertionError: 404 != 200 : people rss feed raised a 404 or wasn't XML (tried /feeds/show/test-show-0): Couldn't retrieve content: Response code was 404 (expected 200)

----------------------------------------------------------------------

Ran 5 tests in 10.613s

FAILED (failures=1)
Destroying test database for alias 'default'...

下次运行时,

======================================================================
FAIL: test_object_feeds (tests.syndication_tests.ObjectFeedTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests/cases.py", line 44, in run
testMethod()
File "tests/syndication_tests.py", line 370, in test_object_feeds
presumed_url))
File "/usr/local/virtualenvs/lib/python2.6/site-packages/django/test/testcases.py", line 622, in assertContains
" (expected %d)" % (response.status_code, status_code))
AssertionError: 404 != 200 : channels rss feed raised a 404 or wasn't XML (tried /feeds/show/test-show-1): Couldn't retrieve content: Response code was 404 (expected 200)

----------------------------------------------------------------------
Ran 5 tests in 3.483s

FAILED (failures=1)
Destroying test database for alias 'default'...

最佳答案

请原谅我说的很明显。随机失败的最常见原因是您的一项测试没有正确拆除。这是随机发生的,因为测试执行的顺序是不确定的。尝试单独运行失败的测试,而不是运行整个测试套件。如果每次都通过,那肯定是其他一些测试导致的。

另一种可能性是,根据您提供的运行测试的参数,您可能正在重用旧的测试夹具

关于python - Django 单元测试随机失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17347710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com