在过去的两年中,我承担了大量的代码审查工作,作为测试部门的技术负责人,我每周都会专门抽出一个下午的时间来审查团队成员编写的代码。我坚信,测试自动化代码应当受到与其测试的产品代码相同级别的审查,因为测试自动化本身也是一种产品。因此,在自动化构建过程中,采用一些最佳实践是必要的。除此之外,我还特别关注那些在测试自动化中比其他软件领域更为常见的问题。以下是我在测试自动化代码审查中关注的地方。
可读性
可读性是代码质量的重要组成部分,对于维护和团队协作尤为关键。
清晰的代码结构:代码的结构应该逻辑清晰,易于跟踪。使用合理的文件、类和函数划分,以及逻辑分块,可以帮助读者快速理解代码的组织方式和执行流程。
描述性的命名:
-
• 变量命名:变量名应当直观地反映变量的用途或所存储的数据类型。例如使用totalScore而不是ts可以更直接地表达变量的含义。
-
• 函数命名:函数名应当准确描述函数的行为或返回的结果。例如calculateTotalScore()比calcTS()更能清晰地表达函数的功能。
适当的注释:
-
• 目的注释:在代码的关键部分添加注释,解释这段代码的目的和它是如何实现的。特别是在复杂的算法或逻辑判断中,注释可以帮助读者快速理解代码的意图。
-
• 功能注释:对于函数和类,使用注释来说明它们的功能、参数、返回值和可能抛出的异常。这有助于其他开发者在不深入阅读代码实现的情况下,快速了解如何使用这些函数和类。
-
• 警告注释:在代码中可能引起混淆或错误的地方添加警告注释,提醒其他开发者注意。
避免过度注释:虽然注释对于提高代码的可读性非常重要,但过度注释可能会产生反效果,使代码变得杂乱无章。应当避免对明显的代码行为添加注释,而是通过清晰的代码结构和命名来自我解释。
格式化和风格一致性:保持代码的格式化和风格一致性也是提高可读性的重要方面。这包括一致的缩进、空格使用、括号位置等。许多团队采用代码风格指南(如PEP 8、Google Java Style Guide)来确保代码风格的一致性。
代码示例
代码重复
代码重复常常被视为测试自动化领域的首要问题。这一现象在我的文章《为什么您的自动化测试中存在大量重复代码?》中得到了深入探讨。测试过程中的许多操作天生就带有重复性质,而我们在面对这些操作时,往往倾向于简单地复制粘贴代码块,而不是去寻找或创建可复用的方法,以此来缩短开发周期。此外,在庞大的代码库中寻找能够满足当前需求的可复用代码段也是一项挑战。尽管如此,有效的代码审查机制应当能够识别出代码中的冗余部分,并提供更优的解决策略。
硬编码值
硬编码值通常表明设计的不够好。有时它们并不是一个大问题,但它们可能会削弱自动化代码库的灵活性。当我看到硬编码值时,我总是会问以下问题:
-
• 这应该是一个共享常量吗?
-
• 这应该是使用它的方法/函数/步骤的参数化值吗?
-
• 是否应该将其作为外部输入传递到测试中(例如从配置文件或命令行)?
健壮性
测试自动化必须足够强大,能够应对测试过程中非预期的问题。然而,测试逻辑并不总是为了处理稍微意外的情况而编写的。以下是审查时需要注意的一些示例:
-
• 测试用例是否有足够的清理程序,即使它们崩溃了?
-
• 所有异常情况(即使是意外情况)是否都得到了正确处理?
-
• Selenium WebDriver 总是被释放吗?
-
• XPath 是否太宽松或太严格?
代码放置不当
自动化项目往往会快速增长。随着新的测试,新的共享代码(例如页面对象和数据模型)不断添加。保持良好、有组织的结构对于项目的可扩展性和团队合作是必要的。测试用例应按功能模块组织。公共代码应该从测试用例中抽象出来并放入共享库中。输入和日志记录等框架级代码应与测试级代码分开。如果代码放置在错误的位置,则可能很难找到或重用。例如,非 Web 测试不应依赖于 Selenium WebDriver。确保新代码放置在正确的位置。
不明确配置更新
即使是最看似无害的配置调整也可能产生巨大的影响:
-
• 用户名更改可能会导致测试中止执行。
-
• 错误的 URL 可能会将测试定向到错误的地方。
-
• 将本地配置文件提交到版本控制可能会导致其他队友的本地项目无法构建。
-
• 更改测试输入值可能会使测试运行无效。
作为一般规则, 在与其他更改分开的代码审查中提交任何配置更改,并向审查者提供关于为什么需要更改的完整说明信息。
用例覆盖不全
有时候发现自动化测试实际上并未涵盖预期的测试步骤,这种情况很常见。测试过程中的某个步骤可能会丢失,或者断言可能会产生误报。有时,断言甚至可能无法执行!当我们在对自动化用例进行审查时,尽量熟悉相关业务和功能用例,并注意是否有遗漏的覆盖范围。
提供执行记录
正如罗纳德·里根所说"信任,但要核实"。测试需要成功运行才能通过审核,并且运行成功的证明(例如日志或屏幕截图)。如果提审的代码尚未准备好或存在错误,需要明确告知哪些地方存在问题,并证明代码的关键新部分已被执行。测试还应该在对应环境中运行,以避免以后出现"它在我的机器上运行没有问题"的借口。
行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!