/ iOS 开发

使用js脚本来测试API

编写语言:Nodejs

使用框架:frisby

frisby官网文档:http://frisbyjs.com/docs/api/

frisby的github:https://github.com/BrightsCode/frisby

使用步骤:

以下命令如果执行失败,请尝试在命令前面添加sudo再次执行。

1.安装node和包管理工具npm:

如果没有安装brew,先用下面命令安装brew:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后使用brew安装node和npm

brew install node
brew install npm

或者直接访问nodejs官网安装下载对应的安装文件安装。

2.安装frisby:

npm install frisby

3.安装jasmine-node:

Frisby is built on top of the Jasmine BDD framework, and uses the jasmine-node.

npm install jasmine-node -g

4.运行脚本

在Terminal下cd到js文件所在目录,运行以下命令来执行脚本。

jasmine-node .

或者 “jasmine-node + 文件名” , 比如:

jasmine-node test_spec.js

说明

1.js文件名必须为<*>_spec.js

Files must end with spec.js to run with jasmine-node. Suggested file naming is to append the filename with _spec, like mytests_spec.js and moretests_spec.js

2.代码示例说明

//创建一个名为frisby_login的测试单元
var frisby_login = require('frisby');    

var frisby = require('frisby'); 		  

//创建一个URL变量存储BaseURL
var URL = 'http://www.abc.com/';			  

//登陆接口测试
//使用frisby_login创建一个POST请求
frisby_login.create('Login test')       
  .post(URL + 'auth/token', {
        name: "ceshi",
        password: "ceshi",
        grant_type: "password",
        scope: "merchant"
      })
      
  //输出请求结果
  //.inspectJSON()  
    
  //判断StatusCode,如果请求成功,这里填的400,测试将断言失败
  .expectStatus(200)  
  
  //判断请求结果Header类型
  .expectHeaderContains('content-type', 'application/json')
  
  //expectJSONTypes描述的是在expectStatus对应的状态下返回的结果类型
  .expectJSONTypes({					
    access_token: String,
    token_type: String,
    expires_in: Number,
    refresh_token: String,
    scope: String,
    owner_id: Number,
    roles: Array
  })
  
  //afterJSON在请求完成后调用,function(data)中得data为返回的json,可以直接使用key来获取value,例如data.access_token
  .afterJSON(function(data) {
    frisby.globalSetup({ // globalSetup is for ALL requests
  request: {
    headers: { 'Authorization': 'Bearer ' + data.access_token }
  }
  });
  
  //店铺信息测试
  //登陆接口不需要Authorization参数,使用frisby_login来请求,其它接口都需要Authorization参数,所以对应的测试单元必须写到afterJSON代码块中  
  frisby.create('Store info test')
    .get(URL + '/store/info')
    //.inspectJSON()
    .expectStatus(200)
    .expectHeaderContains('content-type', 'application/json')
    .expectJSONTypes({
      id: Number,
      name: String,
      notice: String,
      address: String,
    })
    //.toss();用来表示一个测试单元结束
  .toss();
  })
.toss();