我们目前正在使用Selenium Webdriver和JUnit对B2C产品进行烟雾测试。由于我们使用Selenium,因此脚本完全依赖于UI。鉴于该产品来自科技初创公司,UI和工作流程以极高的频率不断变化/发展@。
结果:本应验证应用程序神圣性的冒烟测试不断失败。团队花费更多时间修复脚本,而不是验证生成。
我很确定大多数自动化人员都会面临类似的问题,尤其是快速的开发周期。期待看到业内其他面临类似问题的其他人采取的一些方法。
注意:前端是用PHP开发的
Webdriver 的工作原理大致如下:有一个起点,Webdriver 与它交互(例如,通过模拟按钮按下),然后找到下一个要与之交互的项目。 下一项可能位于下一页或同一页上。 它可以通过各种方式找到,通过 id 或 class="foo" 等的第 3 个div。
测试是这样的,例如页面是否以 200 OK 加载,字符串"login"是否出现在特定位置等等
更改 UI 的问题在于所有元素都会"移动"。 ID 更改,第 3 个div 类 foo 消失。 这意味着 Web 驱动程序交互失败,并且如果他们正在寻找特定元素的测试也将失败
一种解决方案是针对一组 id 进行开发和测试。 这些 ID 将引用固定的 UI 元素。 在网络驱动程序中的所有搜索都应使用 ID。 编写 PHP 的开发团队会将 id 放在正确的位置。
这组 id 还可以用作某种规范的基础,并可用于以不同的方式向不同的利益相关者解释 UI 流。
我不知道有任何特定的产品可以处理在测试和开发代码中管理id的过程,但是维护这样的"词典"来描述UI项不应该是一项主要任务
被测系统的通用性越强,在Selenium之上拥有一个框架以减少更改的维护工作就越重要。对于被测系统中最常见的更改,有几种已知模式可以帮助您减少维护工作:
-
通过使用 UIMaps 对应用程序的 UI 进行建模,处理更改的 ID、CSS 类或类似更改非常容易
。 PageObjects 减少了较大 UI 更改的工作量(例如,当输入字段从文本框更改为下拉字段时)
使用关键字驱动测试对测试用例进行建模,而无需了解底层技术表示。 即关键字从用户的角度封装了一个动作——关键字的示例可以是:"loginWithValidUser()"
如果 UI/应用程序/工作流发生剧烈且频繁的变化,请不要只使用 UI 进行冒烟测试。大多数情况下,通过在没有任何 Web-UI 的情况下调用 Web 服务来测试某些功能也很有帮助