NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Pinterest 如何将 JavaScript 测试速度提升了 15 倍

  • 2015-02-11
  • 本文字数:899 字

    阅读完需:约 3 分钟

任何时候, Pinterest 都运行着数以百计的 A/B“试验(experiment)”,其 JavaScript 测试框架已无法满足他们的试验需求。它需要 15 分钟才能完成整套“测试(test)”,而且经常会因为试验行为变更以及网络 / 浏览器问题而中断。因此,他们借机重构了 Web 测试框架,并于近日在官方博客上介绍了其中几项重点改进。

新框架名为 Affogato ,架构如下:

他们主要从以下几个方面进行了改进:

  • 速度——他们曾试图通过在多个并行的 Headless 浏览器中运行 JavaScript 测试框架来实现优化。但这种方法未能解决整套测试耗时过长的问题,而且还会导致不可预测的机器资源争用问题。后来,他们选择了 jsdom 。这是一个 node.js 命令行工具,实现了 WHATWG DOM HTML 标准。在他们内部进行的大部分基准测试中,测试速度提升了 5 到 20 倍。其中,“DOM 操作多(DOM-heavy)”的测试性能提升最大。另外,鉴于他们的构建系统可以利用任意数量的处理器内核,他们将整套测试分成了多个小块。
  • 可靠性——为了降低数据查找和网络传输代价,他们使用了测试“固件(fixture)”。所谓固件,就是一些包含 JSON 数据的文件。这些数据描述了需要测试的对象。测试框架使用固件创建恰当的“模拟对象(mock object)”,使他们无需编写实例化模拟对象的样板代码就可以测试对象的不同状态。另外,当进行服务器端调用时,可能会因为网络暂时不可用导致测试失败。为了避免这种情况,他们实现了一个 XHR 记录器,监听 Ajax 请求,并将响应写入文件,用于稍后重放。该记录器使测试时间平均减少了 30%。
  • 易用性——他们封装了 Mocha 框架,添加了许多语法糖,使它很容易运行任意数量的试验(它们是给定测试的一部分)。而借助 Sinon.JS 及其沙盒,每次测试完成后,整个环境都可以自动完成清理。他们还使用 ES6 Promise 简化了异步测试的编写。

经过上述改进,他们 1 分钟就可以完成先前需要 15 分钟才能完成的测试。而且,3 个月的使用表明,该测试框架的可靠性也有了很大的改善。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015-02-11 09:132391
用户头像

发布了 1008 篇内容, 共 374.2 次阅读, 收获喜欢 341 次。

关注

评论

发布
暂无评论
发现更多内容

HTTP请求:requests模块基础使用必知必会 | 京东云技术团队

京东科技开发者

Python HTTP请求 requests 企业号 6 月 PK 榜

深入剖析spring核心容器依赖注入类型和原理:Spring依赖注入类型

互联网架构师小马

广东省高校人工智能产教融合院长研讨会召开,校企协同探索AI教育新范式

飞桨PaddlePaddle

Docker 与 Kubernetes:打造高效微服务架构的最佳实践

xfgg

Java Docker Kubernetes 6 月 优质更文活动

Spring循环依赖案例分析:三级缓存结构+循环依赖解决方案

互联网架构师小马

直播源码搭建平台技术知识:实时语音识别字幕呈现功能

山东布谷科技

源码 软件开发 源码搭建 直播源码

2023年全国高校公益人工智能师资培训营报名正式开启

飞桨PaddlePaddle

人工智能 百度 飞桨

CQ 社区版 v2.1.0 发布 | 新增数据发布变更、内置脱敏规则等功能

BinTools图尔兹

运维 数据库管理 数据脱敏 CloudQuery 数据变更

全球异型LED显示屏的市场发展

Dylan

技术 设计 领域 LED显示屏 市场

共建、共享开源EDA核心共性技术框架|2023开放原子全球开源峰会开源EDA分论坛成功举办

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 开源EDA

3个方法,产品迭代延期率降为0?

嘉为蓝鲸

DevOps 持续集成 研发迭代

CFlow:从DevOps到BizDevOps,价值流管理是必然的趋势

嘉为蓝鲸

DevOps 价值流 嘉为蓝鲸 VSM

HTTP请求:requests的进阶使用方法浅析 | 京东云技术团队

京东科技开发者

Python HTTP请求 requests 企业号 6 月 PK 榜

浅谈中移链中插件的功能及使用

BSN研习社

区块链

轻松解决Kafka数据流丢失:提升数据完整性和可靠性

xfgg

Java kafka 6 月 优质更文活动

给你的 ABAP 对象打上标签(Tag)

Jerry Wang

SAP abap Netweaver 思爱普 6 月 优质更文活动

Wise 的平台工程 KPI 探索之旅

SEAL安全

KPI 平台工程

6 种方式读取 Springboot 的配置,老鸟都这么玩(原理+实战)

程序员小富

springboot

「有问必答」Go如何优雅的对时间进行格式化?

王中阳Go

高效工作 学习方法 面试题 Go 语言 6 月 优质更文活动

大佬带你深入理解Spring依赖注入原理:bean的注册及实例化

互联网架构师小马

首添机密计算创新成果!龙蜥首获 ACM SIGSOFT 杰出论文奖

OpenAnolis小助手

云原生 龙蜥社区 sig 机密计算 ICSE

iOS 单元测试之常用框架 OCMock 详解 | 京东云技术团队

京东科技开发者

ios 测试 单元测试 Mock 企业号 6 月 PK 榜

Python自动化测试的配置层实现方式对标与落地 | 京东云技术团队

京东科技开发者

Python 自动化测试 配置文件 企业号 6 月 PK 榜

探索开源创新理论|2023开放原子全球开源峰会开源创新理论与实践分论坛成功召开

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 开源创新理论

HarmonyOS 极客马拉松2023 正式启动,诚邀极客们用键盘码出无限可能!

HarmonyOS开发者

HarmonyOS

一行代码将SAP CDS view数据以ALV的方式输出

Jerry Wang

abap Netweaver 思爱普 6 月 优质更文活动

当 Rokid 遇上函数计算

Serverless Devs

IT服务台智能助手,真的靠谱吗?

嘉为蓝鲸

智能助手 GPT IT服务 ChatGPT

智造零距离:工程师走访华秋深圳 PCB 工厂,观摩高可靠板制造流程

华秋电子

玺璐传媒——连续多年获得中央电视台广告一级代理资质

科技热闻

全方位整合生态能力,支付宝为小程序开发者升级一站式云服务

TRaaS

小程序 支付宝小程序 云服务 蚂蚁集团

Pinterest如何将JavaScript测试速度提升了15倍_JavaScript_谢丽_InfoQ精选文章