【51CTO.com快译】目前,广受开发界欢迎的Selenium,不但是针对Web应用的自动化开源框架,而且可以处理诸如网站监控等各种管理任务。同时,作为科技行业内,最为流行的开源式自动化测试工具,Selenium为端到端测试提供了强大的、基于浏览器的自动化测试服务。
Selenium WebDriver从诞生之日起也备受欢迎。它既可以直接运行在浏览器上,又能够使用浏览器的内置功能,去触发那些由测试人员编写的自动化测试。如下图所示,Selenium WebDriver 架构由Selenium客户端库、JSON Wire协议、浏览器驱动、以及浏览器,四个主要模块构建而成。
凭借着多年使用Selenium框架的经验,我将在下面和您讨论Selenium WebDriver API是如何使用浏览器驱动,与真实浏览器相交互,以及在Selenium自动化测试中的十种优秀实践,以方便您开发设计出优秀的、且具有可扩展性的测试套件。
自动化测试的优秀实践
1. 设置命名约定。为已创建的每种类型文件建立标准化的命名约定,将有助于简化开发和Selenium的测试过程。例如:根据项目的某个阶段性需求,贵团队可能需要临时增加某个成员临时编写的测试代码。不过在几个月后,当您的团队重新访问该测试时,您可能已记不得、或无法弄清当初的意图与目的,而只能被动地留存到开发完整的实施阶段。因此,我们需要通过以一种“不言自明(self-explanatory)”的方式,去命名各种测试用例,以方便您和您的团队快速地了解其测试特性与意图,避免花费时间进行不必要的来回滚屏,或反复浏览与比对。此外,如果某些测试在执行阶段出现了失败,那么我们只需快速地查看测试名称,便可以轻松地定位是哪些功能出现了问题。
2. 避免阻止休眠的调用。作为显式等待的一个例子,休眠模式虽然并非Selenium WebDriver的特性,但是大多数编程语言的常见功能。当您的程序正在运行时,Thread.Sleep()通常会在某个线程中,按照设定的方式,执行各种自动化检查。一旦满足调用的条件,它就会指示应用程序在一段时间内,除了休眠,不做任何事。
不过,Selenium提供了隐式(Implicit)和显式(Explicit)等待两种方式,能够比休眠更加有效地处理各种延迟。其中,隐式等待会通知目标浏览器,为页面上现存的所有Web元素,等待指定的持续时间。如果某个元素的可用性快于隐式延迟时间,那么程序将会顺利地移至下一行代码执行。可见,我们需要避免阻止休眠的调用。让Selenium自行使用隐式和显式等待来进行处理。请通过链接-- https://itnext.io/how-to-using-implicit-and-explicit-waits-in-selenium-d1ba53de5e15,了解更多有关Selenium隐式和显式等待的信息。
3. 选择最适合的Web定位器。我们在执行Selenium自动化测试时,可能碰到的一项挑战是,如果那些与测试代码中使用到的定位器相关的具体实现发生了变化,那么我们必须对自动化测试进行相应的更改。其中包括:ID、名称、链接文本、XPath、CSS选择器、DOM定位器等(请参见下表)。
可见,对于如此繁多的Web定位器,我们有必要选择合适的定位器,以尽量减少由于用户界面的变化,而对测试引发的影响。其中,ID、Class和Name不仅易于使用,而且相对其他Web定位器更加稳定。请通过链接--https://itnext.io/the-concept-of-the-right-locator-for-selenium-webdriver-automated-scripts-5b8c6bf528e5,了解更多有关Selenium WebDriver自动化脚本如何选择恰当的定位器的概念。
4. 实施日志记录和报告。如果在某个广泛的测试套件中,有个特定的测试失败了,那么我们可能很难准确地定位失败的测试用例。对此,测试控制台(或后台)日志记录,将有助于我们更好地理解代码,在测试代码中找到适当的位置,进而及时抑制问题。
在流行编程语言中,我们经常用到的日志级别包括:调试性、通知性、警告性、错误和重要的日志等。不过,在测试的过程中,添加不必要的日志,也可能会拖慢测试的整体进程。因此,我建议您仅在有助于跟踪那些失败原因的场景中,添加具有相应错误级别的日志。请通过链接--https://itnext.io/implement-logging-and-reporting-best-practices-2cc4b58de9d3,了解更多有关实施日志记录和报告的优秀实践。
5. 使用各种设计模式和原则。面对设计和开发自动化过程中的潜在问题,开发人员往往会事先制定和采用各种模式。对此,我们可以回溯到《设计模式(Design Patterns)》一书。该书提供了各种面向对象编程的适用模式。您几乎能够为每一种问题找到对应的解决方案。当然,此类设计模式的概念也在不断迭代和发展。新的工厂(Factory)和装饰(Decorator)模式也被加入了进去。请通过链接--https://antony-s-smirnov.medium.com/all-about-design-patterns-in-automation-testing-7276ad051db8,了解更多有关自动化测试中的设计模式。
6. 集中式的文件夹结构。在Selenium团队的中央存储库中,开发和Selenium测试人员,更愿意使用约定好的命名规则和定义好的文件夹结构。而没人愿意将时间浪费在,错误文件名和代码问题所产生的负面影响上。例如:在处理那些使用Selenium框架的测试时,我们必须关注测试代码的可维护性。通常,标准的项目是由Src和Test文件夹所组成。其中,Src文件夹可以包含各种子目录,例如:页面对象、帮助函数、以及那些包含在测试场景中的Web定位器文件。而Test文件夹则包含了各种实际的测试实现。
7. 数据驱动测试。被开发出的Web应用也需要针对不同的浏览器、设备、以及操作系统的组合(即多种数据集)进行测试。通过Selenium,您可以使用数据驱动框架、关键字驱动框架、以及两者的混合。由于被输入的测试数据,往往取自外部Excel或CSV等文件,因此数据驱动框架会在如何将数据集与实际测试代码分离的方面,十分有效。在测试自动化脚本中,对测试值进行硬编码,并非一种可扩展的解决方案。它往往会导致不必要的软件臃肿、以及重复性的测试代码。因此,更好的方案是,使用通过Selenium实现数据驱动的参数化测试。参数化将有助于针对不同的输入组合(或数据集),去执行各种测试用例。例如:使用TestNG进行参数化、JUnit参数化、以及开展数据驱动的测试等。请通过链接--https://antony-s-smirnov.medium.com/how-to-use-the-data-provider-pattern-in-the-project-ea12430d9275,了解更多有关如何在项目中使用数据提供者的模式。
8. 在适当的场景中使用断言和验证。
9. 避免代码的重复,或包装Selenium的各种调用。
10. 在Selenium中,使用针对JUnit和TestNG编写的并行测试案例。
原文标题:The best practices test automation withSeleniumWebDriver ,作者: Anton Smirnov
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】