我正在为我的Django应用程序编写单元测试。但是,我不知道如何测试视图的HTML输出。
有时我可能想要检查某个特定元素是否包含某个值,或者显示这些元素中有多少个,或类似的东西。我该怎么做这样的测试?
我想要一个使用unittest
和django自己的django.test
的解决方案。
我知道我可以使用Selenium或Pyccuracy(使用Selenium),但由于启动浏览器的巨大开销,Selenium测试非常慢。此外,单元测试与django-coverage包一起开箱即用。
答案 0 :(得分:9)
我总是找到BeautifulSoup的组合,以及来自TestCase's available assertions的assertContains和assertFormError来完成这个技巧。
答案 1 :(得分:9)
这些其他答案现在已经过时了。断言assertHTMLEqual
(自Django 1.4开始)负责忽略空格,忽略属性的顺序。
答案 2 :(得分:6)
Django的测试框架非常适用于此。
检查状态代码和内容。 http://docs.djangoproject.com/en/1.2/topics/testing/#django.test.TestCase.assertContains
检查模板。 http://docs.djangoproject.com/en/1.2/topics/testing/#django.test.TestCase.assertTemplateUsed
此外,在HTML中使用id="something"
标记有助于在单元测试时更轻松地查找内容。我们有这样的测试。
def should_find_something( self ):
response= self.client.get( "/path/to/resource/pk/" )
self.assertContains( response, '<td id="pk">the pk string</td>', status_code=200 )
self.assertTemplateUsed( response, 'appropriate_page.html' )
很好地工作。
答案 3 :(得分:1)
使用lxml查看带有断言的Django。