Web Service API 验证 cucumber-api

码农软件 · 软件分类 · 测试工具 · 2019-11-22 07:58:08

软件介绍

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: 输入图片说明

本文地址:https://www.codercto.com/soft/d/19524.html

A Byte of Python

A Byte of Python

Swaroop C H / Lulu Marketplace / 2008-10-1 / USD 27.98

'A Byte of Python' is a book on programming using the Python language. It serves as a tutorial or guide to the Python language for a beginner audience. If all you know about computers is how to save t......一起来看看 《A Byte of Python》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具