目录

接口测试笔记

接口测试笔记

3、Postman

Postman介绍

Postman介绍

  • Postman

    是一款非常流行的支持

    HTTP/HTTPS

    协议的接口调试与测试工具,其功能非常强大,

    能够

    发送任何类型的

    HTTP请求

    (GET, HEAD, POST,PUT…),

    附带任何数量的参数

    HTTP headers

    支持不同的认证机制

https://i-blog.csdnimg.cn/direct/34fcb66ff36e4ed1940b9d9ca2545959.png

https://i-blog.csdnimg.cn/direct/0fbe8be7d0f649dca818edbae336d1e3.png

主要功能

主要功能包括

  • 模拟各种

    http requests

  • Collection

    功能

  • 人性化的

    Response

    整理

  • 内置测试脚本管理

  • 设定变量与环境

Postman简单介绍

HTTP请求:method,url ,headers ,body

https://i-blog.csdnimg.cn/direct/8a26b26878a4472f8f229e96618c3b95.png

Postman发起接口请求
  • 在接口测试中,接口请求信息中,重点需要关注四大信息:

    接口

    URL

    地址、请求方法、请求头以及请求参数

  • 接口的响应中,测试关注的重点在于响应的正文,同时可能对响应头和状态码进行校验

Postman获取响应
  • Postman请求发起之后得到响应结果,包括响应主体、响应头、cookies、状态码、请求时间、报文数据大小等信息
  • 而接口测试,主要就是对响应得到的信息进行验证,是否与用例设计预期相符

https://i-blog.csdnimg.cn/direct/7bea6ecd683a4952be817ee4f37b97a4.png

Post请求的body 分类

使用Content-Type来指定不同格式的请求信息,在请求头里设置,默认为text/html

https://i-blog.csdnimg.cn/direct/81fe83c7c54a44eabf6a4658aeeec030.png

Content -TypePostman body 格式作用
multipart/form-dataform-data将 表单 的数据处理为一条消息,由 boundary 隔离,既可以上传多个 文件 (包括二进制文件),也可以上 传键值 对
application/x-www-from- urlencodedx-www-from- urlencoded将表单内的数据转换为键值对, 比如, name= tom&age = 23
text/plainraw可以上传任意格式的文本,可以上传 text 、 JSON 、 xml 、 html 等
application/octet-streambinary只可以上传二进制数据,一次只能上传一个 文件
GraphQL针对 Graph (图状数据)进行查询
  • 请求前脚本(pre-request scripts)设置请求前置操作如设置变量等
  • 请求后(Tests)对状态码、响应头、响应正文等信息进行断言操作

JSON 介绍

JSON(JavaScript Object Notation )轻量级的数据交换语言,以文字为基础,且易于阅读。

  • 对象(object):一个对象以“{”开始,并以“}”结束。每个对象包含一系列排序的名称/值对,每个名称/值对之间使用“,”区分。
  • 名称/值(collection):名称和值之间使用“:”隔开,一般的形式是:{key1:value,key2:value2}

https://i-blog.csdnimg.cn/direct/15b8daa5157f45e49d530d693b3aa4fe.png

JSON数据类型

数值(整数或浮点数)

示例:”age”:86

”price”:123.78

“temperature “:-3.5

“speed_of_light”:3.12e12

null(空值)

null(空值)

示例:”name”:”tom”

”name”:null

”name”:””

注意:””表示的是空字符串,而null表示的才是空值

逻辑值(true或false)

示例:”student”:true

对象(在花括号中)

示例:”address”:{

“line”: 123 yuhua road”,

“city”:”shijiazhuang”,

“postalCode”:”051220”,

“country”:”China”

}

数组(在方括号中)

示例:“employees”: [

{ “firstName”:“Bill” , “lastName”:“Gates” },

{ “firstName”:“George” , “lastName”:“Bush” },

{ “firstName”:“Thomas” , “lastName”:“Carter” }

]

数据在键值对中{“ name”:”tom ”}
数据由逗号分隔{“ name”:”tom ”, ”phone”:” 13899008877”}
方括号保存数组{“ name”:”tom ”, ”phone”:”13899008877”, “Education”:[{“ school”:”AAA”,”profession”:”BB ”}]}
花括号保存对象{“name”:”tom”,”phone”:”13899008877”, ”address”:{ “line”: 123 yuhua road”, “city”:” shijiazhuang ”, “postalCode”:”051220”, “ country”:”China ” } }

使用 PostMan 测试 HTTP 请求

Get请求接口测试

https://i-blog.csdnimg.cn/direct/76fe88d6cb844bc18f3ed37a2d07bae9.png

HTTP请求格式-POST方法

请求(Request)

请求行POST / xinhu / index.php?a = check&m =login HTTP/1.1
请求头Accept : ext / html,application / xhtml+xml Accept-Encoding: gzip , deflate Accept-Language:zh-CN,zh;q =0.8,en-US;q=0.5,en;q=0.3 Connection:keep-alive Host : localhost:8032
请求正文adminuser =YWRtaW4%3A&=123456&rempass=0&button=& jmpass = false&device =1517376146707&adminpass=MTIzNDU2

响应(Response)

