请求区域介绍

1 Authorization:身份验证,主要用来填写用户名密码,以及一些验签字段,postman有一个helpers可以帮助我们简化一些重复和复杂的任务。当前的一套helpers可以帮助你解决一些authentication protocols的问题。;

2 Headers:请求的头部信息

3 Body:post请求时必须要带的参数,里面放一些key-value键值对

4 **Pre-requerst Script:**可以让你在 请求之前自定义请求数据,这个运行在请求之前,语法使用JavaScript语句。

5 tests:tests标签功能比较强大,通常用来写测试,它是运行在请求之后。支持JavaScript语法。postman每次执行request的时候,会执行tests。测试结果会在tests的tab上面显示一个通过的数量以及对错情况。这个后面会进行详解,它也可以用来设计用例,比如要测试返回结果是否含有某一字符串

6 form-data:,它将表单数据处理为一条消息,以标签为单元,用分隔符分开。既可以单独上传键值对,也可以直接上传文件(当上传字段是文件时,会有Content-Type来说明文件类型,但该文件不会作为历史保存,只能在每次需要发送请求的时候,重新添加文件。);post请求里较常用的一种

7 x-www-form-urlencoded:对应信息头-application/x-www-from-urlencoded,会将表单内的数据转换为键值对;

8 raw:可以上传任意类型的文本,比如text、json、xml等,所有填写的text都会随着请求发送;

9 binary:对应信息头-Content-Type:application/octet-stream,只能上传二进制文件,且没有键值对,一次只能上传一个文件, 也不能保存历史,每次选择文件,提交;

传递List集合参数

后端为@RequestParam

  1. 在URL中传递参数, 类似get请求的参数

  1. 在form-data中传递参数

后端为@RequestBody

注意, 不能是如下写法:

{
"userIdList": [90,91]
}

同时传递List和其他类型的参数

比如同时传递List和String参数, 可以使用Map集合来接收

public void deleteUser(@RequestBody HashMap<String, Object> map) {
List<Integer> list = (List<Integer>)map.get("list");
System.out.println(list.get(0));
System.out.println(map.get("name"));
}

postman在row中这样写

{
"list": [90,91],
"name": "str"
}

而不能这样去写, 接收不到参数

public void deleteUser(@RequestBody List<Long> userIdList, @RequestParam(value = "name") String name) {
System.out.println(name);
}
{
"list": [90,91],
"name": "str"
}

Postman测试文件下载接口

Postman传递token参数

设置token为环境变量

需求: 登录之后, 服务器返回给前端一个token, 在每次访问接口时都要携带token参数

  1. 首先测试获取token的接口得到返回的token

  1. 将token放到postman的全局变量中, 之后每次测试接口的时候postman会自动带上它

添加完成之后, 回到测试接口页面

  1. 在接口对应的 Test 接口中, 添加以下代码

var data = JSON.parse(responseBody);
if (data.data.token) {
tests["Body has token"] = true;
postman.setEnvironmentVariable("token", data.data.token);
}
else {
tests["Body has token"] = false;
}

这段代码的意思是设置刚才设置的全局变量

但是这里需要注意的是,data.token是和刚刚的返回token接口的返回结果中token的位置有关的

如果返回结果中token位置为:

{
"status": "Success",
“data” :{ "token": "QkxJVEtMUHhaU1NCRU1uRFM0SG1tZlVPS0JWR3FzcGJ3Vm9GMXBTOGlpdz06YWRtaW46NjM2ODI0NTE5MzAwODY3MDAw"}
"username": "admin",
"message": "The token was successfully generated with a valid time of 30 minutes"
}

那么代码就要写成

var data = JSON.parse(responseBody);
if (data.token) {
tests["Body has token"] = true;
postman.setEnvironmentVariable("token", data.token);
}
else {
tests["Body has token"] = false;
}
  1. 之后再一次请求返回token的接口, 如果没有错误的话, 会在如下位置看到postman已经为我们自动配置好了返回的token的值

  1. 配置好之后, 在需要携带token的接口中配置Header

这样就可以携带token来请求接口啦

方法解析

定义一个xxx,获取body中返回的所有参数,并转化为JSON格式 var xxx = JSON.parse(responseBody);

把json字符串转化为对象。parse()会进行json格式的检查是一个安全的函数, 如:检查json中某个数组元素的个数 (这里检测programs的长度)

var data = JSON.parse(responseBody);
tests["program's lenght"] = data.programs.length === 5;

将返回中的值设置为一个环境变量 pm.environment.set("key",xxx.data.value);或者postman.setEnvironmentVariable("key", "value");

将返回中的值设置为一个全局变量,pm.globals.set("key",xxx.data.value);或者postman.setGlobalVariable("key", "value");

注意:Global后面不能加s,value值一定要指定到某个具体节点

tests方法

在postman里,内置了一些常用的test方法:

其他常用方法

  1. 测试response Headers中的某个元素是否存在 tests["元素Content-Type是否存在"] = postman.getResponseHeader("Content-Type");

    //getResponseHeader()方法会返回header的值;

定义一个xxx,获取headers值 var.xxx = postman.getResponseHeader("key");

将Headers中的值设置为一个环境变量 postman.setEnvironmentVariable("key",xxx);或者pm.environment.set("key",xxx);

  1. 检查response的code值是否为200 tests["Status code is 200"] = responseCode.code === 200;

    // tests[“Status code is 200”]中的tests 是一个内置对象,

​ tests[“Status code is 200”]是指为这个断言起个名称叫”Status code is 200”,这个名称可以自行修改。

​ responseCode.code === 200中的responseCode是内置对象,responseCode对象中有个属性是code,是指HTTP状态码的code,判断code是否为200.

​ 综合起来,这句代码的意思是:名称为”Status code is 200”的断言中,判断responseCode对象的code属性值(HTTP状态码)是否为200。

  1. 检查response的body中是否包含字符串 tests["Body matches string"] = responseBody.has("type");

    // tests[“Body matches string”]中的tests是一个内置对象,

​ tests[“Body matches string”]是指为这个断言起个名称叫”Body matches string”,这个名称可以自行修改。

​ 这句代码的意思是:名称为”Body matches string”的断言中判断响应正文中是否包含:type这个字段。type无论是key或者value,只要匹配就可以。多个类型可用“,”分割。

  1. 检查Response Body是否等于字符串 tests["测试点"] = responseBody === "Response Body返回的内容";

    //这个可以用在接口返回内容为纯字符串时,直接检查整个返回结果的正确性

  1. 检查Response time 是否小于200ms tests["Response time 小于200毫秒"] = responseTime < 200;

​ 检查Response time 是否大于200ms tests["Response time 大于200毫秒"] = responseTime > 200;

  1. postman.setNextRequest('Request 4')

// postman.setNextRequest()是一个带有一个参数的函数,它是接下来要运行的请求的名称或ID。往往用来跳转至某个接口,只在运行该集合时有用,单独运行无效

  1. var jsonObject = xml2Json(responseBody);

    //转换XML body为JSON对象

  1. 设置一个随机数变量 pm.globals.set("type",parseInt(4*Math.random())+1);

    //针对不同类型的课程类型,设置一个1到4的随机整数,字段名是type,parselnt 是强制转换为整数

  1. 校验接口返回是否有数据 tests["获取第一个结果"] = xxx.content.jieguo[0];

    //我的程序设置的是如果当前没有数据,则只返回content[],所以这句断言可以校验,如果content里还有数据,则视为返回不为空