本文适用于所有对高效、稳定的自动化测试编写有需求的开发和测试人员。
随着应用的功能日渐丰富、团队规模的不断发展,你和你的团队必然需要寻求一个可靠的方法来测试你的应用,那么自动化回归测试肯定会是你的首选。
如果在你的工作中已经有了一套自动化测试方案,那么你肯定体会过测试缓慢和测试结果不稳定的痛苦。在测试脚本的编写中,开发人员一开始便会考虑脚本代码的稳定性和健壮性,来面对未来可能的重构。不管你属于哪一类,下面提出的建议或多或少能够帮上忙,使你的界面自动化测试变得更加高效和流畅。
在开发中,会为要开发的应用列出一张详尽的功能(features)清单,而测试的首要目的就是验证这些功能的有效性。为了防止应用发生回归(Software Regression,也称作软件退行,当增加新代码后软件无法按照预期正常运行),让工程师能够放心的将代码合并(merge)到主开发分支中,我们建立了 Pipeline 来运行许多不同的测试项目,其中最关键的还是我们自己的界面自动化测试。为什么如此看重界面测试,是因为这些测试模拟用户操作应用的实际使用场景来验证新增的代码是否产生了用户可感知到的副作用,从而大大缩减了代码的测试周期,减少了代码维修滞后带来的额外成本。
概要
我们的团队使用 Selenium-Webdriver 和 Node.JS 来进行自动化测试的开发。Selenium 是一个浏览器自动化库,通常用于测试 web 应用程序,可以用于任何需要与浏览器进行自动化交互的任务。而 Selenium-Webdriver 是一项基于 Selenium 规范开发的 Node 库,更加贴合 Web 开发人员的技术栈,非常适合 Web 项目的界面自动化测试。
下面是我们 Web 团队从已经实施的方案中归纳整理出的、针对界面自动化测试的一些建议,能够有效的抵御不合理的自动化测试带来的问题。
避免使用 sleep()方法
是 Selenium 提供的等待方法,通常会被用于等待页面加载、文件上传、API 调用等等。但是在很多情况下,滥用方法会导致不稳定的测试结果。这是因为方法等待的时间是固定的,而等待 API 的调用和页面加载、操作的时间每次都是不一样的。试图用比较保守的等待时间(长时间的等待)来避免超时的情况,最终只会积累起来拖累整个测试项目的运行速度。
而其实,Selenium-Webdriver 提供了广泛的 API 回调模块——。你可以配合使用和方法等待元素可见、存在,等待直到条件为真时再执行下一步操作。
使用无头模式的 Chrome
Google 在 60 版本以后的 Chrome 中集成了无头(Headless)模式。在无头模式下 Chrome 不会启动用户界面,但是由于 Selenium 是通过调用浏览器提供的接口来与其交互,因此在无头模式下仍然能够正常运行测试,这将大大减少测试时间,同时对于 Pipeline 这种命令行测试环境有非常好的效果。
在 Chrome 无头模式下,你仍然可以捕获屏幕截图并查看您的应用程序,同时支持调试。在切换到在无头模式中运行 Selenium-Webdriver 测试前,请先确保所有的测试在有界面模式下完成了编写和验证。
出于安全方面的考虑,Chrome 在无头模式中禁用了下载功能。
调整错误日志等级
由于进入无头模式以后日志输出会变多,因此在实际运行时需要斟酌自己想要看到哪部分的日志。在 Chrome 中把日志内容分为了四个等级:
0:运行信息(默认)
1:警告
2:错误
3:致命错误,脚本无法继续执行
Chrome 配置日志等级后,只会处理大于等于该等级的日志信息。比如默认的 0 级日志,会保存下来全部的日志信息;而如果使用了 3 级日志,那么只要程序没有因为意外而终止就不会拿到任何日志信息。合适的错误日志等级可使你快速定位错误位置提高调试测试效率,而且对测试运行几乎没有影响。配置方法如下:
可重用的辅助方法
针对常用的场景创建一些可重用的辅助方法不会节省测试时间,但可以节省开发时间。例如登录、注册或单击并等待结果,直接调用和组合 Selenium 提供的接口有时候也会有点繁琐,那么最好自定义一个辅助程序方法来减少重复的代码块。自定义的辅助方法甚至可以设计为接受参数的形式,通过修改传入参数来实现不同的操作。
测试项目的结构需要保持独立
有时候对于一个应用,可能需要按模块分为多个测试项目运行,这样不仅可以一次运行多个测试,而不必逐一运行它们,可以大大缩短总体测试运行时间。需要注意的是,并行运行的前提应该是每个测试应该能够单独运行,也即每个测试项目不依赖于先前的测试的结果,比如登录、注册、设置或销毁数据。
不同的配置文件
由于 Selenium-Webdriver 的配置都是在实例中配置的,因此可以通过构造不同的实例来实现不同配置。具体操作是使用构建各类配置的实例后,使用将其当作 Node 模块导出,如下:
假设在运行目录下新建了文件来独立的配置:
接着在使用 driver 的文件顶部加上以下代码就可以根据情况使用不同配置:
总结
以上是自动化测试人员在编写和管理测试项目时可以用到的技巧,但是更多的时候,我们不应该将精力过多的投在这些事情上面,但是又想直接享受他们带来的收益该怎么办呢?很简单,将这些琐事交由工具来做即可。CukeTest 是一款专注于自动化测试的全平台开发工具,适用于 Web 端、桌面端、移动端等等测试领域。在 CukeTest 中你可以轻松的管理自己的项目、场景、配置,还有测试实例,同时支持无缝接入 Jenkins 等 Dev/Ops 平台。
而且,现在 CukeTest 提供了宽松的付费政策,免费起步,快来CukeTest 官网[1]获取吧!
参考资料[1]
CukeTest官网:http://cuketest.com/
领取专属 10元无门槛券
私享最新 技术干货