蚊章汇 - Shangshang Feng
type: channel
link: https://linuxcn.bwsl.wang/author/741/
description: Shangshang Feng
items: 介绍 Flashback，一个互联网模拟工具

介绍 Flashback，一个互联网模拟工具
type: item
date: 2017-10-16T05:56:00+08:00
description: Flashback 用于测试目的来模拟 HTTP 和 HTTPS 资源，如 Web 服务和 REST API。在 LinkedIn，我们经常开发需要与第三方网站交互的 Web 应用程序。我们还采用自动测试，以确保我们的软件在发布到生产环境之前的质量。然而，测试只是在它可靠时才有用。考虑到这一点，有外部依赖关系的测试是有很大的问题的，例如在第三方网站上。这些外部网站可能会没有通知地发生改变、遭受停机，或者由于互联网的不可靠性暂时无法访问。如果我们的一个测试依赖于能够与第三方网站通信，那么任何故障的原因都很难确定。失败可能是因为 LinkedIn 的内部变更、第三方网站的维护人员进行的外部变更，或网络基础设施的问题。你可以想像，与第三方网站的交互可能会有很多失败的原因，因此你可能想要知道，我将如何处理这个问题？好消息是有许多互联网模拟工具可以帮助。其中一个是 Betamax。它通过拦截 Web 应用程序发起的 HTTP 连接，之后进行重放的方式来工作。对于测试，Betamax 可以用以前记录的响应替换 HTTP 上的任何交互，它可以非常可靠地提供这个服务。最初，我们选择在 LinkedIn 的自动化测试中使用 Betamax。它工作得很好，但我们遇到了一些问题：出于安全考虑，我们的测试环境没有接入互联网。然而，与大多数代理一样，Betamax 需要 Internet 连接才能正常运行。我们有许多需要使用身份验证协议的情况，例如 OAuth 和 OpenId。其中一些协议需要通过 HTTP 进行复杂的交互。为了模拟它们，我们需要一个复杂的模型来捕获和重放请求。为了应对这些挑战，我们决定基于 Betamax 的思路，构建我们自己的互联网模拟工具，名为 Flashback。我们也很自豪地宣布 Flashback 现在是开源的。什么是 Flashback?Flashback 用于测试目的来模拟 HTTP 和 HTTPS 资源，如 Web 服务和 REST API。它记录 HTTP/HTTPS 请求并重放以前记录的 HTTP 事务 - 我们称之为“ 场景 scene ”，这样就不需要连接到 Internet 才能完成测试。Flashback 也可以根据请求的部分匹配重放场景。它使用的是“匹配规则”。匹配规则将传入请求与先前记录的请求相关联，然后将其用于生成响应。例如，以下代码片段实现了一个基本匹配规则，其中测试方法“匹配”此 URL的传入请求。HTTP 请求通常包含 URL、方法、标头和正文。Flashback 允许为这些组件的任意组合定义匹配规则。Flashback 还允许用户向 URL 查询参数，标头和正文添加白名单或黑名单标签。例如，在 OAuth 授权流程中，请求查询参数可能如下所示：oauth_consumer_key="jskdjfljsdklfjlsjdfs", oauth_nonce="ajskldfjalksjdflkajsdlfjasldfja;lsdkj", oauth_signature="asdfjaklsdjflasjdflkajsdklf", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", oauth_token="asdjfkasjdlfajsdklfjalsdjfalksdjflajsdlfa", oauth_version="1.0" 这些值许多将随着每个请求而改变，因为 OAuth 要求客户端每次为 oauth_nonce 生成一个新值。在我们的测试中，我们需要验证 oauth_consumer_key、oauth_signature_method 和 oauth_version 的值，同时确保 oauth_nonce、oauth_signature、oauth_timestamp 和 oauth_token 存在于请求中。Flashback 使我们有能力创建我们自己的匹配规则来实现这一目标。此功能允许我们测试随时间变化的数据、签名、令牌等的请求，而客户端没有任何更改。这种灵活的匹配和在不连接互联网的情况下运行的功能是 Flashback 与其他模拟解决方案不同的特性。其他一些显著特点包括：Flashback 是一种跨平台和跨语言解决方案，能够测试 JVM（Java虚拟机）和非 JVM（C++、Python 等）应用程序。Flashback 可以随时生成 SSL/TLS 证书，以模拟 HTTPS 请求的安全通道。如何记录 HTTP 事务使用 Flashback 记录 HTTP 事务以便稍后重放是一个比较简单的过程。在我们深入了解流程之前，我们首先列出一些术语：Scene ：场景存储以前记录的 HTTP 事务 (以 JSO…