Ruby on rails 第三方API的持续监控;轨道测试
我们希望设置自动作业(通过Ruby on rails 第三方API的持续监控;轨道测试,ruby-on-rails,ruby,rspec,tdd,bdd,vcr,Ruby On Rails,Ruby,Rspec,Tdd,Bdd,Vcr,我们希望设置自动作业(通过Jenkins)以在第三方API关闭或他们部署了不兼容的API时发出警报 我说的是针对真正的httpapi进行测试,而不是一个mock,但是由于我们已经使用rspec编写了mock,我不确定我们是否应该通过编写两个独立的测试来重复这项工作 有人有过这种经历吗? (如果其他工具可以提供帮助,我不限于Ruby/Rspec)mock用于测试您自己的代码,而不使用真实的API。您需要测试真正的API 因此,我认为您必须在RSpec中编写一组测试,例如第三方API的不引人注目的测
Jenkins
)以在第三方API关闭或他们部署了不兼容的API时发出警报
我说的是针对真正的httpapi
进行测试,而不是一个mock,但是由于我们已经使用rspec
编写了mock,我不确定我们是否应该通过编写两个独立的测试来重复这项工作
有人有过这种经历吗?
(如果其他工具可以提供帮助,我不限于
Ruby/Rspec
)mock用于测试您自己的代码,而不使用真实的API。您需要测试真正的API
因此,我认为您必须在RSpec中编写一组测试,例如第三方API的不引人注目的测试。我所说的“不引人注目”是指不发出意外的“删除”API请求,或者通过单个测试套件运行来使用所有每日请求API限制 不知道是否存在指定的API测试工具。
至于我,我使用RSpec成功地测试了我自己的远程api/服务器。你看过吗?使用它,您可以“记录您的测试套件的HTTP交互,并在未来的测试运行中重播它们,以实现快速、确定、准确的测试”。在测试来自外部API的预期响应时,我将它与RSpec一起使用,我认为它很棒。我鼓励你检查带有标签的StackOverflow问题,如果你认为这些问题对你有用的话
不确定Jenkins的集成,但当我使用VCR时,我自动化了一些常规任务,在这些任务中我需要使用(“Ruby中的Cron作业”)。不是真正的连续,但有点自动化 几个月前我遇到这种情况时,我做了以下几件事:
我这样做是因为我不可能猜测/知道live API将提供什么内容。我要对现有的测试套件做两件事,以便它可以在live中使用,第一件事是使用
description
和it
块获取元数据()。第二种方法使用共享_上下文
的功能获取块
首先,用元数据标记要针对真实API运行的规范。例如,您想知道这些可以真正运行,例如
describe "Hitting the API with a call", :can_be_real do
# …
end
然后可以从命令行运行这些规范
第二件事,是用真实的东西代替模拟。这取决于您如何定义模拟,是否使用了之前的或let
,以及模拟的程度。下面是一个愚蠢的例子:
require 'rspec'
RSpec.configure do |c|
c.treat_symbols_as_metadata_keys_with_true_values = true
end
shared_context "all my mocks and stubs" do
let(:this) { false }
end
describe "a", :real do
include_context "all my mocks and stubs" do
let(:this) { true } if ENV["REAL_API_CALL"] == 'true'
before do
stub_const( "URI", Class.new ) unless ENV["REAL_API_CALL"] == 'true'
end
end
it "should be real when it's real" do
this.should == true
end
it "should escape things when it's real" do
URI.should respond_to :escape
end
end
通过bin/rspec example.rb运行文件时,输出为:
a
should be real when it's real (FAILED - 1)
should escape things when it's real (FAILED - 2)
Failures:
1) a should be real when it's real
Failure/Error: this.should == true
expected: true
got: false (using ==)
# ./example.rb:19:in `block (2 levels) in <top (required)>'
2) a should escape things when it's real
Failure/Error: URI.should respond_to :escape
expected URI to respond to :escape
# ./example.rb:22:in `block (2 levels) in <top (required)>'
Finished in 0.00349 seconds
2 examples, 2 failures
因此,您可以通过多种方式更改规范的上下文,从而允许您从命令行(以及Jenkins)获得所需的控制级别。您可能希望使用其他元数据来标记规范,例如是否可以安全运行,是否需要很长时间等。这是我们过去所做的。您可以安排Jenkins作业,检查您是否仍然可以每晚或每周与第三方API交互,它将通知您相关API的更改。还有一件事。。。作为其他人依赖的服务,我们甚至鼓励这样做,并设置了一个电子邮件帐户,当客户机的构建因我们的API更改而失败时,他们可以通过自动测试通知我们。通过这种方式,我们可以知道什么时候我们对客户产生了负面影响。我最近发现了令人厌倦的gem,它似乎是“包装”您对任何API的访问并编写相当简单的测试的好方法(参见Gilt)@bcarlso关于客户测试的电子邮件的很好的提示。我同意,VCR非常适合这样做。本质上是记录某种“合同”。然后可以重新记录并检查差异。
a
should be real when it's real
should escape things when it's real
Finished in 0.00301 seconds
2 examples, 0 failures