京喜前端自动化测试之路

原标题:京喜前端自动化测试之路

前言

京喜(原京东拼购)项目,作为京东战略级业务,拥有千万级别的流量入口。为了保障线上业务的稳定运行,每月例行开展前端容灾演习,主要包含小程序及 H5 版本,要求各页面各模块在异常情况下进行适当的降级处理,不能出现空窗、样式错乱、不合理的错误提示等体验问题。原来的容灾演习过程:小程序(通信方式改成 Https )和 H5 通过 Whistle 对接口返回进行修改来模拟异常情况,验证各页面各模块的降级处理符合预期。容灾演习是一项长期持续的工作,且涉及页面功能及场景多,人工的切换场景模拟异常导致演习效率很低,因此想通过开发自动化测试工具来提升研发效率,让容灾演习工作随时可以轻松开展。京喜 H5 和小程序场景差异比较大,因此自动化测试之路分 H5 和小程序两部分进行,以 H5 作为一个开篇。

综上所述,我们希望京喜 H5 自动化测试工具可以提供以下功能:

提到 Web 的自动化测试,很多人熟悉的是 Selenium 2.0(Selenium WebDriver), 支持多平台、多语言、多款浏览器(通过各种浏览器的驱动来驱动浏览器),提供了功能丰富的API接口。而随着前端技术的发展,Selenium 2.0 逐渐呈现出环境安装复杂、API 调用不友好、性能不高等缺点。新一代的自动化测试工具 —— Puppeteer ,相较于 Selenium WebDriver 环境安装更简单、性能更好、效率更高、在浏览器执行 Java 的 API 更简单,它还提供了网络拦截等功能。

Puppeteer 是一个 Node 库,它提供了一套高阶 API ,通过 Devtools 协议控制 Chromium 或 Chrome 浏览器。Puppeteer 默认以 Headless 模式运行,但是可以通过修改配置文件运行“有头”模式。

Puppeteer 是一个 Node 库,它提供了一套高阶 API ,通过 Devtools 协议控制 Chromium 或 Chrome 浏览器。Puppeteer 默认以 Headless 模式运行,但是可以通过修改配置文件运行“有头”模式。

官方描述的功能:

  • 生成页面 PDF;
  • 抓取 SPA(单页应用)并生成预渲染内容(即“ SSR ”,服务器端渲染);
  • 自动提交表单,进行 UI 测试,键盘输入等;
  • 创建一个时时更新的自动化测试环境,使用 Java 和最新的浏览器功能直接在最新版本的 Chrome 中执行测试;
  • 捕获网站的 Timeline Trace,用来帮助分析性能问题;
  • 测试浏览器扩展。

Puppeteer 提供了一种启动 Chromium 实例的方法。当 Puppeteer 连接到一个 Chromium 实例的时候会通过 puppeteer.launch 或 puppeteer.connect 创建一个 Browser 对象,在通过 Browser 创建一个 Page 实例,导航到一个 Url ,然后保存截图。一个 Browser 实例可以有多个 Page 实例。下面就是使用 Puppeteer 进行自动化的一个典型示例:

constpuppeteer = require( ‘puppeteer‘);

puppeteer.launch().then( asyncbrowser => {

constpage = awaitbrowser.newPage();

awaitpage.goto( ‘https: //example.com’);

awaitpage.screenshot({path: ‘screenshot.png’});

前言

京喜(原京东拼购)项目,作为京东战略级业务,拥有千万级别的流量入口。为了保障线上业务的稳定运行,每月例行开展前端容灾演习,主要包含小程序及 H5 版本,要求各页面各模块在异常情况下进行适当的降级处理,不能出现空窗、样式错乱、不合理的错误提示等体验问题。原来的容灾演习过程:小程序(通信方式改成 Https )和 H5 通过 Whistle 对接口返回进行修改来模拟异常情况,验证各页面各模块的降级处理符合预期。容灾演习是一项长期持续的工作,且涉及页面功能及场景多,人工的切换场景模拟异常导致演习效率很低,因此想通过开发自动化测试工具来提升研发效率,让容灾演习工作随时可以轻松开展。京喜 H5 和小程序场景差异比较大,因此自动化测试之路分 H5 和小程序两部分进行,以 H5 作为一个开篇。

综上所述,我们希望京喜 H5 自动化测试工具可以提供以下功能:

提到 Web 的自动化测试,很多人熟悉的是 Selenium 2.0(Selenium WebDriver), 支持多平台、多语言、多款浏览器(通过各种浏览器的驱动来驱动浏览器),提供了功能丰富的API接口。而随着前端技术的发展,Selenium 2.0 逐渐呈现出环境安装复杂、API 调用不友好、性能不高等缺点。新一代的自动化测试工具 —— Puppeteer ,相较于 Selenium WebDriver 环境安装更简单、性能更好、效率更高、在浏览器执行 Java 的 API 更简单,它还提供了网络拦截等功能。

Puppeteer 是一个 Node 库,它提供了一套高阶 API ,通过 Devtools 协议控制 Chromium 或 Chrome 浏览器。Puppeteer 默认以 Headless 模式运行,但是可以通过修改配置文件运行“有头”模式。

Puppeteer 是一个 Node 库,它提供了一套高阶 API ,通过 Devtools 协议控制 Chromium 或 Chrome 浏览器。Puppeteer 默认以 Headless 模式运行,但是可以通过修改配置文件运行“有头”模式。

官方描述的功能:

  • 生成页面 PDF;
  • 抓取 SPA(单页应用)并生成预渲染内容(即“ SSR ”,服务器端渲染);
  • 自动提交表单,进行 UI 测试,键盘输入等;
  • 创建一个时时更新的自动化测试环境,使用 Java 和最新的浏览器功能直接在最新版本的 Chrome 中执行测试;
  • 捕获网站的 Timeline Trace,用来帮助分析性能问题;
  • 测试浏览器扩展。

Puppeteer 提供了一种启动 Chromium 实例的方法。当 Puppeteer 连接到一个 Chromium 实例的时候会通过 puppeteer.launch 或 puppeteer.connect 创建一个 Browser 对象,在通过 Browser 创建一个 Page 实例,导航到一个 Url ,然后保存截图。一个 Browser 实例可以有多个 Page 实例。下面就是使用 Puppeteer 进行自动化的一个典型示例:

constpuppeteer = require( ‘puppeteer‘);

puppeteer.launch().then( asyncbrowser => {

constpage = awaitbrowser.newPage();

awaitpage.goto( ‘https: //example.com’);

awaitpage.screenshot({path: ‘screenshot.png’});

责任编辑:

Thenews.cc