在自动化测试领域,一个普遍而显著的问题是代码重复过多。这种现象不分项目大小,无论是在大公司还是小公司中都普遍存在。其直接后果包括测试开发速度的降低、错误的增加以及维护工作的困难。虽然代码重复的问题可能出现在任何软件项目中,但在自动化测试中尤为常见。这一现象的原因可能对您来说既不意外也不陌生,但寻找解决方案却是关键所在。我们可以通过重构和优化代码,可以在不改变原有逻辑的前提下解决这一问题。
重复代码遍及自动化的原因
测试用例是重复的
对于任何测试的产品,测试将共享许多相同的步骤。例如,Web 应用程序测试必须首先导航到起始页,或者 API 测试可能会涵盖一次调用的一些变体。输入参数、设置/清理、日志记录和断言等测试机制经常发生。将所有这些放在一起,形成具有数十、数百、数千甚至更多测试用例的测试套件。这就是测试的本质。
自动化框架原因
大多数框架将测试用例构建为具有方法的类(如 JUnit)或函数集合(如 pytest),其中每个方法或函数代表一个测试。从本质上讲,这种基本结构对于使测试独立是一件好事。然而,懒惰的测试人员可能会滥用该结构。通常,他们将所有测试代码放入这些测试方法中,而不是将重复逻辑提取到辅助方法或设计模式中。然后,简单地复制整个测试用例方法并更改一些内容就变得更容易,而不是实现更好的整体设计。
测试代码重要程度
业务需求推动了行业的软件开发,并且由于测试代码不是交付给客户的产品的一部分,因此它通常被认为不太重要,大部分公司只管功能实现,能用就行。再就是没有充分的时间、精力去完成相关的测试代码编写,为了权宜之计,许多最佳实践被放弃。
测试人员的开发技能通常较弱
这并非是对测试人员的批评或给予标签,而是区分不同岗位的专长不一样:开发人员主要是设计和编写软件代码,参与软件的设计和架构决策,对软件架构和设计模式有一定的理解;测试人员主要是确保软件质量是否符合预期,参与质量保证和控制过程,重点工作不在于编码方面。虽然存在部分测试人员具备出色的开发技能,但是大部分的测试人员的编程经验较少,仍然能够可靠地执行测试工作。当自动化任务交给那些开发技能有限的测试人员时,往往会导致开发代码质量不好,其中代码重复就是一个常见问题。
如何避免自动化中的重复代码
避免复制代码块
当我们复制粘贴代码块时,需要问一下自己,我们为什么这么做?在粘贴的代码中更改了什么?是否应该将该逻辑抽象为可重用的方法或类?可以能够通过参数化一下实现吗?
抽象出工具类/包
检查现有的测试脚本,找出重复出现的代码片段或者可以通用的功能模块,这些通常是抽取成工具类的好候选。例如请求、断言、日志记录、数据处理、设置和清理等操作。考虑如何封装这些功能,使得它们既易于使用,又保持足够的灵活性。同时,要确保工具类的职责单一,避免创建大而全的类。编写工具类的代码,实现具体的功能的时候需要注意代码的质量,包括编码规范、注释等,以便于团队成员理解和使用。
采用模块化设计
将测试用例分解成可重用的模块或函数。每个模块负责一个具体的功能,如登录、填表、数据验证等。这样,当需要执行相同的操作时,可以重复使用这些模块,而不是重写代码。
使用数据驱动测试
数据驱动测试可以将测试逻辑与测试数据分离。通过从外部数据源(如Excel、Yaml、CSV文件或数据库)读取输入数据,可以使用相同的测试逻辑执行多个测试用例,减少重复代码。
引入设计模式
测试框架中引入一些设计模式的思想,例如UI 自动化里面的Page Object Model (POM)。POM通过为每个页面或应用的部分创建对象,将页面元素和操作封装起来,使得测试脚本更简洁、易于维护。
利用继承和多态
面向对象的编程语言支持继承和多态,这可以用来减少重复代码。创建基类(或父类)来封装共通的方法和属性,然后通过继承来扩展或修改这些行为。
代码复审和重构
定期进行代码复审,寻找重复代码的机会。重构测试代码,将重复的代码片段抽取成函数或模块,以提高代码的复用性。
持续学习和改进
跟踪和评估新的测试方法和工具,这些可能提供更好的方式来避免重复代码。持续学习和改进是减少重复代码的一个重要方面。
对测试代码使用与产品代码相同的开发实践。自动化是一种产品,它的客户是团队。使用编码标准、设计模式和修订控制。最重要的是,通过代码审查强化良好实践。使用审核过程作为学习新技巧甚至指导经验不足的团队成员的建设性方式。最后,在测试制定、测试用例自动化和测试框架开发之间划分测试角色。
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。