python – Django Unittests随机失败
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Django Unittests随机失败,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3953字,纯文字阅读大概需要6分钟。
内容图文
![python – Django Unittests随机失败](/upload/InfoBanner/zyjiaocheng/778/0924a37827be482b85f8ea6ff911c63a.jpg)
我遇到了随机失败的单元测试这个奇怪的问题.我基本上测试Syndication Feeds
这是我的代码的相关部分:
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 Unittests随机失败全部内容,希望文章能够帮你解决python – Django Unittests随机失败所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。