Selenium测试自动化的27个最佳实践

近年来,您几乎看不到没有过渡到自动化测试的组织。 毕竟,对于新功能的快速反馈,谁想错过Selenium测试。 即便如此,仍有少数测试人员抱怨自动化测试不稳定且不可靠。 相信我,那不是真的! 很多时候,导致测试不稳定的原因是未遵循Selenium测试自动化的正确做法。

尽管编写自动化脚本没有硬性规定,但是可以遵循一些技巧来编写更好的测试脚本。

在本文中,我将分享其中27条有关Selenium测试自动化的重要技巧,这些技巧将帮助您从自动化测试工作中获得最大的价值。 因此,让我们直接深入。

1.尽早测试和经常测试

Selenium测试自动化的最佳实践之一是尽早且经常进行测试。 随着组织逐渐脱离瀑布式模型,测试人员必须更多地参与开发,这与将其保持为一次性活动形成对比,因为它对项目的期限和成本产生了重大影响。

这引起了左移测试的概念,这意味着从需求收集阶段开始就让测试人员参与进来。 这样,他们可以通过了解最终用户的期望提前提出测试用例。 这里的主要思想是避免开发完成后遇到错误。 测试人员可以提供宝贵的意见,并以改善用户体验的方式帮助开发人员开发产品。 另外,为了帮助开发人员避免任何不推荐用于产品的开发实践。 例如,假设您的开发人员在基于订阅的模型的定价页面表中利用CSS Subgrid。 CSS Subgrid的跨浏览器兼容性:

css-subgrid

如果您的测试团队已经使用CSS Subgrid意识到了您的开发人员,那么他们可以继续进行并在开发完成之前提前提示开发人员。 这样,您可以为开发人员和测试人员节省时间。 更不用说,您还可以避免潜在的故障。

这就是为什么您应该尽快开始测试,并根据需要进行频繁测试的原因。 开始测试的时间越早,发现的错误越早,发现的错误越早,可以帮助您节省SDLC(软件开发生命周期)中的时间和资源。

2.考虑使用BDD框架

BDD或行为驱动开发是执行Selenium Test Automation时的一种流行开发方法。 BDD使测试人员可以用简单的英语编写Selenium测试自动化案例,无需编程知识的任何人都可以理解。 这进一步有助于在业务团队和技术团队之间架起一座桥梁,以了解项目中真正发生的事情,从而总体上改善协作。

通过使用BDD编写Selenium测试自动化脚本,您可以创建规范,这将帮助您的团队以更好的方式理解测试和要求。 这样可以节省时间,因为您现在不必向任何利益相关者解释测试,因为他们现在不言自明。

随着业务团队对测试有更多的见识,他们可能能够根据业务收益提供一些意见。

3.使用硒等待命令代替Thread.sleep()

由于网络速度,服务器问题或其他各种原因,您的网络应用经常需要花费一些时间来加载。 为了解决这个问题,您需要暂停脚本以等待所有元素加载。 这是在对它们进行测试时确保所有Web元素都在其中的好方法。

暂停脚本的一种方法是使用Thread.sleep()函数,它会在指定时间内暂停测试脚本。 但是此功能存在一个主要缺陷,假设您要打开网页,并且选择等待时间为6秒,如果您的网站加载得更快,您会浪费很多时间。 时间。

在较快的场景中,您可能会浪费大量的额外时间运行Selenium自动化测试,而在较慢的场景中,您将获得失败的结果。 因此,为了避免此类情况,您需要合并隐式等待或显式等待。

要了解有关隐式等待命令或显式等待命令的更多信息,请访问我们前面有关Selenium Waits的文章。

硒等待:内隐,外显,流利和睡眠

4.设置自动化测试报告

“您无法改善,无法衡量。” Selenium测试自动化也是如此,如果不跟踪测试的执行情况,就无法确保获得更好的自动化测试结果。 自动化测试报告有助于提高测试结果的可读性,并有助于最小化维护测试数据所花费的时间。 在上一个博客中,我们讨论了硒报告的重要性,您还可以了解更多有关如何使用pytest生成自动化测试报告的信息。

硒报告的生成可以为您带来奇迹,因为您可以有组织地管理测试数据,从而节省了宝贵的时间。 因此,您可以更好地控制测试,因为使用这些数据可以分析测试脚本何时失败。

您可以使用LambdaTest平台在测试脚本上保留一个选项卡。 使用LambdaTest,您可以在基于云的Selenium Grid(包含2000多种桌面和移动浏览器)上运行Selenium测试脚本。

selenium-automation

5.使用页面对象模型

