【问题标题】:How to verify the response from api while writing test with Cucumber使用 Cucumber 编写测试时如何验证 api 的响应
【发布时间】:2018-09-03 17:45:16
【问题描述】:

我正在处理一个Rails 项目,我必须在其中使用 Cucumber 测试 API。我必须测试一个 POST 类型的 API,并且我需要验证它的响应。我尝试过类似的方法:

When(/^I make abc API call$/) do
  @url = 'http://example.com/api/abc'
  @params = '{
                data: {
                  type: "abc",
                  attributes: {
                    title: "example",
                    all_day: "0",
                    start_date: "1409175049",
                    end_date: "1409175049"
                  }
                }
              }'
  @login_token = 'pHufpGplLTYJnmWh5cqKoA'
end

Then(/^It should return success for abc$/) do
  post 'http://example.com/api/abc', body: @params,
                                 headers: { 'Accept' => 'application/json',
                                            'login_token' => @login_token,
                                            'Content-Type' => 'application/json' }
end

但我不确定如何验证响应中的状态代码和响应中的任何属性。比如:

Then(/^It should return success for abc$/) do
  post 'http://example.com/api/abc', body: @params,
                                 headers: { 'Accept' => 'application/json',
                                            'login_token' => @login_token,
                                            'Content-Type' => 'application/json' }
  .to_return(status: 200, body: '{ title: "abc" }')
end

我怎样才能实现它?

【问题讨论】:

    标签: ruby-on-rails cucumber


    【解决方案1】:

    如果您使用的是Capybara,这应该适合您:

    Then /^I should get a response with status (\d+)$/ do |status|
      response = post 'http://example.com/api/abc', body: @params,
                                                    headers: { 'Accept' => 'application/json',
                                                               'login_token' => @login_token,
                                                               'Content-Type' => 'application/json' }
      response.status_code.should include(status.to_i)
    end
    

    【讨论】:

    • 谢谢,我也尝试了同样的方法,现在我面临两个问题,一个是它没有设置标题,它在正文中发送这个标题部分有什么想法吗?另一个问题是我已经通过了 url 来测试 api,但它仍然没有调用该 url,而是在应用程序中检查
    • 通常情况下,您会使用 page.driver.header 'Accept', 'application/json' 之类的内容。但是 Capybara 用于测试用户行为而不是 API。我会使用 MiniTest、Rspec 或其他测试套件进行 API 测试。我认为您在这里选择的工具会时不时地给您带来麻烦。如果我的回答有帮助并解决了最初的问题,请记住将其标记为正确答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多