状态行HTTP1.1 200 OK
响应头Connection:Keep-Alive Content-Encoding:gzip Content-Length:1234 Content-Type:text/html;charset=utf-8 Date:Mon, 05 Feb 2018 02:43:40 GMT
响应正文{“success”:true,“face”:“http://localhost:8032/xinhu/upload/face/1.jpg”}

POST请求接口测试

https://i-blog.csdnimg.cn/direct/1ab21ec23d0b4b7bafd736f5dbf571c8.png

https://i-blog.csdnimg.cn/direct/c30c5d71ede04067bc14034143c571cc.png

跟踪会话,弥补HTTP协议无状态的不足

https://i-blog.csdnimg.cn/direct/08c2ecd0c07f41308f987a18e2d05779.png

如何带上用户Cookie信息

发送一个请求时,可能会要求发送这个请求前,先做用户认证(登录)

PostMan 内置参数

时间戳:{ {$timestamp}}

  • {“tag”:{“name”:“石家庄{ {$timestamp}}”}}

随机生成整数0~1000:{ {$randomInt}}

  • {“tag”:{“id”:104,“name”:“南京{ {$randomInt}}"} }

生成随机的GUID的字符串:{ {$guid}}

  • {  “tag” : { “name” : “石家庄{ {$guid}}” } }

环境变量和全局变量

  • 接口测试过程中,经常需要使用已经设定好的参数或者从其他接口的返回中获取变化的参数。Postman提供了变量的机制供这种场景使用。
  • Postman变量分为全局变量和环境变量两种,在接口请求中可以选择一组环境变量使用。而全局变量可供所有请求使用。使用变量名的格式为{ {变量名}}调用变量的值。

https://i-blog.csdnimg.cn/direct/6598ce8d0b8e41c99fbb8e7942f8196a.png

  • 环境变量用于环境

//提取token的值

var jsonData=JSON.parse(responseBody)

console.log(jsonData.access_token)

pm.environment.set(“token1”, jsonData.access_token);

  • 全局变量用于用例

pm.globals.set(“token1”, jsonData.access_token);

断言

  • 断言响应的状态码是200,状态断言

pm.test(“Status code is 200”, function () {

pm.response.to.have.status(200);

});

  • 断言响应正文中包括有一个指定的字符串,业务断言

pm.test(“Body matches string”, function () {

pm.expect(pm.response.text()).to.include(“string_you_want_to_search”);

});

  • 断言响应正文做json检查,业务断言

pm.test(“Your test name”, function () {

var jsonData = pm.response.json();

pm.expect(jsonData.value).to.eql(100);

});

  • 断言响应正文等于一个字符串

pm.test(“Body is correct”, function () {

pm.response.to.have.body(“response_body_string”);

});

  • 断言响应头包含指定的响应头

pm.test(“Content-Type is present”, function () {

pm.response.to.have.header(“Content-Type”);

});

  • 断言接口请求的时间小于200ms

pm.test(“Response time is less than 200ms”, function () {

pm.expect(pm.response.responseTime).to.be.below(200);

});

  • 断言请求返回的状态码在指定的范围内

pm.test(“Successful POST request”, function () {

pm.expect(pm.response.code).to.be.oneOf([201, 202]);

});

  • 断言状态码信息包含指定的字符串

pm.test(“Status code name has string”, function () {

pm.response.to.have.status(“Created”);

});

全局断言多用于状态断言

https://i-blog.csdnimg.cn/direct/4d06c3310a7a4e4095a4139e3753e63f.png

接口关联(面向场景的接口测试)

JSON提取器

var jsonData=JSON.parse(responseBody)

console.log(jsonData.access_token)

pm.globals.set(“token1”,jsonData.access_token);

正则表达式提取器

var flag_id = responseBody.match(new RegExp(’“id”:(.*?),’))[1]

console.log(flag_id)

pm.globals.set(“flag_id “,flag_id);

responseBody代表响应正文

测试集与数据驱动

为了更方便地管理接口请求的执行,可以通过postman测试集(collection)来完成测试的操作,每一个测试请求可以看成一个测试用例,collections能够一次管理多个测试用例来执行

https://i-blog.csdnimg.cn/direct/2567f14e8c234bb881720d87d344ed2c.png

批量执行

https://i-blog.csdnimg.cn/direct/98859a18832e4bf99b4e9e6158b34b4b.png

数据驱动

https://i-blog.csdnimg.cn/direct/acd630d2d39c4dc4a71a7e4e17abd8f3.png

PostMan 加密

常见加密方式三种方式:

  • 加密算法(MD5、RSA、DES、AES、SHA)
  • 自定义加密算法
  • 接口签名

CryptoJS 是一个纯 javascript 写的加密算法类库

  • var user=CryptoJS.MD5(“admin”).toString().toUpperCase();
  • var pass=CryptoJS.MD5(“123456”).toString().toUpperCase();
  • pm.globals.set(“username”,user)
  • pm.globals.set(“password”,pass)

Newman时一款基于node.js开发的可以运行Postman的工具,使用Newman可以直接从命令行运行和测试postman集合。

  • 安装node.js ||  node -v
  • 安装newman: npm install -g newman  ||  npm -v
  • 从PostMan测试集导出文件 .json
  • 命令行运行 newman run ***.json