微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cucumber-api Web Service API 验证

程序名称:cucumber-api

授权协议: Apache

操作系统: 跨平台

开发语言: Ruby

cucumber-api 介绍

cucumber-api,用于验证响应格式为JSON的Web Service API。可以用来单独测试Web Service API,或者与Calabash配合进行手机APP和Web Service API的联合测试。

安装步骤:

以Debian环境为例,其他环境如Redhat,Windows等主要是Ruby安装命令的差别。

安装 Ruby 1.9.3

说明: cucumber-api 依赖ruby版本要不低于1.9.3

sudo apt-get install ruby
sudo apt-get install ruby1.9.1-dev

安装后版本:1.9.3p194

shen@debian:~$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
shen@debian:~$ gem -v 1.8.23

安装 Cucumber

先设置淘宝的 gem 源:

sudo gem sources --remove http://rubygems.org/  sudo gem sources -a http://ruby.taobao.org/

再次查看 gem 源:

shen@debian:~$ sudo gem sources --list *** CURRENT SOURCES *** http://ruby.taobao.org/

安装cucumber:

sudo gem install cucumber

查看已安装 cucumber 版本:

shen@debian:~$ cucumber --version 2.0.0

安装 cucumber-api

sudo gem install cucumber-api

查看 gem list:

shen@debian:~$ gem list

*** LOCAL GEMS ***

addressable (2.3.8)
builder (3.2.2)
cucumber (2.0.0)
cucumber-api (0.3)
cucumber-core (1.1.3)
diff-lcs (1.2.5)
domain_name (0.5.24)
gherkin (2.12.2)
http-cookie (1.0.2)
json-schema (2.5.1)
jsonpath (0.5.6)
mime-types (2.6.1)
multi_json (1.11.1)
multi_test (0.1.2)
netrc (0.10.3)
rest-client (1.8.0)
unf (0.1.4)
unf_ext (0.0.7.1)

试运行sample项目

创建cucumber项目

shen@debian:~/bdd-api-sample$ cucumber --init
  create   features
  create   features/step_deFinitions
  create   features/support
  create   features/support/env.rb
shen@debian:~/bdd-api-sample$ find
.
./features
./features/step_deFinitions
./features/support
./features/support/env.rb

在features/support/env.rb中加入 require ‘cucumber-api’:

shen@debian:~/bdd-api-sample$ cat features/support/env.rb require 'cucumber-api'

下载 https://github.com/hidroh/cucumber- api/blob/master/features/sample.feature

shen@debian:~/bdd-api-sample$ touch features/sample.feature
shen@debian:~/bdd-api-sample$ vi features/sample.feature 
shen@debian:~/bdd-api-sample$ cat features/sample.feature # https://github.com/HackerNews/API Feature: Hacker News REST API validation Scenario: Verify top stories JSON schema When I send and accept JSON And I send a GET request to https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty Then the response status should be 200 And the JSON response should follow features/schemas/topstories.json Scenario Outline: Verify item JSON schema When I send and accept JSON And I send a GET request to https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty Then the response status should be 200 And the JSON response root should be array When I grab $[0] as id And I send a GET request to https://hacker-news.firebaseio.com/v0/item/{id}.json with: | print  |
      | pretty | Then the response status should be 200 And the JSON response root should be object And the JSON response should have <optionality> key <key> of type <value type> Examples: | key   | value type | optionality |
      | id    | numeric    | required    |
      | score | numeric    | required    |
      | url   | string     | optional    |

下载 <https://github.com/hidroh/cucumber-

api/blob/master/features/schemas/topstories.json> :

shen@debian:~/bdd-api-sample$ cat features/schemas/topstories.json 
{ $schema: http://json-schema.org/draft-04/schema#, type: array, items: { type: number }
}

试运行sample:

设置verbose输出

方式1: 设置环境变量 cucumber_api_verbose=true
再次输入cucumber后,多输出了RestClient的http请求和响应信息,可以帮助调试。

export cucumber_api_verbose=true

 

方式2: cucumber -p verbose
前提是 config/cucumber.yml已经正确设置:

shen@debian:~/bdd-api-sample$ cat config/cucumber.yml # config/cucumber.yml ##YAML Template ---
verbose : cucumber_api_verbose=true

输入命令cucumber -p verbose也可以看到RestClient的输出

Step扩展

定义3个常用的扩展指令

  • 设置Header,就是curl的-H参数的内容

  • 打印response body

  • 打印格式化后的response body

    shen@debian:~/bdd-api-sample$ cat features/step_deFinitions/api_steps.rb Given(/^I set header key ”(.?)” and value ”(.?)”$/) do |key, value| @headers = {} if @headers.nil?
      p_value = value @grabbed.each { |k, v| p_value = v if value == %/{#{k}}/ } unless @grabbed.nil?
      p_value = File.new %-#{Dir.pwd}/#{p_value.sub ‘file://’, ’‘}- if %/#{p_value}/.start_with? “file://” @headers[%/#{key}/] = p_value end Then(/^I dump the JSON response$/) do puts @response.to_s end Then(/^I dump the pretty JSON response$/) do puts @response.to_json_s end

    shen@debian:~/bdd-api-sample$ cat features/baidu-map.feature Feature: 根据ip获取地理位置 Scenario: get location by ip When I send a GET request to http://api.map.baidu.com/location/ip?ip=202.198.16.3&coor=bd09ll&ak=60IFKTCwlIsspDcGfkx36L8u” Then I dump the pretty JSON response Then the response status should be “200” shen@debian:~/bdd-api-sample$

cucumber增加参数-p verbose时输出response:

cucumber无参数-p
verbose时不输出response:

cucumber-api 官网

https://rubygems.org/gems/cucumber-api

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