Selenium:是不是有任何可以与 Selenium Server/RC 集成的 JS (JavaScript) 代码覆盖工具
Posted
技术标签:
【中文标题】Selenium:是不是有任何可以与 Selenium Server/RC 集成的 JS (JavaScript) 代码覆盖工具【英文标题】:Selenium: Is there any JS (JavaScript) code coverage tool which we can integrate with Selenium Server/RCSelenium:是否有任何可以与 Selenium Server/RC 集成的 JS (JavaScript) 代码覆盖工具 【发布时间】:2012-03-18 17:34:55 【问题描述】:Selenium:是否有任何可以与 Selenium Server/RC 集成的 JS (javascript) 代码覆盖工具
嗨,
我想通过我的 Selenium 测试套件完成 JS 代码覆盖
是否有任何代码覆盖工具可以与我现有的 selenium rc 框架集成??
【问题讨论】:
【参考方案1】:我不知道你想要达到什么目的,但是:
Selenium 正在测试最终输出,如页面本身所示。所以无论是 php、html、JSP、ASP 还是 .NET——Selenium 旨在模仿最终用户并单击最终应用程序——最终的 HTML 代码由引擎盖下的任何东西生成。
/p>
Selenium 对代码覆盖率测试也不是那么好 - 一段代码可以在许多页面上 - 所以使用 selenium 的更好方法是进行“用户”覆盖 - 尝试覆盖活人可能做的所有可能的行为与您的页面
【讨论】:
我的错误是我在谈论 JS (Javascript) 覆盖率。我想知道我的 selenium 测试用例涵盖了多少 JS。它可以帮助我验证我是否涵盖了大多数情况,还可以帮助我报告是否有未使用的 JS 文件。可能存在一个或两个 JS 文件从未使用过的情况,因此使用 selenium 的代码覆盖率我可以报告这些 JS 文件没有被使用并且可能是垃圾。 我不知道这种可能性 - 当然,Selenium 点击和用户交互会触发一些 javascript 操作。您可以监控这些,但可能没有工具可以告诉您,例如“accounts.js 从未使用过” 是的,可能没有工具可以告诉我哪些 JS 从未使用过,但我认为有像声纳这样的工具可以告诉我使用了哪些 JS 以及使用百分比,因此我也可以确定哪个从未使用过JS。我只是想有任何代码覆盖工具可以很容易地与 selenium 集成【参考方案2】:不知道 Selenium 的工具,但JsTestDriver 的设计与 Selenium RC 非常相似(可以从命令行启动测试,并且它们在无头驱动浏览器的服务器上运行)并提供代码覆盖率信息。
IntelliJ 与 JsTestDriver 集成并提供visual display of coverage information。
【讨论】:
这个项目在 8 年前就被放弃了(它是谷歌——你真的认为他们会坚持下去吗?)【参考方案3】:理论上,您可以使用任何检测 JavaScript 代码的覆盖率工具来收集覆盖率数据。
例如,您可以在代理模式(用于实时检测)或静态检测中使用 JSCoverage 来从检测代码运行 Selenium 测试。
一个技术障碍可能是设计一种方法来跨多个页面累积覆盖率数据。您选择的覆盖工具可能已经支持从多个页面运行中累积数据。如果没有,您可能必须自己处理那部分,但这可能不是一件小事。
【讨论】:
【参考方案4】:没有特定的工具可以与 Selenium 集成来进行 JS 覆盖。但是有很多工具可以在每个页面上测试 JS,这些工具可以判断在您的网页上执行的 JS 是否有任何错误。这可能不是理想的解决方案,但在每个页面上,您都可以测量到 JS 在您的被测网页上正确执行的点。有两种解决方案:
1.) JSErrorCollector API: 它将直接与 Selenium 集成,并让您知道页面是否有任何错误。可以在以下位置找到:http://mguillem.wordpress.com/2011/10/11/webdriver-capture-js-errors-while-running-tests/
2.) 成熟的 JS 覆盖工具:这里有一个很好的工具列表,它们基本上可以帮助您在网页上覆盖 JS。可以在:JavaScript unit test tools for TDD
【讨论】:
【参考方案5】:看看https://github.com/yui/yuitest/wiki/Code-Coverage
我之前已将此工具集成到我的 Selenium 测试中。在页面更改之前,您需要做一些工作来收集覆盖率信息(在任何情况下,js 都会触发页面重新加载、链接等...)
设置完所有内容后,它将完全覆盖在 Selenium 加载和测试您的网站页面时执行的所有 js。
PS : 即使它是专门为 YUI 测试而改编的,你也可以将它与 selenium 一起使用。
【讨论】:
您能否详细介绍一下您在 selenium 运行时如何记录 js 覆盖率? 在每次测试结束前,要求 selenium 在当前页面运行 JS:YUITest.TestRunner.getCoverage(YUITest.CoverageFormat.JSON)。这将返回 selenium 可以存储在某处的覆盖率数据。然后使用 yui 报告 jar,您可以为所有测试的所有数据生成覆盖率报告。为了完整和准确的覆盖,您必须处理页面更改(例如,由页面上的事件触发)。在您的 js 上执行某种代码检测,以在每次页面更改之前调用 yui 覆盖函数。【参考方案6】:我找到了满足我需求的解决方案,有多种工具可用,但我想要一个可以轻松与我现有的自动化集成的工具
工具是 JSCover http://tntim96.github.io/JSCover/
只需运行服务器
-
运行服务器
java -cp JSCover-all.jar jscover.server.SimpleWebServer 。 8080
运行代理服务器 java -jar target/dist/JSCover-all.jar -ws --proxy --port=3128 --report-dir=target
在您的 Webdriver 中为指定的端口添加代理,在我的情况下为 3128
执行测试后生成报告使用
((JavascriptExecutor) driver).executeScript("jscoverage_report();");
您可以在退出 WebDriver 或测试用例的位置添加此行
【讨论】:
以上是关于Selenium:是不是有任何可以与 Selenium Server/RC 集成的 JS (JavaScript) 代码覆盖工具的主要内容,如果未能解决你的问题,请参考以下文章