postman接口自动化实例演练

本文详细介绍了如何在Postman中利用全局变量、环境变量实现活动室预约系统的接口自动化测试,包括公告API、预订列表与时间段获取,以及预约提交。通过预定义变量、数据驱动和接口顺序控制,提升测试效率并确保接口间的正确交互。
摘要由CSDN通过智能技术生成

示例简介

  • 本文示例网站地址为:https://reservation.weihanli.xyz/swagger/index.htm
    该web应用主要是用来进行:活动室的预约,主要功能如下:

Notice 公告API

  • GET /api/Notice 获取公告列表
  • GET /api/Notice/{path} 获取公告详情

ReservationPlaces

  • GET /api/ReservationPlaces 预约活动室列表
  • GET /api/ReservationPlaces/{placeId}/periods 获取可预约的时间段

Reservations

  • GET /api/Reservations 活动室预约列表

  • POST /api/Reservations 提交预约信息

  • GET /api/Reservations/{id} 获取预约详情

  • DELETE /api/Reservations/{id} 取消预约

  • GET /api/Reservations/user 获取用户预约列表

    我们选择如下三个接口组成的流程进行本次讲解:
    在这里插入图片描述

  • 将三个接口整理好,放置在一个集合中,分别调用,以保证这三个接口都可以正常使用。准备工作完成,我们可以愉快地进行本次实战的讲解。

1. postman支持的变量

  • postman支持的变量形式很多,我们最需要掌握的有两种类型:全局变量、环境变量,有了变量的支持,会大大简化我们的脚本逻辑。

1.1 全局变量

  • 该变量的作用范围最大,一旦设定将会在整个工作空间内生效,我们要测试的三个接口都需要访问:https://reservation.weihanli.xyz/,此时我们可以将URL作为全局变量。设置方式如下:

在这里插入图片描述

在这里插入图片描述

  • 此时我们便得到了一个键为:baseUrl,值为https://reservation.weihanli.xyz/的变量,下面我们在各个接口访问的url使用该变量。

在这里插入图片描述

  • 接口依然可以成功调通,证明全局变量生效。 注意:postman中引用变量的格式为:{{变量key}}

1.2 环境变量

  • 在postman中可以设置环境,这个环境很好理解,我们测试公司内部系统时,一般分为测试、预发等多套环境,这个时候对每个环境特定的变量,我们就可以将其设置为环境变量。
  • 注意:
    • 环境变量的作用范围是当前环境,切换环境后变量作用域失效
    • 环境变量的作用范围小于全局变量,但是优先集高于全局变量
  • 在“提交预约信息”的请求入参中有【预约时间-ReservationForTime】字段,该字段必须为Date类型,我们将其设置为环境变量。在Pre-request-Script处添加以下脚本:
 var myDate = new Date();
 pm.environment.set("day", myDate);
  • 该变量的设置方式如下:
    在这里插入图片描述

  • 我们在请求前需要设置的环境变量写在Pre-request-Script处,如果是响应后的数据我们拿出来做环境变量,此时脚本就写在Tests处。
    在这里插入图片描述

2. 接口间传参

  • 完成第一步,下面我们要将调用:“预约活动室列表”接口返回的placeId传到“获取可预约的时间段”接口,我们只需做如下事情:
  • 1、 获取到“预约活动室列表”接口返回的placeId。
  • 在Tests处写以下脚本:
var uuid = pm.response.json()[0].PlaceId;
pm.environment.set("PlaceId", uuid);
  • 上面代码的含义为:
  • 第一句pm.response.json()获取到响应体,因为响应体为数组,因此从下标[0]开始,获取到第一个json对象,然后获取到第一个json对象中的PlaceId字段将其赋值给uuid变量。
  • 第二句:将uuid变量赋值给环境变量PlaceId。

在这里插入图片描述

  • 2、将获取的PlaceId设置为环境变量。
  • 3、在“获取可预约的时间段”接口引用环境变量即可。
    在这里插入图片描述
  • 综上,即可实现接口间传递参数。

3. 检查点设置

  • 检查点在接口的Tests里进行设置,如下图所示:
    在这里插入图片描述
    最常见的检查点如下:
  1. 检查HTTP请求的状态码是否与预期一致
 pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});
  1. 检查JSON响应中包含某个字段
pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});
  1. 检查响应体中包含某个指定连续字符串的值
pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
  1. 检查响应时间的长短
pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

下面我们分别为三个接口设置检查点;

  • 接口“预约活动室列表”,检查该接口是否可用,即响应码为200,再判断响应列表是否为空,不为空证明有可预约活动室,脚本如下:
 pm.test("check01-检查接口可用-响应码为200", function () {
    pm.response.to.have.status(200);
});

pm.test("check01-响应体不为空-json对象不为空", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData[0]) != null;
});

在这里插入图片描述

  • 接口“获取可预约的时间段”,需要检查是否已成功获取到环境变量PlaceId,脚本如下:
 pm.test("check03-成功获取变量值PlaceId", function () {
    pm.expect(pm.environment.get("PlaceId") != null);
});

pm.test("check04-第一个对象中的PeriodId的值为bac2a0bb-138f-445d-b416-2c90c9c3fa4d", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData[0].PeriodId).to.eql("bac2a0bb-138f-445d-b416-2c90c9c3fa4d");
});

在这里插入图片描述

  • 接口“提交预约信息”,检查响应体是否为200,如果为200则表示预约成功。
    在这里插入图片描述

4. 通过Runner实现自动批量执行

  • 设置全部接口,可通过postman提供的Runner进行批量执行;

在这里插入图片描述

  • 点击【Run demo】后,等待运行完成即可查看自动化执行结果;
    在这里插入图片描述

5. 按照指定顺序执行接口调用

  • 只需要在Tests处添加脚本:postman.setNextRequest(“下一个要执行的接口名称”);即可。

  • 在“预约活动室列表”的Tests处将下一个执行接口指向“提交预约信息”

  • postman.setNextRequest(“third-inter#提交预约信息”);
    在这里插入图片描述

  • 在“提交预约信息”的Tests处将下一个执行接口指向“获取可预约的时间段”,脚本如下:

 postman.setNextRequest("second-inter#获取可预约的时间段");

在这里插入图片描述

  • 在“获取可预约的时间段”的Tests处下一个执行接口指向空(必须设置,否则会进入死循环,不断重复执行上面的接口),脚本如下:
 postman.setNextRequest("");

在这里插入图片描述

  • 运行效果:

在这里插入图片描述

6. postman中实现数据驱动

  • 会议室会被不同的人预约,那么就会有不同数据“提交预约信息”接口,但是我们不希望程序一个一个地由人工执行,所以需要将数据进行驱动,逐条喂给接口。
    postman常见的参数化操作是将参数化列表写入text文档中(不推荐使用csv和JSON,csv每次变更都要对其格式更新,JSON的组织过程繁琐)
    “提交预约信息”接口的请求:
	{
  "ReservationForDate": "2021-04-14T03:50:00.044Z",
  "ReservationForTime": "string",
  "ReservationForTimeIds": "string",
  "ReservationPlaceName": "string",
  "ReservationPlaceId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "ReservationUnit": "string",
  "ReservationActivityContent": "string",
  "ReservationPersonName": "string",
  "ReservationPersonPhone": "string"
}
  • 将ReservationPersonName和ReservationPersonPhone进行参数化,具体实现过程如下:
  1. 准备参数化文件,注意文件的格式一定要保存为UTF-8无BOM格式。

在这里插入图片描述
PS:首先文件后缀名必须为text,第一行必须为参数名称,文本内容中的标点符号必须是英文,另外文本编码格式必须为UTF-8,最后一行需要需要符号或者字母将其填充,比如为两个-,其作用是为了防止Runner执行参数化迭代的时候,因结尾所加的换行符号导致迭代失败。

  1. 在“提交预约信息”接口的Pre-request Script处写入如下脚本,读取text参数化文件var.text,代码如下:
//实现数据驱动
var apply = "var.text";
var ReservationPersonName = apply.ReservationPersonName;
pm.environment.set("ReservationPersonName", ReservationPersonName);
var ReservationPersonPhone = apply.ReservationPersonPhone;
pm.environment.set("ReservationPersonPhone", ReservationPersonPhone);

在这里插入图片描述

  1. 将请求报文中的参数进行替换;

在这里插入图片描述

  1. 在Runner中设置迭代次数,比如为5,然后执行;
    在这里插入图片描述

  2. 查看执行结果,可以在console控制台查看每次的调用情况;
    在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值