我使用sinatra编写了一个基本的REST API。
有谁知道为它编写测试的最佳方法?我想用Ruby做这件事。
我使用curl进行了初步测试。但我想做一些更强大的事情。这是我的第一个API - 有什么具体的我应该测试吗?
答案 0 :(得分:6)
最好的方法是意见问题:)就个人而言,我喜欢简单干净。使用minitest,Watir和rest-client等工具,您可以对REST接口进行非常简单的测试,并通过实际浏览器测试您的Web服务(支持所有主流浏览器)。
#!/usr/bin/ruby
#
# Requires that you have installed the following gem packages:
# json, minitest, watir, watir-webdrive, rest-client
# To use Chrome, you need to install chromedriver on your path
require 'rubygems'
require 'rest-client'
require 'json'
require 'pp'
require 'minitest/autorun'
require 'watir'
require 'watir-webdriver'
class TestReportSystem < MiniTest::Unit::TestCase
def setup
@browser = Watir::Browser.new :chrome # Defaults to firefox. Can do Safari and IE too.
# Log in here.....
end
def teardown
@browser.close
end
def test_report_lists # For minitest, the method names need to start with test
response = RestClient.get 'http://localhost:8080/reporter/reports/getReportList'
assert_equal response.code,200
parsed = JSON.parse response.to_str
assert_equal parsed.length, 3 # There are 3 reports available on the test server
end
def test_on_browser
@browser.goto 'http://localhost:8080/reporter/exampleReport/simple/genReport?month=Aug&year=2012'
assert(@browser.text.include?('Report for Aug 2012'))
end
end
只需执行脚本即可运行测试用例。 Ruby有许多其他测试系统和REST客户端,可以以类似的方式工作。
答案 1 :(得分:4)
您可以查看此方法http://anthonyeden.com/2013/07/10/testing-rest-apis-with-cucumber-and-rack.html
虽然许多人可能会说使用Cucumber实际上是更多的应用程序或验收测试而不是单元测试,但它确实包含一种创建HTTP标头并形成http请求的方法,我猜这可能是你被卡住的地方?
我个人对此没有任何问题,因为如果你真的要对API进行单元测试,你可能不得不模拟api可能正在讨论的任何代码单元(例如,你是否持久化数据) )
看到我是QA的家伙而不是开发者,我会非常高兴使用黄瓜并在那个级别进行测试,但是当开发单元测试时我也非常感激,所以你可能会使用rSpec代替Cuke,也许是“机架测试”的提示对你想要完成的事情有用。
答案 2 :(得分:3)
您可以尝试使用airborne
,这是为此目的而编写的框架:
https://github.com/brooklynDev/airborne
您可以针对实时API或针对Sinatra,Grape,Rails应用程序进行测试。
答案 3 :(得分:0)
我会使用fakeweb gem对Web服务进行单元测试。
答案 4 :(得分:0)
我建议使用 client-api
宝石-它具有许多api automation
特有的有用功能,易于使用和维护脚本。
https://github.com/prashanth-sams/client-api
有趣的是,这个gem在自己内部绑定了一个api自动化框架。因此,您甚至不需要框架设置。
client-api
库的主要功能:
Example specs
:https://github.com/prashanth-sams/client-api/tree/master/spec/client
在spec_helper.rb
文件中添加此配置代码段:
ClientApi.configure do |config|
config.base_url = 'https://reqres.in'
config.headers = {'Content-Type' => 'application/json', 'Accept' => 'application/json'}
config.basic_auth = {'Username' => 'ahamilton@apigee.com', 'Password' => 'myp@ssw0rd'}
config.json_output = {'Dirname' => './output', 'Filename' => 'test'}
config.time_out = 10 # in secs
config.logger = {'Dirname' => './logs', 'Filename' => 'test', 'StoreFilesCount' => 2}
end
RSpec测试场景如下,
api = ClientApi::Api.new
it "GET request" do
api.get('/api/users')
expect(api.status).to eq(200)
expect(api.message).to eq('OK')
end
it "POST request" do
api.post('/api/users', {"name": "prashanth sams"})
expect(api.status).to eq(201)
end
注意:这是一个活跃的项目,可根据用户要求处理问题和新功能