随着Web应用程序的UI更改,与之关联的定位器也随之更改,所有测试都需要重新编写。 但是,有一个解决方案,通过使用页面对象模型,您无需一次又一次地更改所有测试脚本。

使用POM,您只需更改页面对象,因为所有定位器都位于一个中央存储库中。 在POM中,每个网页都有一个单独的页面类,以在其上查找Web元素以及这些Web元素的页面方法。 这使项目更加可靠,因为开发人员无需扫描整个代码和测试脚本,只需合并一些UI更改即可。

Java中硒测试的页面对象模型

6.进行自动屏幕截图以进行故障调查

您的Selenium测试自动化脚本势必会遇到一些错误,故障,甚至在将来都会遇到。 在这种情况下,建议通过Selenium Grid收集测试脚本执行的自动屏幕截图。

如果您正在使用我们的在线Selenium Grid运行Selenium测试自动化,则无需担心。 您需要做的就是通过Desired Capabilities类传递一个简单的功能,即将可视标记的功能设置为true。

您甚至可以参考我们的“所需功能生成器”打开用于生成Selenium测试脚本执行的逐步屏幕截图的按钮。

capability-generator

当您打开“高级”配置下的“屏幕快照”开关时,“所需功能生成器”将为您提供各种编程语言的课程。

7.在自动化测试之前进行设计

在开始自动化测试之前,提前创建场景和测试案例是一个好习惯。 如果没有适当的测试设计,直接进入自动化领域可能会很危险。 这就是为什么要成功实现Selenium测试自动化,必须将测试设计以及策略和计划结合在一起的原因。 您需要开发描述测试程序结构以及如何管理测试程序的测试体系结构。

在没有适当设计的情况下自动执行测试表明您只对确保脚本有效感兴趣。 考虑可能有助于您进行万无一失的测试的不同方案非常重要。 毕竟,缩小测试范围只是为了确保测试通过并不是明智的选择! 硒测试自动化使测试人员可以使用多种编程语言创建测试脚本。

8.不完全依赖自动化工具

自动化工具是诸如自动化浏览器测试之类的不同测试活动的重要组成部分。 但是您应该知道他们并不能解决所有问题! 我们知道使用正确的工具是切换到自动化测试框架的重要组成部分。 但这仅仅是开始!

但是,有些经理误以为如果选择正确的工具,就可以实现自动化。 好吧,没有工具可以为您提供一切。 即使它们简化了整个过程,但是如果没有熟练的资源,您也无法进行测试。

有时,当您尝试在没有任何人工干预的情况下使用自动化工具时,在识别软件或应用程序上的复杂对象时,它们可能会卡住。 但是,如果您有熟练的资源,它们可以使该工具克服复杂的问题,并为公司的利益使用它们。

9.确定要自动化的测试

自动化测试的最佳实践之一是知道要自动化的内容。 在开始在测试中实施自动化之前,重要的是要知道首先要自动化的内容。 自动化背后的主要原因是避免重复和平凡的任务。 因此,坚持目标并知道您应该自动化哪种测试是很有意义的。

例如,自动化涉及视觉场景(包括字体,颜色和布局结构)的测试是一个好主意。 您还可以自动测试静态内容,例如徽标,标题,政策和条款。 当然,我们知道它们很少更改,因此,您可以轻松地使它们自动化。

为什么您需要了解测试管理策略?

10.自动化最常见和可预测的测试用例

在前一点要点的基础上,有一些特定的测试用例与自动化非常匹配。 那么,下一步应该是什么? 您可以选择频繁发生且可以预测的测试用例。

例如,当您单击选项卡时,一个应用程序开始启动。 这是带有条件的通用测试。 换句话说,当我们知道某个事件肯定会发生时,结果是可以预测的。 因此,为避免重复执行,可以自动化这些测试用例。

11.也选择正确的测试自动化

切换到自动化测试时,每个公司都需要考虑不同的因素。 即使市场上有各种各样的测试自动化工具,选择工具也不是一刀切的方法。 您必须根据公司的需求选择正确的Selenium测试自动化工具。

例如,检查该工具是否支持您公司工作的平台。 要问的其他一些问题包括以下内容。 您需要该工具来执行移动应用程序测试吗? 您使用什么操作系统? 该工具是否支持记录和回放测试? 您可以手动创建自动化测试吗?

12.消除硒测试自动化的不确定性

作为测试人员,您最需要测试自动化工具什么? 我敢肯定,最明显的答案就是结果一致。 有时,即使没有错误,测试也会失败。 另一方面,如果出现问题,则测试可能会通过。 现在,您可以想象这两种情况多么危险!

