2012-03-06 87 views
2

通过实例化已知好的或已知错误的字典的表单对象,可以很容易地测试表单清理。可以通过采用这些相同的字典并使用测试客户端来测试关联的视图逻辑。django表单提交的单元测试

但是,我们仍然留下了实际HTML表单元素的基本问题。如果我使用了错误的方法怎么办?或者我的行为有错字?或者我忘记了CSRF_Token?我如何编写实际测试用户可能遇到的行为的单元测试?

我真的需要使用机械化吗?

或者人们使用.get(url)解析表单元素并查看响应的html内容?有没有更干净的方法来做到这一点?

+0

测试复杂行为不是单元测试,而是集成测试。看到django-sane-testing项目,它封装了几乎所有可能的测试用例 – yedpodtrzitko 2012-03-06 22:58:18

+0

好吧,单独测试“页面上的表单,填充了与my_good_post相同的信息,创建一个等于my_good_post的对象”是一个单元,以我的想法。我希望能够在我的单元测试套件中测试这个确切简单的行为。 – jMyles 2012-03-06 23:36:11

回答

1

这不仅与Django HTML测试有关,而且与您需要测试HTML行为的任何其他应用程序有关。

您可以使用库(如requests)使用不同的方法(GET/POST/etc)从浏览器的角度测试表单。

对于更多用户交互测试,您可以使用Selenium但是我个人更喜欢Splinter。在分裂你实例化这个东西称为browser你可以用作一个真正的浏览器。然后在浏览器中可以填充文本框,按钮等,然后测试行为。

这里是分裂的网站的代码片段:

from splinter.browser import Browser 
browser = Browser() 
# Visit URL 
url = "http://www.google.com" 
browser.visit(url) 
browser.fill('q', "#cobrateam") 
# Find and click the 'search' button 
button = browser.find_by_css(".lsb") 
# Interact with elements 
button.click() 
if browser.is_text_present("did not match any documents"): 
    print "nobody likes us =(" 
else: 
    print "we're popular =)" 

在那里的浏览器将打开,将导航到谷歌,填补在Q字段中,单击搜索按钮,然后进行测试的搜索结果。正如您所看到的,该库使用起来非常简单,您可以使用它进行相当复杂的测试。

+0

当然,但这确实是一个集成测试,因为它测试了应用程序的实际实例服务器实例。在使用django测试环境(和测试数据库)时如何做到这一点? – jMyles 2012-03-07 15:57:23

+0

并不真正关注你的问题,但如果你运行django测试服务器,那么你可以使用这些库来测试数据。这有帮助吗? – miki725 2012-03-07 22:34:10