【问题标题】:Unit tests for django form submissiondjango 表单提交的单元测试
【发布时间】:2012-03-06 22:56:07
【问题描述】:

通过根据已知良好或已知不良字典实例化表单对象来测试表单清理很容易。可以通过获取这些相同的 dicts 并使用测试客户端来测试关联的视图逻辑。

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

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

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

【问题讨论】:

  • 测试复杂行为不是单元测试,而是集成测试。参见 django-sane-testing 项目,它封装了几乎所有可能的测试用例
  • 嗯,“页面上的表单,当填充与 my_good_post 相同的信息时,是否创建一个等于 my_good_post 的对象”的单独测试是一个单元,以我的思维方式。我希望能够在我的单元测试套件中测试这种精确的简单行为。

标签: django forms unit-testing


【解决方案1】:

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

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

对于更多的用户交互测试,您可以使用Selenium,但我个人更喜欢Splinter。在 splinter 中,您实例化了一个名为 browser 的东西,您可以将其用作真正的浏览器。然后在浏览器中,您可以填充文本框、点击按钮等,然后测试行为。

这是来自 splinter 网站的代码 sn-p:

 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 =)" 

在那里,浏览器将打开,将导航到 google,填写 q 字段,单击搜索按钮,然后测试搜索结果。如您所见,该库非常易于使用,您可以使用它进行非常复杂的测试。

【讨论】:

  • 当然,但这确实是一个集成测试,因为它测试的是应用程序的真实实例服务器实例。在使用 django 测试环境(和测试数据库)时如何做到这一点?
  • 不要真正关注您的问题,但如果您运行 django 测试服务器,那么您可以使用这些库来测试数据。这有帮助吗?
【解决方案2】:

这可以通过 Django 1.4 中添加的 LiveServerTestCase 来处理。

【讨论】:

  • 酷。不知道他们添加了它。
猜你喜欢
  • 2014-06-28
  • 2017-04-05
  • 2018-02-09
  • 2017-10-19
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
相关资源
最近更新 更多