当存在任何不一致或误报时,这会增加我们分析结果所花费的时间。 因此,在涉及回归包时,请毫不犹豫地消除不稳定的测试。 毕竟,您必须保持可靠和一致的结果作为目标!

13.聘请专门的专家团队

一个成功的测试团队包括手动和自动化测试人员。 现在,公司犯的最大错误是认为单个实体可以执行两项任务。 但是,自动化测试本身就是一项全职工作。 手动测试也是如此。 期望人工测试人员执行测试自动化是不合理的。

但是,如果您不愿雇用新员工进行自动化,而将任务留给有经验的手动测试人员,则首先让他们摆脱手动测试和相关职责。 他们不应只专注于其他事情而实现自动化。

否则,请聘请自动化工程师来完成这项工作。 现在,假设您的公司规模较大。 在这种情况下,建议您任命一名自动化架构师。 然后,聘请架构师可以监督的自动化工程师。 您雇用的工程师数量可以根据公司的生产要求而定。

14.确保集体测试自动化所有权

有时,任命一名自动化工程师会被证明是错误的。 通常,在这种情况下,团队的其他成员并不真正知道发生了什么。 但是,如果团队在这方面的集体知识是最新的,那么成功实现测试自动化的机会就会增加。

保持所有团队成员的平等参与,以在您的工作场所集成自动化。 这样,自动化测试人员也有机会将他们的知识传授给团队的其他成员。 因此,当每个人都知道发生了什么事时,他们都可以为公司的成功做出贡献。

15.自动化测试期间的努力

正如我们已经讨论的那样,自动化测试是基于团队的任务。 根据不同员工的技能水平,您必须划分与自动化相关的任务。 例如,脚本语言专家的人应该编写自动化测试脚本。 另一方面,不熟悉脚本语言的团队成员在编写测试用例时可能会做得很好。

甚至非技术人员也可以使用关键字测试来创建强大而强大的自动化测试。 因此,当团队中的每个人都根据自己的技能做出贡献时,发现缺陷变得容易得多。

16.复查自动化测试的有效性因子

有时,团队无法在实施自动化之前进行良好的计划。 这可能会对整个软件造成负面影响。 有时,自动化测试无法检查某些验证。 其背后的主要原因是这些验证可能已过时。

因此,至关重要的一点是,您必须检查所有自动化测试的有效性。 换句话说,您始终需要确保测试是最新的。 最好让某人负责自动化测试的有效性和完整性。

7.选择熟悉公司资源的自动化工具

假设您的公司资源熟悉特定的编程语言。 我们只说语言是C#。 因此,开发要在C#中测试的应用程序很有意义。 在这种情况下,如果您选择的工具不支持用C#编写脚本,那么这实际上就没有意义。 我们知道学习一种新语言需要大量的努力并且很费时。 但是,如果您选择与公司资源兼容的工具,则可以完全避免学习上的麻烦。

18.使用测试技术

使用测试技术是自动化测试的最佳实践之一。 如果您是一名测试人员,那么您人生中一定有一段时间所有的精力都集中在学习测试技术上。 当然,手动测试是您可以真正应用这些测试的领域。 但是,不要让自己相信拥有的宝贵知识会与测试自动化白白浪费。 毕竟,测试技术不仅仅是用于手动测试!

例如,如果测试人员在测试自动化中使用它们,则四种测试技术尤其具有很多优势。 有边界值分析,状态转换测试,对等划分,成对测试。

19.良好的自动化等于出色的手动测试用例

有一些易于自动化的测试用例。 但是,当发现缺陷时,结果却很薄弱。 换句话说,如果您没有良好的设计或手动测试用例,那么自动化将无法为您带来尽可能多的价值。 因此,最佳实践之一是事先编写手动测试用例。 清楚记下步骤,并提及每个步骤的预期结果。

同样,保持每个测试用例的目标明确。 确保它不会过多地依赖其他测试用例。 我建议自动化工程师至少手动运行一次测试用例。 这将帮助他们确定导航流程以及需要识别的对象。 这种做法的另一个好处是,有时,您甚至可以在编写自动化脚本之前识别错误。 您认为在开发阶段而不是执行阶段捕获错误更好吗?

20.不自动执行不稳定的功能

在开发新功能期间,出现错误是很常见的。 有时,仅由于企业主改变了主意,似乎不再需要使用该功能! 假设您在功能的开发阶段开始进行自动化。 在这种情况下,您需要多次更新测试。 毕竟,功能可能会不断发展!

可以说,跟上这么多意想不到的变化是很累人的。 此外,如果您无法再应用功能,那么所有的努力都是徒劳的! 因此,明智的做法是仅在功能没有太多更改且稳定的情况下才使该功能自动化。

