【问题标题】:Do selenium tests in django applications increase coverage?django 应用程序中的硒测试是否增加了覆盖率?
【发布时间】:2014-07-15 19:41:35
【问题描述】:

那么,是吗?就是那个问题。使用 selenium 完成集成测试后,我的覆盖率报告没有增加。

【问题讨论】:

  • 如果他们这样做,我会感到惊讶。如果对 Web 服务器执行请求的代码能够推断出它正在执行的服务器上代码的哪些部分,那将是一些非常奇特的步法。
  • 但这就是我的想法:当您在 webapp 中遇到错误时,django 能够为您提供回溯,甚至是出现错误的代码行,所以在某些时候它知道它每次都在执行哪段代码!
  • Django 在崩溃时会为您提供堆栈跟踪,但它会在 HTTP 消息中将其返回给客户端。就 Selenium 或任何其他 HTTP/TCP/etc 驱动的框架而言,您的应用程序可以用 Cobol 编写。此外,一旦你谈论在网络堆栈上运行的东西,来自代码外部的错误呢?例如,coverage 是否应该跟踪您正在使用的 Apache 配置量?
  • 如何获得覆盖以衡量您的 selenium 测试完全取决于您在 selenium 测试期间如何运行 Python 代码。如果可以在coverage.py下运行,那么就会被测量。

标签: python django selenium integration-testing code-coverage


【解决方案1】:

好吧,如果它们执行其他测试未执行的代码,它们会增加覆盖率。但是,除非您找到一种方法来捕获在 selenium 测试期间执行了哪些行,并将其添加到有关覆盖率的数据中,否则这不会显示在您的报告中。

【讨论】:

  • 我有一个 LiveServerTestCase,它在测试中使用了 selenium web 驱动程序。当我执行“./manage.py test”时,它会运行我的 selenium 测试,所以如果我执行“coverage run manage.py test”,它应该通过 selenium 测试获得覆盖的代码,对吧?应该这样做吗?
  • @nachoalvarez 不。没有人认为“应该”会起作用。大多数测试运行程序中的覆盖率测量收集有关在测试运行程序中运行的代码的数据。您必须执行一些操作,例如通过启用覆盖计数的测试用例运行您的服务器。
【解决方案2】:

是的,他们增加了它。

但是,您必须正确编写该过程的脚本。

我运行相关测试的脚本如下:

#!/bin/bash

coverage run -p ./manage.py test
coverage run -p ./manage.py test path/to/functional/tests
coverage combine
coverage report
# coverage html

关键是-p 参数,它为每个过程创建不同的日志,最后get combined 使用combine 命令。

按照TDD with Python 这本书,我对 Django 开发服务器运行 selenium 测试,覆盖结果考虑了所有已执行的测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    相关资源
    最近更新 更多