好的,也许我有所遗漏,但我真的不明白Selenium的意义所在。使用代码打开浏览器、使用代码点击按钮、使用代码检查文本有什么意义呢?我阅读了网站上的介绍,理论上自动化单元测试您的Web应用程序是很好的,但最终不是编写所有这些代码比只是点击并直观地验证工作要花费更多的时间吗?
我不明白……
好的,也许我有所遗漏,但我真的不明白Selenium的意义所在。使用代码打开浏览器、使用代码点击按钮、使用代码检查文本有什么意义呢?我阅读了网站上的介绍,理论上自动化单元测试您的Web应用程序是很好的,但最终不是编写所有这些代码比只是点击并直观地验证工作要花费更多的时间吗?
我不明白……
它允许你在“单元”测试框架中编写功能测试(问题主要是后者的命名)。
当你通过浏览器测试应用程序时,通常会测试完全集成的系统。考虑到你已经在提交更改之前测试了它们(冒烟测试),你不希望一遍又一遍地手动测试。
非常好的一点是,你可以自动化你的冒烟测试,并且QA可以增强它们。这非常有效,因为它减少了重复的努力并使整个团队更加密切。
PS:正如你第一次使用任何实践一样,都需要一个学习曲线,因此通常在第一次需要更长时间。我还建议你查看页面对象模式,它有助于保持测试的清洁。
更新1:请注意,测试还将在页面上运行JavaScript,这有助于测试高度动态的页面。还要注意,你可以在不同的浏览器上运行它,因此你可以检查跨浏览器问题(至少在功能方面,因为你仍然需要检查视觉效果)。
还要注意,随着测试覆盖的页面数量增加,你可以快速创建带有完整交互循环的测试。使用页面对象模式,它们看起来像:
LastPage aPage = somePage
.SomeAction()
.AnotherActionWithParams("somevalue")
//... other actions
.AnotherOneThatKeepsYouOnthePage();
// add some asserts using methods that give you info
// on LastPage (or that check the info is there).
// you can of course break the statements to add additional
// asserts on the multi-steps story.
重要的是要理解你需要逐步进行。如果已经有一个构建好的系统,你可以为你正在开发的功能/更改添加测试,逐步增加测试覆盖率。相反,手动测试通常会隐藏你忘记测试的部分,因此如果你对影响每个页面的更改进行了更改,并且你只能检查一个子集(由于时间不允许),你知道你实际测试过哪些页面,QA 可以在这基础上工作(希望通过增加更多的测试)。
这是关于单元测试的一种常见说法:"我需要为测试编写两倍的代码吗?" 这里应用相同的原则。回报是能够更改您的代码并知道您没有破坏任何东西。
因为您可以一遍又一遍地重复相同的测试。
对于任何类型的自动化测试来说,重点都是相同的:编写代码可能比“随便点击并视觉验证事物是否正常工作”需要更多时间,甚至可能多达10倍或50倍。
但是,任何复杂的应用程序最终都必须进行超过50次的测试,而手动测试是一项烦人的任务,很可能会因为压力而被省略或做得不认真,这会导致错误未被发现,直到重要的截止日期前后才被发现,从而导致紧张的通宵编码或甚至直接造成合同惩罚而导致经济损失。
Selenium会记录并重新运行您测试Web应用程序时进行的所有手动点击和输入。一遍又一遍。
随着时间的推移,对自己的研究表明我倾向于做较少的测试并开始跳过一些测试或忘记它们。
Selenium将取代每个测试,运行它,如果它没有返回您所期望的结果,则可以通知您。
录制所有这些测试需要前期时间成本。我建议像单元测试一样使用它--如果您还没有使用,请从代码中最复杂、最敏感或最新的部分开始使用它。
如果您将这些测试保存为JUnit类,您可以在闲暇时重新运行它们,作为自动化构建的一部分,或者使用JMeter进行贫民负载测试。