diff --git a/translated/tech/20170403 Introducing Flashback an Internet mocking tool.md b/published/20170403 Introducing Flashback an Internet mocking tool.md similarity index 78% rename from translated/tech/20170403 Introducing Flashback an Internet mocking tool.md rename to published/20170403 Introducing Flashback an Internet mocking tool.md index 686939fd67..accd2f3796 100644 --- a/translated/tech/20170403 Introducing Flashback an Internet mocking tool.md +++ b/published/20170403 Introducing Flashback an Internet mocking tool.md @@ -1,30 +1,28 @@ 介绍 Flashback,一个互联网模拟工具 ============================================================ -> Flashback 用于模拟 HTTP 和 HTTPS 资源,如 Web 服务和 REST API,用于测试目的。 +> Flashback 用于测试目的来模拟 HTTP 和 HTTPS 资源,如 Web 服务和 REST API。 ![Introducing Flashback, an Internet mocking tool](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_Internet_Cables_520x292_0614_RD.png?itok=trjYWg6g "Introducing Flashback, an Internet mocking tool") ->图片提供: Opensource.com - -在 LinkedIn,我们经常开发需要与第三方网站交互的 Web 应用程序。我们还采用自动测试,以确保我们的软件在发布到生产环境之前的质量。然而,测试只是在可靠时才有用。 +在 LinkedIn,我们经常开发需要与第三方网站交互的 Web 应用程序。我们还采用自动测试,以确保我们的软件在发布到生产环境之前的质量。然而,测试只是在它可靠时才有用。 考虑到这一点,有外部依赖关系的测试是有很大的问题的,例如在第三方网站上。这些外部网站可能会没有通知地发生改变、遭受停机,或者由于互联网的不可靠性暂时无法访问。 -如果我们的一个测试依赖于能够与第三方网站通信,那么任何故障的原因都很难确定。失败可能是因为 LinkedIn 的内部变更,第三方网站的维护人员进行的外部变更或网络基础设施的问题。你可以想像,与第三方网站的交互可能会有很多失败的原因,因此你可能想要知道,我将如何处理这个问题? +如果我们的一个测试依赖于能够与第三方网站通信,那么任何故障的原因都很难确定。失败可能是因为 LinkedIn 的内部变更、第三方网站的维护人员进行的外部变更,或网络基础设施的问题。你可以想像,与第三方网站的交互可能会有很多失败的原因,因此你可能想要知道,我将如何处理这个问题? -好消息是有许多互联网模拟工具可以帮助。其中一个是 [Betamax][4]。它通过拦截 Web 应用程序发起的 HTTP 连接,之后重放起作用。对于测试,Betamax 可以用以前记录的响应替换 HTTP 上的任何交互,它可以非常可靠地提供这个服务。 +好消息是有许多互联网模拟工具可以帮助。其中一个是 [Betamax][4]。它通过拦截 Web 应用程序发起的 HTTP 连接,之后进行重放的方式来工作。对于测试,Betamax 可以用以前记录的响应替换 HTTP 上的任何交互,它可以非常可靠地提供这个服务。 最初,我们选择在 LinkedIn 的自动化测试中使用 Betamax。它工作得很好,但我们遇到了一些问题: * 出于安全考虑,我们的测试环境没有接入互联网。然而,与大多数代理一样,Betamax 需要 Internet 连接才能正常运行。 * 我们有许多需要使用身份验证协议的情况,例如 OAuth 和 OpenId。其中一些协议需要通过 HTTP 进行复杂的交互。为了模拟它们,我们需要一个复杂的模型来捕获和重放请求。 -为了应对这些挑战,我们决定基于 Betamax 的想法,构建我们自己的互联网模拟工具,名为 Flashback。我们也很自豪地宣布 Flashback 现在是开源的。 +为了应对这些挑战,我们决定基于 Betamax 的思路,构建我们自己的互联网模拟工具,名为 Flashback。我们也很自豪地宣布 Flashback 现在是开源的。 ### 什么是 Flashback? -Flashback 用于模拟 HTTP 和 HTTPS 资源,如 Web 服务和 [REST][5] API,用于测试目的。它记录 HTTP/HTTPS 请求并重放以前记录的 HTTP 事务 - 我们称之为“场景scene”,这样就不需要连接到 Internet 才能完成测试。 +Flashback 用于测试目的来模拟 HTTP 和 HTTPS 资源,如 Web 服务和 [REST][5] API。它记录 HTTP/HTTPS 请求并重放以前记录的 HTTP 事务 - 我们称之为“场景scene”,这样就不需要连接到 Internet 才能完成测试。 Flashback 也可以根据请求的部分匹配重放场景。它使用的是“匹配规则”。匹配规则将传入请求与先前记录的请求相关联,然后将其用于生成响应。例如,以下代码片段实现了一个基本匹配规则,其中测试方法“匹配”[此 URL][6]的传入请求。 @@ -34,7 +32,7 @@ HTTP 请求通常包含 URL、方法、标头和正文。Flashback 允许为这 ``` oauth_consumer_key="jskdjfljsdklfjlsjdfs", -      oauth_nonce="ajskldfjalksjdflkajsdlfjasldfja;lsdkj", +oauth_nonce="ajskldfjalksjdflkajsdlfjasldfja;lsdkj", oauth_signature="asdfjaklsdjflasjdflkajsdklf", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", @@ -42,7 +40,7 @@ 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 使我们有能力创建我们自己的匹配规则来实现这一目标。此功能允许我们测试随时间变化的数据、签名、令牌等的请求,而客户端没有任何更改。 +这些值许多将随着每个请求而改变,因为 OAuth 要求客户端每次为 `oauth_nonce` 生成一个新值。在我们的测试中,我们需要验证 `oauth_consumer_key`、`oauth_signature_method` 和 `oauth_version` 的值,同时确保 `oauth_nonce`、`oauth_signature`、`oauth_timestamp` 和 `oauth_token` 存在于请求中。Flashback 使我们有能力创建我们自己的匹配规则来实现这一目标。此功能允许我们测试随时间变化的数据、签名、令牌等的请求,而客户端没有任何更改。 这种灵活的匹配和在不连接互联网的情况下运行的功能是 Flashback 与其他模拟解决方案不同的特性。其他一些显著特点包括: @@ -53,41 +51,41 @@ oauth_version="1.0" 使用 Flashback 记录 HTTP 事务以便稍后重放是一个比较简单的过程。在我们深入了解流程之前,我们首先列出一些术语: -* **场景** 存储以前记录的 HTTP 事务 (以 JSON 格式),它可以在以后重放。例如,这里是一个[Flashback 场景][1]示例。 -* **根路径** 是包含 Flashback 场景数据的目录的文件路径。 -* **场景名称** 是给定场景的名称。 -* **场景模式** 是使用场景的模式, 即“录制”或“重放”。 -* **匹配规则** 确定传入的客户端请求是否与给定场景的内容匹配的规则。 -* **Flashback 代理** 是一个 HTTP 代理,共有录制和重放两种操作模式。 -* **主机** 和 **端口** 是代理主机和端口。 +* `Scene` :场景存储以前记录的 HTTP 事务 (以 JSON 格式),它可以在以后重放。例如,这里是一个[Flashback 场景][1]示例。 +* `Root Path` :根路径是包含 Flashback 场景数据的目录的文件路径。 +* `Scene Name` :场景名称是给定场景的名称。 +* `Scene Mode` :场景模式是使用场景的模式, 即“录制”或“重放”。 +* `Match Rule` :匹配规则确定传入的客户端请求是否与给定场景的内容匹配的规则。 +* `Flashback Proxy` :Flashback 代理是一个 HTTP 代理,共有录制和重放两种操作模式。 +* `Host` 和 `Port` :代理主机和端口。 为了录制场景,你必须向目的地址发出真实的外部请求,然后 HTTPS 请求和响应将使用你指定的匹配规则存储在场景中。在录制时,Flashback 的行为与典型的 MITM(中间人)代理完全相同 - 只有在重放模式下,连接流和数据流仅限于客户端和代理之间。 要实际看下 Flashback,让我们创建一个场景,通过执行以下操作捕获与 example.org 的交互: -1\. 取回 Flashback 的源码: +1、 取回 Flashback 的源码: ``` git clone https://github.com/linkedin/flashback.git ``` -2\. 启动 Flashback 管理服务器: +2、 启动 Flashback 管理服务器: ``` ./startAdminServer.sh -port 1234 ``` -3\. 注意上面的 Flashback 将在本地端口 5555 上启动录制模式。匹配规则需要完全匹配(匹配 HTTP 正文、标题和 URL)。场景将存储在 **/tmp/test1** 下。 +3、 注意上面的 Flashback 将在本地端口 5555 上启动录制模式。匹配规则需要完全匹配(匹配 HTTP 正文、标题和 URL)。场景将存储在 `/tmp/test1` 下。 -4\. Flashback 现在可以记录了,所以用它来代理对 example.org 的请求: +4、 Flashback 现在可以记录了,所以用它来代理对 example.org 的请求: ``` curl http://www.example.org -x localhost:5555 -X GET ``` -5\. Flashback 可以(可选)在一个记录中记录多个请求。要完成录制,[关闭 Flashback][8]。 +5、 Flashback 可以(可选)在一个记录中记录多个请求。要完成录制,[关闭 Flashback][8]。 -6\. 要验证已记录的内容,我们可以在输出目录(**/tmp/test1**)中查看场景的内容。它应该[包含以下内容][9]。 +6、 要验证已记录的内容,我们可以在输出目录(`/tmp/test1`)中查看场景的内容。它应该[包含以下内容][9]。 [在 Java 代码中使用 Flashback][10]也很容易。 @@ -97,7 +95,7 @@ curl http://www.example.org -x localhost:5555 -X GET 验证响应来自场景而不是外部源的一种方法,是在你执行步骤 1 到 6 时临时禁用 Internet 连接。另一种方法是修改场景文件,看看响应是否与文件中的相同。 -这是[ Java 中的一个例子][12]。 +这是 [Java 中的一个例子][12]。 ### 如何记录并重播 HTTPS 事务 @@ -107,9 +105,9 @@ curl http://www.example.org -x localhost:5555 -X GET 一旦涉及安全证书,HTTP 和 HTTPS 之间在记录设置方面的唯一区别是添加了一些其他参数。 -* **RootCertificateInputStream**: 表示 CA 证书文件路径或流。 -* **RootCertificatePassphrase**: 为 CA 证书创建的密码。 -* **CertificateAuthority**: CA 证书的属性 +* `RootCertificateInputStream`: 表示 CA 证书文件路径或流。 +* `RootCertificatePassphrase`: 为 CA 证书创建的密码。 +* `CertificateAuthority`: CA 证书的属性 [查看 Flashback 中用于记录 HTTPS 事务的代码][14],它包括上述条目。 @@ -117,7 +115,7 @@ curl http://www.example.org -x localhost:5555 -X GET ### 支持动态修改 -为了测试灵活性,Flashback 允许你动态地更改场景和匹配规则。动态更改场景允许使用不同的响应(如 success、**time_out**、**rate_limit** 等)测试相同的请求。[场景更改][16]仅适用于我们已经 POST 更新外部资源的场景。以下图为例。 +为了测试灵活性,Flashback 允许你动态地更改场景和匹配规则。动态更改场景允许使用不同的响应(如 `success`、`time_out`、`rate_limit` 等)测试相同的请求。[场景更改][16]仅适用于我们已经 POST 更新外部资源的场景。以下图为例。 ![Scenarios where we have POSTed data to update the external resource.](https://opensource.com/sites/default/files/changingscenes.jpg "Scenarios where we have POSTed data to update the external resource.") @@ -149,14 +147,17 @@ curl http://www.example.org -x localhost:5555 -X GET -我们很高兴地宣布,Flashback 现在以 BSD(Berkeley Software Distribution)双条款许可证开源。要开始使用,请访问[ Flashback GitHub 仓库][18]。 +我们很高兴地宣布,Flashback 现在以 BSD 两句版许可证开源。要开始使用,请访问 [Flashback GitHub 仓库][18]。 - _该文原始发表在[LinkedIn 工程博客上][2]。转载许可_ + _该文原始发表在[LinkedIn 工程博客上][2]。获得转载许可_ ### 致谢 Flashback 由 [Shangshang Feng][19]、[Yabin Kang][20] 和 [Dan Vinegrad][21] 创建,并受到 [Betamax][22] 启发。特别感谢 [Hwansoo Lee][23]、[Eran Leshem][24]、[Kunal Kandekar][25]、[Keith Dsouza][26] 和 [Kang Wang][27] 帮助审阅代码。同样感谢我们的管理层 - [Byron Ma][28]、[Yaz Shimizu][29]、[Yuliya Averbukh][30]、[Christopher Hazlett][31] 和 [Brandon Duncan][32] - 感谢他们在开发和开源 Flashback 中的支持。 + +(题图:Opensource.com) + -------------------------------------------------------------------------------- 作者简介: @@ -167,7 +168,7 @@ Shangshang Feng - Shangshang 是 LinkedIn 纽约市办公室的高级软件工 via: https://opensource.com/article/17/4/flashback-internet-mocking-tool -作者:[ Shangshang Feng][a] +作者:[Shangshang Feng][a] 译者:[geekpi](https://github.com/geekpi) 校对:[jasminepeng](https://github.com/jasminepeng)