如何测试(使用unittest)Django视图的HTML输出?

时间:2011-01-28 16:17:23

标签: python django unit-testing

我正在为我的Django应用程序编写单元测试。但是,我不知道如何测试视图的HTML输出。

有时我可能想要检查某个特定元素是否包含某个值,或者显示这些元素中有多少个,或类似的东西。我该怎么做这样的测试?

我想要一个使用unittest和django自己的django.test的解决方案。

我知道我可以使用SeleniumPyccuracy(使用Selenium),但由于启动浏览器的巨大开销,Selenium测试非常慢。此外,单元测试与django-coverage包一起开箱即用。

4 个答案:

答案 0 :(得分:9)

我总是找到BeautifulSoup的组合,以及来自TestCase's available assertions的assertContains和assertFormError来完成这个技巧。

答案 1 :(得分:9)

这些其他答案现在已经过时了。断言assertHTMLEqual(自Django 1.4开始)负责忽略空格,忽略属性的顺序。

答案 2 :(得分:6)

Django的测试框架非常适用于此。

  1. 检查状态代码和内容。 http://docs.djangoproject.com/en/1.2/topics/testing/#django.test.TestCase.assertContains

  2. 检查模板。 http://docs.djangoproject.com/en/1.2/topics/testing/#django.test.TestCase.assertTemplateUsed

  3. 此外,在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。

https://django-with-asserts.readthedocs.org/en/latest/