当您发布带有测试的 gem 时,您如何保护测试中的 API 密钥?

How do you protect your API key in your tests when you publish a gem with tests?

我在测试中使用 rspec,当我在 github 上发布我的 gem 时,我想保护我的 API 密钥。 这样做的最佳做法是什么?我应该使用 VCR 然后从 git 日志中删除我的密钥吗?

一般来说,这是我过去在类似情况下使用过的三种方法。您选择哪个将取决于您的具体情况。

  • 测试用户供应API密钥

如果您的测试套件需要或至少更喜欢使用实际 API 密钥的实际 API 调用,您可以让测试的调用者在 运行 时提供凭据测试。

两种最常用的方法是:

  • 项目中的文件具有众所周知的名称,但未签入版本控制。包括一个带有假凭据的示例,该凭据已签入版本控制,以及用户在调用测试套件之前将其真实凭据提供到真实文件中的说明。
  • 从环境变量中读取。包括用户在调用测试套件之前设置适当环境变量的说明。

否则,

  • 模拟 API

这可能是您描述的 VCR 方法。这也可能是将 API 调用修补为 return 一些假结果。

  • 独立于 API 交互测试您的域特定代码

假设 API 和 API 客户端的行为符合您的预期。然后,分解出构建 API 输入并处理 API 输出的代码部分。生成输入的测试属性。使用已知或假输出测试输出处理器的行为。

最后警告一下:

如果您曾经将 API 密钥提交给版本控制,它将在历史记录中可见。如果你曾经推送过 public 托管服务,它就会暴露在互联网上,最值得注意的是,它会暴露给专门的机器人,这些机器人会抓取新推送的提交以获取敏感凭证。如果是您,请立即更改您的凭据!

我目前找不到原始博客 post,但至少有一份报告称有人不小心将他们的 AWS 凭证推送到 GitHub。他们随后醒来发现一张数千美元的钞票。