cucumber-api Web Service API 验证开源项目

我要开发同款
匿名用户2015年06月25日
9阅读
开发技术Ruby
所属分类开发工具、测试工具
授权协议Apache

作品详情

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

安装步骤:

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

安装Ruby1.9.3

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

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

安装后版本:1.9.3p194

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

先设置淘宝的gem源:

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

再次查看gem源:

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

安装cucumber:

sudo gem install cucumber

查看已安装cucumber版本:

shen@debian:~$ cucumber --version 2.0.0安装cucumber-apisudo gem install cucumber-api

查看gemlist:

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.rbshen@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.featureshen@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": "https://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-pverbose前提是config/cucumber.yml已经正确设置:

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

输入命令cucumber-pverbose也可以看到RestClient的输出:

Step扩展定义3个常用的扩展指令

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

打印responsebody

打印格式化后的responsebody

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 endshen@debian:~/bdd-api-sample$ cat features/baidu-map.feature Feature: 根据ip获取地理位置 Scenario: get location by ip When I send a GET request to "https://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增加参数-pverbose时输出response:

cucumber无参数-pverbose时不输出response: 

查看全文
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论