有关最佳实践或实践的问题;)
我目前正在使用Java中的Selenium开发测试自动化系统。它应该用于Webapp的端到端验收测试。测试用例用Gherkin语言编写,并由BDD框架Cucumber(Cucumber-JVM)执行。低级功能使用Selenium / WebDriver与AUT和浏览器进行交互。Selenium代码是使用PageObject模式构造的,该模式将WebDriver的用法抽象化了。黄瓜步骤定义仅调用PageObjects提供的方法。
随着项目的进行和变得越来越复杂,我想开始编写单元测试,以确保验收测试以及围绕这些功能的实用程序能够执行应做的事情:)
现在问题来了:
编写单元测试以测试自动化测试项目是否可行?
主要的问题是,在我意识到使用TestNG进行单元测试的第一种方法期间,我的单元测试最终完成的工作几乎与验收测试已经做的一样。这会适得其反,因为单元测试非常慢并且具有很大的依赖性。
或者只是测试实用程序类,而在这种情况下保留Selenium代码。IE。仅测试可以测试的内容,而无需调用Selenium WebDriver并与AUT交互?
请注意,只是为了确保我没有被误解。我问的是在接受测试代码和所有辅助代码上运行单元测试。与使用JUnit或TestNG之类的单元测试框架运行Selenium测试用例无关。
任何帮助和/或想法将不胜感激,因为我不确定如何解决这一问题。那就是说为测试编写测试是完全明智的;)
我敢肯定有人会认为我的回应“被反对”并投反对票,但是我认为
是的,如果您具有要用于验收测试的测试框架,则该框架本身需要进行测试。
根据我的经验,该值在两个方面:
能够自信地更改您的框架。当您创建某个功能时,您对它了解很多,例如,它支持哪些用例,设计用途是什么,等等。但是其他人(甚至一年以后的您)可能不具备相同的知识水平,即使有文档。因此,或者,每当有人需要对行为进行一些轻微的修改时(因为他们不确定更改现有功能),就会弹出新功能,或者有人可能破坏整个验收测试。
最好是那些真正的单元测试,能够完全独立于任何东西运行(使用模拟,预定义的静态测试数据等)。
保护自己免受Selenium本身(或其他重要的第三方库)中的意外更改/错误影响。当您将Selenium更新到下一个版本时(通常需要每3-6个月完成一次),总是有机会他们更改了您所依赖(甚至不知道)的某些默认值,或者破坏了某些内容,或突然某物返回了一个不同的异常,或者在以前执行的操作中未引发异常,依此类推。当然,无需费心和重复进行Selenium自己的单元测试,但是当涉及到一些琐碎的事情,或者依赖于文档贫乏的某些功能时,这些测试可能会大有帮助。
这些是集成测试。理想情况下,它们应针对仅测试的Web应用程序(而不是真正的应用程序)运行,该应用程序以方便测试的方式复制专门测试的行为。
当然,一些妥协也是可能的。例如,有一小部分验收测试用作单元/集成测试(它们先运行,而其他测试仅在通过时运行)。从这些开始可能会更便宜,并且当您调试/修复测试框架中的问题时,可以慢慢迁移到适当的单元/集成测试。
另一个问题是如何将测试框架的测试与产品的实际验收测试分开。对我有用的是在两个不同的项目中保留测试框架和验收测试。这样,我可以更改框架,并在需要时多次构建它(还包括运行单元和集成测试)。当所有单元测试和集成测试通过时,我可以更新实际验收测试所使用的版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句