端到端测试
端到端测试
早期的端到端测试与爬虫的瓶颈点,都在于在于动态页面的处理,即如何执行页面中的
目前的关键瓶颈仍然在于测试用例本身与全流程闭环的工具链提供。从宏观层面看,端到端测试已然是一片红海,但是至今未有真正彻底满意的通用工具出现;不同的行业、领域、产品,还是对测试有不同的定制化需求。
端到端测试目标
单元
渲染测试
所谓的渲染测试,即是保证界面能够准确加载资源、完成基础的界面渲染、在多执行机
渲染测试往往用于保证产品的基本可用性,同样也常常用于回归测试中保证多节点部署的一致性。渲染测试往往不关注与界面的具体逻辑或者细节,而是整体页面的差异性。典型的工具包括 Blink-Diff, PhantomCSS, Gemini 等:
功能/ 逻辑测试
功能
性能测试
端到端测试是性能测试的重要手段之一,最为著名的性能测试工具当属 LightHouse:

跨浏览器/ 兼容性测试
早期的
混沌测试/Monkey Test
顾名思义,混沌测试即是通过混乱无序的操作来检测
AI 测试
目前有部分自动化测试工具,宣称能够用人工智能
挑战
工具的内建复杂度叠加业务复杂度,反而会使得整体的编写与维护成本呈指数级增长。目前业界主流的套路,还是抽象出基本的公共方法,譬如数据生成模块、服务调用模块、页面基本交互单元、页面的逻辑操作组(譬如注册、登录这样的多点操作组合)等,然后编写脚本去描述用例。
因为端到端测试的粒度较大(依赖于页面整体
元素定位
在描述某个测试用例的执行逻辑时,我们往往是针对某个
但是在现代
因此,元素定位
测试结果描述与判断
测试用例的目标就是判断实际结果与预期值是否一致,如何去描述结果,如何去判断结果是否是一致的,也是非常困难的事情。
譬如在渲染测试中,如果我们进行像素级对比,那么势必可能会造成大量的误报;用户感知的界面一致性与像素级一致性还是有较大差异。
如果我们从
而在功能测试中,譬如某个用例是:用户输入关键字,然后可以得到结果,继而可以执行某个操作;我们会难以标注用户的可测量点,用户可能关注某个元素的可见性、可能关注数据条目是否准确、可能会关注某个数据属性是否准确。数据属性是否准确又可能分为范围匹配、精准匹配、模糊匹配等等。
测试环境准备与数据隔离
无论在调试,还是测试中,用例的难点之一就是环境复现
测试数据的生成,同样是极具挑战性的一件事;Faker.js 能够帮助我们根据不同的数据类型
端到端测试工具
人工测试
自动化测试目前已经成为共识,是
自动化测试
自动化测试- 控制脚本
譬如 SeleniumHQ/WebDriverJs 这样的工具,允许开发者将测试用例以代码的方式固化,并进行重复运行:
const { Builder, By, until } = require("selenium-webdriver");
new Builder()
.forBrowser("firefox")
.build()
.then(driver => {
return driver
.get("http://www.google.com/ncr")
.then(_ => driver.findElement(By.name("q")).sendKeys("webdriver"))
.then(_ => driver.findElement(By.name("btnK")).click())
.then(_ => driver.wait(until.titleIs("webdriver - Google Search"), 1000))
.then(_ => driver.quit());
});
自动化测试-Acceptance Test
在编写测试用例的时候,我们希望能够让更多地非技术人员
Feature: Is it Friday yet?
Everybody wants to know when it's Friday
Scenario: Sunday isn't Friday
Given today is Sunday
When I ask whether it's Friday yet
Then I should be told "Nope"
CodeceptJS 是基于
Feature("CodeceptJS demo");
Scenario("check Welcome page on site", I => {
I.amOnPage("/");
I.see("Welcome");
});
自动化测试- 脚本分析
Selenium IDE 或者 其

其优势在于能够尽可能地让非技术人员参与进来,缺陷在于灵活性、可控性非常差。
Selenium/Nightwatch/Nightmare
module.exports = {
tags: ["git"],
"Demo test GitHub": function(client) {
client
.url("http://github.com/nightwatchjs/nightwatch")
.waitForElementVisible("body", 1000)
.waitForElementVisible(".container h1 strong a")
.assert.containsText(
".container h1 strong a",
"nightwatch",
"Checking project title is set to nightwatch"
);
},
after(client) {
client.end();
}
};
如上文介绍,
Cypress/TestCafe

参考 Cypress 源代码可以发现,其使用
Tesabot/Testim/Applitools
Tesabot/TestIM/Applitools 都自称为


点击运行测试用例时候,