精通Postman接口测试:关联技术与自动化实践指南

简介: 这篇文章详细介绍了如何使用Postman进行接口测试,包括关联技术、自动化实践,以及如何通过环境变量和全局变量解决接口之间的关联性问题。

背景

2017年入职一家p2p行业的互联网公司,被领导安利使用postman做接口测试,本人习惯性使用JMeter做接口测试,当然这个工具也听说过,开发者常用来调试接口。但当时公司的同事大多使用postman的功能有限,例如没有实现集成自动化环境(newman)、没有购买其收费版实现性能测试的接口监听、只使用到其中的collections功能,但是有一个使用缺陷,做接口不那么方便,即两个接口之间的关联性,如请求下一个接口需要上一个接口响应的token时,只能先请求一次,得到token值,再copy返回的token,拼接到下一个接口的请求参数中,完成接口测试;如此即为不方便,从而导致效率不高。为此,花了点时间学习使用postman做接口测试,才有了解决以下技术点,当然也免不了百度一番。

工具介绍

用户在开发者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家介绍的这款网页调试工具不仅可以调试简单的css、html、脚本等简单的网页基本信息,它还可以发送几乎所有类型的HTTP请求!

1、Postman在发送网络HTTP请求方面可以说是Chrome插件类产品中的代表产品之一。http://chromecj.com/web-development/2014-09/60/download.html 下载页面 官方地址:https://www.getpostman.com/

2、这里不赘述postman接口测试工具,如何做接口测试?其格式及填写方式如图所示:

3、接口自动化测试,如何做呢?postman提供了一个collections收集的功能,可以把多个接口脚本串成一个业务场景,放在指定的文件夹里,一次可以运行整个接口,即一个业务场景;

4、如上所述,就有问题了,同一个环境,有些操作需要获取令牌token,才能下一步操作?这里就要用到关联技术,习惯叫做关联,如同Loadrunner有关联函数(web_reg_save_param_ex)、jmeter有后置处理器(正则表达式、json提取器、xpath)等等;

5、postman提供了环境变量,有自动定义的环境变量以及全局变量;自定义环境变量名称:url,变量名Variable Name, 变量值:Variable Value

全局变量,如可以设置接口请求的header信息:

变量引用方式双花括号:{ {}},如上url地址可以写成{ {url}}/login



6、上图tests验证,可以写入脚本,

var jsonData = JSON.parse(responseBody); //获取响应json格式报文

postman.setEnvironmentVariable("token", jsonData.data.result.token); //设置环境变量 token,值为jsonData.data.result.token

tests\["token"\]=jsonData.data.result.token; //验证响应报文里有token参数返回

tests\["Body matches string"\] = responseBody.has("毕彩武"); //断言test响应报文结果是否包涵

tips:var 定义一个变量jsonData ,设置token变量,jsonData.data.result.token 这个值是一级一级往下走的json数据,

7、举例,场景:用户先登录系统,获取token令牌,下一步操作购买接口使用登录返回的token令牌进行操作,这时两个接口就放在同一个collections文件夹;

  • 第一个登录接口,设置tests–环境变量设置响应的token值,
  • 第二个购买接口,传参{ {token}}引用环境变量,进行购买操作。

上图右侧显示tests验证的结果,只是验证通过的tests,想要知道验证断言是否正确,只能看后台日志;

8、如此便完成了两个接口的关联动作,不需要先运行一个登录接口,获取token令牌,然后添加购买接口输入token;

tips:delay的单位是毫秒。

9、后续postman强大的功能,可以完成api自动化接口测试。

// 判断是否存在 'user_id' 值
tests["Body contains user_id"] = responseBody.has("user_id");
if(tests["Body contains user_id"]){ 
// 将返回信息解析成对象 
var responseData = JSON.parse(responseBody); 
tests["value_user_id"]=responseData.token.user_id 
// 设置全局变量 
postman.setGlobalVariable("user_id",tests["value_user_id"]);
}else{ 
// globals["test_user_id"] 是我在 \`Pre-request Script\` 中预定义好的一个常量值 
postman.setGlobalVariable("user_id",globals["test_user_id"]);
}

10、linux系统安装postman命令行运行工具newman,.命令行运行接口集合:首先下载刚才创建的集合,点击export,并保存到指定路径;

11、再来普及一个postman的pre-request script功能来创建环境变量与全局变量;

如下图,在tests可以检测变量的值是否被引用了;字符串用双引号:

点击postman右上角的眼睛,可以看到预设请求的脚本已经把全局变量和环境变量写进入了;

12、api请求多个,需要关联上一个api请求响应返回的值,在请求发起后设置环境变量,和在发起前设置环境变量用的同一个方法:

postman.setEnvironmentVariable("key", "value");
postman.setGlobalVariable("key", "value");
# 前者是环境变量,后者是全局变量,都是可以在请求前后设置为api变量

随机数

PostMan 除了提供环境变量和全局变量外,还提供了三种随机数。

{
  
  {$guid}}

:添加一个V4风格GUID

{
  
  {$timestamp}}

:将当前的时间戳,精确到秒

{
  
  {$randomInt}}

:添加0和1000之间的随机整数

内置脚本说明:

