如何测试JSON REST API

Dma*_*100 15 ruby

我是红宝石的新手(第一天使用红宝石)所以请原谅任何新手问题和缺乏理解.

我正在尝试验证对http标注的响应.

例如,假设端点如下:

https://applicationname-api-sbox02.herokuapp.com 
Run Code Online (Sandbox Code Playgroud)

并且,我正在尝试通过发送这样的get请求来验证用户:

get_response = RestClient.get( "https://applicationname-api-sbox02.herokuapp.com/api/v1/users", 
                    {
                        "Content-Type" => "application/json",
                        "Authorization" => "token 4d012314b7e46008f215cdb7d120cdd7",
                        "Manufacturer-Token" => "8d0693ccfe65104600e2555d5af34213"
                    }
                ) 
Run Code Online (Sandbox Code Playgroud)

现在,我想验证响应并执行以下操作: - 解析响应以确保它是有效的JSON - 执行一些验证并验证JSON是否具有正确的数据(例如,验证id == 4) - 如果出现错误遇到,使用'raise'方法引发异常.

在我第一次虚弱的尝试中,我尝试了以下方法:

puts get_response.body
if get_response.code == 200
puts "********* Get current user successful"
else
puts "Get current user failed!!"
end 
Run Code Online (Sandbox Code Playgroud)

现在,这返回了获取当前用户的成功,但是如何实际解析json,验证正确的id,并在发生错误时引发异常?

ire*_*ick 17

写一个测试,而不是提出异常.

一个简单的方法,使用std lib中的json解析器和单元测试框架:

require 'minitest/autorun'
require 'rest_client'
require 'json'

class APITest < MiniTest::Unit::TestCase
  def setup
    response = RestClient.get("https://applicationname-api-sbox02.herokuapp.com/api/v1/users", 
      {
         "Content-Type" => "application/json",
         "Authorization" => "token 4d012314b7e46008f215cdb7d120cdd7",
         "Manufacturer-Token" => "8d0693ccfe65104600e2555d5af34213"
      }
    ) 
    @data = JSON.parse response.body
  end

  def test_id_correct
    assert_equal 4, @data['id']
  end
end
Run Code Online (Sandbox Code Playgroud)

执行 ruby $filename

JSON.parse将JSON字符串解析为ruby 哈希

开始使用minitest

如果您使用的是ruby 1.8,则需要安装json gem并安装minitest gem,或者切换到较旧的testunit API.如果你选择后者,那么你需要改变require 'minitest/autorun'- > require 'test/unit'MiniTest::Unit::TestCase- >Test::Unit::TestCase