好吧,也许我错过了什么,但我真的没有看到Selenium的观点。使用代码打开浏览器,使用代码单击按钮以及使用代码检查文本有什么意义?我阅读了网站,我看到理论上如何自动对您的Web应用程序进行单元测试,但最终不是花费更多的时间来编写所有这些代码而不是仅仅点击并直观地验证工作?
我不明白......
答案 0 :(得分:44)
它允许您在“单元”测试框架中编写功能测试(问题是后者的命名)。
当您通过浏览器测试应用程序时,通常会测试完全集成的系统。考虑到你必须在提交之前测试你的更改(冒烟测试),你不想一遍又一遍地手动测试它。
非常好的一点是,你可以自动化你的烟雾测试,QA可以增加这些。非常有效,因为它减少了重复工作并使整个团队更加接近。
Ps作为您第一次使用学习曲线时所使用的任何练习,因此通常第一次需要更长的时间。我还建议您查看Page Object模式,它有助于保持测试的清洁。
更新1:请注意,测试还会在页面上运行javascript,这有助于测试高度动态的网页。另请注意,您可以使用不同的浏览器运行它,因此您可以检查跨浏览器问题(至少在功能方面,因为您仍然需要检查可视化)。
另请注意,随着测试所涵盖的页面数量的增加,您可以快速创建具有完整交互周期的测试。使用Page Object模式,它们看起来像:
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可以从中工作那里(希望通过添加更多的测试)。
答案 1 :(得分:21)
这是关于单元测试的常见问题。 “我需要编写两倍的代码用于测试?”同样的原则适用于此。收益是能够改变你的代码并知道你没有破坏任何东西。
答案 2 :(得分:15)
因为您可以一遍又一遍地重复 SAME 测试。
答案 3 :(得分:9)
如果您的应用程序甚至超过50页,并且您需要经常构建并针对X个主要浏览器进行测试,那么这很有意义。
答案 4 :(得分:5)
想象一下,你有50个页面,每个页面都有10个链接,还有一些有多阶段表单要求你浏览表格,输入大约100种不同的信息来验证它们是否能正常使用所有信用卡号码,所有国家的所有地址等。
手动测试几乎是不可能的。它变得非常容易出现人为错误,你无法保证测试是正确的,更不用说测试证明测试的东西了。
此外,如果您遵循现代开发模式,许多开发人员都以断开连接的分布式方式在同一站点上工作(例如,一些人在飞机上从他们的笔记本电脑上工作),那么人类测试人员甚至无法访问它,更不用说每次开发人员尝试新的东西时都要耐心重新测试。
在任何体面的网站上,测试都必须自动化。
答案 5 :(得分:3)
这一点与任何类型的自动化测试相同:编写代码可能比“只需点击并直观地验证工作”需要更多时间,可能是10甚至50倍。
但是任何重要的应用程序最终都要进行50次以上的测试,手动测试是一项烦人的苦差事,很可能会在压力下被忽略或粗暴地完成,这会导致bug一直未被发现直到bfore(或之后)重要的截止日期,导致紧张的通宵编码会议,甚至因合同处罚而造成的直接货币损失。
答案 6 :(得分:2)
Selenium(以及类似工具,如Watir)允许您以计算机擅长的方式对Web应用程序的用户界面运行测试:隔夜数千次,或者在每次源签入后几秒钟内。 (请注意,还有很多其他的UI测试文件,人类更擅长,例如注意到与测试没有直接关系的一些奇怪的东西是不对的。)
通过查看生成的HTML而不是启动浏览器来呈现它,还有其他方法可以涉及整个应用程序堆栈,例如Webrat和Mechanize。其中大多数都没有办法与JavaScript大量的UI进行交互; Selenium在这里有所涉及。
答案 7 :(得分:2)
Selenium将记录并重新运行您为测试Web应用程序所做的所有手动点击和输入。一遍又一遍。
随着时间的推移,我自己的研究表明,我倾向于做更少的测试并开始跳过一些,或忘记它们。
Selenium将接受每个测试,运行它,如果它没有返回你期望的,它可以让你知道。
记录所有这些测试需要花费大量时间。我会建议它像单元测试一样 - 如果你还没有它,请开始使用代码中最复杂,最敏感或最新的部分。
答案 8 :(得分:1)
如果您将这些测试保存为JUnit类,您可以在闲暇时重新运行它们,作为自动构建的一部分,或者使用JMeter进行穷人的负载测试。
答案 9 :(得分:1)
在过去的工作中,我们曾经对我们的网络应用进行单元测试。如果web-app改变了它的外观,则不需要重新编写测试。记录和重播类型测试都需要重新完成。
答案 10 :(得分:1)
你为什么需要Selenium?因为测试者是人类。他们每天都回家,不能总是周末工作,吃病,去公共假期,不时去度假,无聊做重复的任务,不能总是依赖他们在你需要的时候到处。
我不是说你应该摆脱测试人员,但是自动化的UI测试工具可以补充系统测试人员。
答案 11 :(得分:0)
重点是能够在手动和耗时的测试之前自动化。是的,编写测试需要时间,但一旦编写,它们就可以按照团队的意愿运行。每次运行时,它们都会验证Web应用程序的行为是否一致。 Selenium不是一个完美的产品,但它非常擅长自动化与浏览器的真实用户交互。
答案 12 :(得分:0)
如果你不喜欢Selenium方法,你可以尝试HtmlUnit,我发现它更有用,更容易集成到现有的单元测试中。
答案 13 :(得分:0)
对于具有丰富Web界面的应用程序(如许多GWT项目),Selenium / Windmill / WebDriver / etc是创建验收测试的方法。在GWT / GXT的情况下,最终的用户界面代码是JavaScript,因此使用正常的junit测试用例创建验收测试基本上是不可能的。使用Selenium,您可以创建匹配真实用户操作和预期结果的测试场景。
根据我对Selenium的经验,它可以揭示应用程序逻辑和用户界面中的错误(如果您的测试用例写得很好)。处理AJAX前端需要一些额外的努力,但它仍然可行。
答案 14 :(得分:0)
我用它来测试多页面表单,因为这会减轻一遍又一遍地输入相同内容的负担。并且能够检查某些元素是否存在是很好的。再次,使用表格作为示例,您的最终硒测试可以检查在订购过程结束时是否出现类似“感谢罗杰斯先生订购...”的内容。