1. 清除一个全局变量 Clear a global variable

对应脚本: postman.clearGlobalVariable("variable\_key");

参数:需要清除的变量的key

2.清除一个环境变量 Clear an environment variable

对应脚本: postman.clearEnvironmentVariable("variable\_key");

参数:需要清除的环境变量的key

3.response包含内容 Response body:Contains string

对应脚本: tests\["Body matches string"\] =responseBody.has("string\_you\_want\_to\_search");

参数:预期内容

4.将xml格式的response转换成son格式 Response body:Convert XML body to a JSON Object

对应脚本: var jsonObject \= xml2Json(responseBody);

参数:(默认不需要设置参数,为接口的response)需要转换的xml

5.response等于预期内容 Response body:Is equal to a string

对应脚本: tests\["Body is correct"\] = responseBody === "response\_body\_string";

参数:预期response

6.json解析key的值进行校验 Response body:JSON value check

对应脚本: tests\["Args key contains argument passed as url parameter"\] = 'test' in responseJSON.args

参数:test替换被测的值,args替换被测的key

7.检查response的header信息是否有被测字段 Response headers:Content-Type header check

对应脚本: tests\["Content-Type is present"\] = postman.getResponseHeader("Content-Type");

参数:预期header

8.响应时间判断 Response time is less than 200ms

对应脚本: tests\["Response time is less than 200ms"\] = responseTime < 200;

参数:响应时间

9.设置全局变量 Set an global variable

对应脚本: postman.setGlobalVariable("variable\_key", "variable\_value");

参数:全局变量的键值

10.设置环境变量 Set an environment variable

对应脚本: postman.setEnvironmentVariable("variable\_key", "variable\_value");

参数:环境变量的键值

11.判断状态码 Status code:Code is 200

对应脚本: tests\["Status code is 200"\] = responseCode.code != 400;

参数:状态码

12.检查code name 是否包含内容 Status code:Code name has string

对应脚本: tests\["Status code name has string"\] = responseCode.name.has("Created");

参数:预期code name包含字符串

13.成功的post请求 Status code:Successful POST request

对应脚本: tests\["Successful POST request"\] = responseCode.code === 201 || responseCode.code === 202;

14.微小验证器 Use Tiny Validator for JSON data

对应脚本:var schema \= { "items": { "type": "boolean" } };

var data1 = \[true, false\];

var data2 = \[true, 123\];

console.log(tv4.error);

tests\["Valid Data1"\] = tv4.validate(data1, schema);

tests\["Valid Data2"\] = tv4.validate(data2, schema);

参数:可以修改items里面的键值对来对应验证json的参数
相关文章
|
2月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
68 4
|
1月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
3月前
|
前端开发 JavaScript 测试技术
前端测试技术中,如何提高集成测试的效率?
前端测试技术中,如何提高集成测试的效率?
|
5天前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
43 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
3天前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
24 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
23天前
|
Dubbo 应用服务中间件 API
使用 Apifox、Postman 测试 Dubbo 服务,Apache Dubbo OpenAPI 即将发布
Apache Dubbo 3.3.3(即将发布)实现了与 OpenAPI 的深度集成,通过与 OpenAPI 的深度集成,用户能够体验到从文档生成到接口调试、测试和优化的全流程自动化支持。不论是减少手动工作量、提升开发效率,还是支持多语言和多环境,Dubbo 3.3.3 都展现了其对开发者体验的极大关注。结合强大的 Mock 数据生成和自动化测试能力,这一版本为开发者提供了极具竞争力的服务治理解决方案。如果你正在寻找高效、易用的微服务框架,Dubbo 3.3.3 将是你不容错过的选择。
|
1月前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
109 15
|
24天前
|
运维 监控 安全
HTTPS 证书自动化运维:使用Certbot来申请https证书实践指南
本文深入探讨HTTPS证书自动化运维,提供实践指南与案例分析。首先介绍选择合适的工具和平台,如Certbot、ACME客户端及图形化管理系统的应用。接着详细讲解使用Certbot签发Let’s Encrypt证书的步骤,并强调安全策略、权限管理和监控日志的重要性。通过中小型企业与大型电商平台的实际案例,展示自动化运维的优势。最后针对常见问题提供解决方案,帮助读者实现高效、安全的证书管理。
|
2月前
|
监控 JavaScript 测试技术
postman接口测试工具详解
Postman是一个功能强大且易于使用的API测试工具。通过详细的介绍和实际示例,本文展示了Postman在API测试中的各种应用。无论是简单的请求发送,还是复杂的自动化测试和持续集成,Postman都提供了丰富的功能来满足用户的需求。希望本文能帮助您更好地理解和使用Postman,提高API测试的效率和质量。
135 11
|
3月前
|
运维 监控 安全
运维自动化:提升效率与可靠性的关键技术
在信息技术飞速发展的今天,企业对IT系统的稳定性和高效性要求越来越高。运维自动化作为实现这一目标的重要手段,通过软件工具来模拟、执行和管理IT运维任务,不仅大幅提高了工作效率,还显著增强了系统的可靠性。本文将探讨运维自动化的概念、实施步骤以及面临的挑战,旨在为读者提供一份关于如何有效实施运维自动化的指南。