cucumber-api安装与试用
2015-06-22 11:28
393 查看
cucumber-api,用于验证响应格式为JSON的Web Service API。
可以用来单独测试Web Service API,或者与Calabash配合进行手机APP和Web Service API的联合测试。
主页: https://rubygems.org/gems/cucumber-api
源代码: https://github.com/hidroh/cucumber-api
安装后版本:1.9.3p194
可以用来单独测试Web Service API,或者与Calabash配合进行手机APP和Web Service API的联合测试。
主页: https://rubygems.org/gems/cucumber-api
源代码: https://github.com/hidroh/cucumber-api
安装步骤:
以Debian环境为例,其他环境如Redhat,Windows等主要是Ruby安装命令的差别。安装Ruby 1.9.3
说明: cucumber-api 依赖ruby版本要不低于1.9.3sudo 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/[/code] 再次查看gem源:shen@debian:~$ sudo gem sources --list *** CURRENT SOURCES *** http://ruby.taobao.org/[/code] 安装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.featureshen@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 |试运行sample:
输入命令cucumber:
上述sample因缺少文件 features/schemas/topstories.json,导致第一个Scenario失败
下载 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 bodyshen@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 "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:![]()
相关文章推荐
- grails建域类时报ORA-00904
- JavaWeb网上商城的设计
- 【20150622】自动按日期分区的分区表建立
- AVR单片机学习笔记
- Error evaluating ORM mappings block for domain
- Android动态加载框架DL的架构与基本原理解析
- 何为 ISAPI
- 消息队列实现接收发送的例子
- getchar()
- 计算机硬件
- Hadoop2.2.0已经遗弃的属性名称
- grails,groovy无限树递归
- Java--Reflect(反射)专题6——通过反射了解集合泛型的本质
- maya2nuke 传递模型和贴图的关系
- JavaWeb网上商城的反思
- 几本自然语言处理入门书
- php读取der格式证书乱码解决方法
- 万物皆可“互联网+”
- BZOJ3173 [Tjoi2013]最长上升子序列(离线处理+Treap+LIS)
- KT学算法(二)——循环有序数组查找指定元素