21.创建高质量的测试数据

通过创建高质量的测试数据,您可以将数据驱动的测试提升到一个全新的水平。 一个好的自动化工具可以很好地理解数据文件的内容。 通常,测试人员可以手动创建测试数据并将其存储到公司喜欢的位置。 但是,某些工具提供了测试数据生成器,使用户能够创建excel工作表和表变量来保存测试数据。

花费大量时间和精力来创建高质量的测试数据是个好主意。 这使自动测试的编写变得更加简单。 这种做法还有助于扩展现有的自动化测试并加快应用程序开发过程。

22.创建可抵抗用户界面更改的测试

UI的更改会极大地影响测试结果,尤其是在应用程序的初始阶段。 当应用程序版本升级时,它会在自动测试的工作方式上产生障碍。 例如,某些脚本使用位置坐标查找对象。 但是,如果位置发生变化怎么办?

如果在这种情况下运行自动化测试,则测试将失败,因为测试脚本将无法找到对象。 为了确保测试成功,您可以添加新名称来替换旧名称。 如果控件名称唯一,则用户界面中的更改不会影响测试结果。

您需要了解的有关UI测试的所有信息

23.识别自动化机会

当手头有一个手动测试用例时,请考虑如何扩展其范围。 考虑不同的自动化机会,以免最终无法实现自动化。 例如,最常见的测试用例是登录到应用程序。 如果将其扩展,则可以使该特定测试用例成为数据驱动的。

登录功能具有不同的可能方案。 例如,无效的密码,无效的用户名,空白的用户名,无效的电子邮件等。将它们列出,并在excel文件中提供预期的结果。 使用它作为测试用例的数据源。 因此,当您使此手动测试自动化时,您可以一次检查不同的方案。

24.如果没有其他选择,请避免GUI自动化

如果我们看一下不同的自动化测试,GUI自动化是最困难的。 但这是否意味着您完全拒绝了? 当然不是。 但是,明智的做法是尽可能避免GUI自动化,特别是在存在其他替代方案的情况下。 熟练的自动化工程师可以确定UI层的必要测试。

您还应该知道,如果必须停止自动执行GUI,就可以了。 有时,当涉及到GUI时,自动化只是在某个时候停止了意义。 如果不必要的话,过多的GUI自动化会导致非常糟糕的混乱,几乎无法解决。

25.了解上下文

单元,服务,API和GUI层具有不同的测试目的。 在自动化之前,重要的是要了解每个测试的背景。 例如,单元测试涉及对单个软件方法或功能的测试。 API测试确定一组类或函数是否能够协同工作。 它还可以确保您可以与其他类之间传递数据。 GUI测试检查屏幕,控件,窗口,对话框等。总而言之,它可以确保整个系统根据常见的用例和用户场景运行良好。

26.不将自动化视为手动测试的替代品

浏览器自动测试不能代替手动测试。 这里的技术是对手动测试的补充,使测试人员的工作更加轻松。 重要的是要了解自动化意味着必须运行更少的测试。 例如,回归测试可能需要很长时间才能完成。 您可能还需要经常执行它们,以确保应用程序的所有现有功能正常运行。 因此,使它们自动化是有意义的。

但是新添加的功能可能会干扰现有功能的工作。 因此,盲目自动化端到端测试不会给您带来任何好处。 测试自动化无法捕获无法预料的情况。 在这种情况下,您可能需要执行探索性测试。 在这里,测试人员必须发挥自己的创造力。 综上所述,自动化是为了防止手动测试人员进行重复的工作,而要专注于发现错误和更多测试场景。

27.定位快速反馈

快速反馈有助于快速发现和修复错误。 自动浏览器测试的全部目的是在保持高质量的同时加快测试过程。 较短的发布周期可缩短上市时间。 这使得连续反馈成为可能,并导致持续改进。

利益相关者,职能专家,测试人员和质量保证分析师的持续反馈确保了无错误且快速的发布。 反馈包括必要的信息以及在问题不断解决时所采取的措施。

总结起来

这就是Selenium Test Automation最佳实践的全部。 有许多工作可以改善测试自动化的工作,我希望这些做法一定可以帮助您改善。 在开发的早期发现错误,可以在执行测试自动化的同时创造奇迹。 另外,在开始编写Selenium测试自动化脚本之前,总是要聪明地思考测试设计和策略。

喜欢这些提示,或者您还有其他要分享的内容,请随时在下面的评论部分中与我们分享。 同时,与您的自动化测试人员分享文章! 测试愉快