测试很容易演变为高度程序化的

AEO Service Forum Drives Future of Data Innovation
Post Reply
rumiseoexpate5
Posts: 57
Joined: Wed Dec 11, 2024 3:54 am

测试很容易演变为高度程序化的

Post by rumiseoexpate5 »

在研究了包括 Karma、Mocha、PhantomJS 和 NightwatchJS 在内的工具后,我们发现没有一种现成的工具能够满足我们所有的需求,但 NightwatchJS 是最接近的。NightwatchJS 是一个 JavaScript 库,它通过 Selenium 为浏览器自动化提供了流畅的 API。由于 NightwatchJS 是一种基于 Selenium 的工具,因此它容易受到基于 Selenium 的测试中所有常见陷阱的影响:

断言块。单击 x,断言 x 包含 y,单击 z 等。这种类型的代码很脆弱,不易演变。
测试依赖于对 DOM 内容的断言,通常通过 CSS 选择器定位元素,然后断言其内容的某些属性。这本质上很脆弱,因为它将 DOM 变成了外部 API。这在快速发展的 UI 上很快就会崩溃。
异步网络请求等因素导致的不确定时间行为通常被简 萨尔瓦多 whatsapp 号码数据 5 万 单的“等待 10 秒,然后断言”式模式掩盖。一旦请求花费的时间比预期的要长一点,这些模式不可避免地会失败。
由于上述所有原因,测试往往不可靠,使浏览器自动化成为一种文化污名。开发人员的体验很差,并且往往怀疑 UI 测试是否值得编写。

为了实现我们的初始目标并避免传统 Selenium 测试的缺陷,我们决定在 NightwatchJS 之上构建一个更具主见的框架是最有效的途径。经过几周的原型设计并取得了一些有希望的初步成果后,我们将这个框架命名为 Charcoal。Charcoal 旨在通过遵循以下四个原则来解决 Selenium 测试中的许多问题:

Image

所有测试都围绕着截取 UI 屏幕截图,然后将这些屏幕截图与针对被测应用的干净版本记录的已知“稳定”图像集进行比较。这些屏幕截图比较是测试记录的断言。
测试可以在与 DOM 元素交互之前断言该元素存在,但禁止对该元素的内容或状态进行任何断言。
非确定性时间事件必须始终通过某种类型的轮询观察器来处理。这包括等待 DOM 元素、等待异步网络请求以及等待 UI 动画完成。
所有测试都必须使用 PageObject 模式。Charcoal 的设计使得测试脚本永远无法直接访问 Nightwatch 的主要 Selenium 入口点。测试脚本使用拥有此入口点的适当 PageObject 实现进行初始化。
其中一些原则是通过编码标准强制执行的,而其他一些原则(例如 PageObject 要求)则由框架本身推动。为了让开发人员能够轻松实现有关屏幕截图和时间不确定性的要求,Charcoal 在 Nightwatch 之上提供了一些高级实用程序。其中两个比较有趣的是 Charcoal 的屏幕截图记录器及其处理异步网络请求的机制。
Post Reply