Postman接口测试——我看过最详细+全面的文章教程了【转载】

2023-11-18

Postman简介

一般简单的接口测试我们可以直接在浏览器里面进行调试,但是涉及到一些权限设置的就无法操作了,因此我们需要接口测试的相关工具;Postman 是一个接口测试和 http 请求的工具。

官网地址:https://www.getpostman.com

Postman 的优点:

  • 支持各种的请求类型: get、post、put、patch、delete 等
  • 支持在线存储数据,通过账号就可以进行迁移数据
  • 很方便的支持请求 header 和请求参数的设置
  • 支持不同的认证机制,包括 Basic Auth,Digest Auth,OAuth 1.0,OAuth 2.0 等
  • 响应数据是自动按照语法格式高亮的,包括 HTML,JSON 和 XML

下载安装

Postman有windows,Mac、Liunx以及Chrome插件版本。这里主要介绍Win平台版本的使用。

下载地址:https://www.getpostman.com/apps

官方文档:https://www.getpostman.com/docs/v6/
Postman Api文档:https://docs.postman-echo.com

Postman 入门

安装好之后启动程序,进入主界面。准备开始使用Postman.

发送第一个请求
启动软件后在引导界面点击Request,给Request命名,然后创建文件夹并把该Request归属到该文件夹。

在地址栏输入postman-echo.com/get 然后点击 Send按钮,可以看到返回值。如下图所示:
在这里插入图片描述

Postman工作原理

如下图所示,当您在Postman中输入请求并单击Send按钮时,服务器将接收您的请求并返回Postman在接口中显示的响应。在这里插入图片描述

Request编辑

在主界面左侧可以查看、保存、编辑Request。

发送不同类型HTTP请求

GET

HTTP GET请求方法用于从服务器检索数据。
数据由唯一的URI(统一资源标识符)标识。

GET请求可以使用“Query String Parameters”将参数传递给服务器。
例如,在下面的请求中,

https://postman-echo.com/get?param1=51zxw&param2=66666

请求说明

param1和param2表示发送的参数。
?后面接参数
&连接多个参数

参数编辑

点击Params按钮,Postman 可以自动帮我们解析出对应参数。
如果想要暂时不传参数,可以方便的通过不勾选的方式去实现
如果想要批量的编辑参数,可以点击右上角的Bulk Edit,去实现批量编辑
在这里插入图片描述
响应数据
在主界面下方一栏菜单为响应菜单栏,可以查看响应内容,Cookie、Headers、响应状态码等信息。在这里插入图片描述
返回值:

{
    "args": {
         "param1": "51zxw",
         "param2": "66666"
    },
    "headers": {
        "host": "postman-echo.com",
        "accept": "*/*",
        "accept-encoding": "gzip, deflate",
        "cache-control": "no-cache",
        "cookie": "sails.sid=s%3AybUTdbjW9tK6kEGK3wv5nqjDrGI_nWri.ZbeeTsLGoBJgWngTuBhBUKo9upgIWer2CRdxWttbV1U",
        "postman-token": "f19b9f19-f0af-45ff-8dfd-0d1c75c1bbad",
        "user-agent": "PostmanRuntime/7.1.5",
        "x-forwarded-port": "443",
        "x-forwarded-proto": "https"
    },
    "url": "https://postman-echo.com/get?username=51zxw&password=66666"
}

POST

HTTP POST请求方法旨在将数据传输到服务器,返回的数据取决于服务器的实现。
POST请求可以使用Query String Parameters以及body将参数传递给服务器。

案例1
在下面的请求中,使用Query String Parameters传递参数。

https://postman-echo.com/post?param=51zxw

返回值

{
    "args": {
        "param": "51zxw"
    },
    "data": {},
    "files": {},
    "form": {},
    "headers": {
        "host": "postman-echo.com",
        "content-length": "0",
        "accept": "*/*",
        "accept-encoding": "gzip, deflate",
        "cache-control": "no-cache",
        "content-type": "",
        "cookie": "sails.sid=s%3A4L3j09wwnJ9JguJC-raHVYeuyVVEVHGW.za7nk%2BO4gj9Nh%2FJDLzSZczT4k%2BROeV0yTq8GJ5Y9YZo",
        "postman-token": "b34668bf-3850-4573-b196-bab2bd7db705",
        "user-agent": "PostmanRuntime/7.1.5",
        "x-forwarded-port": "443",
        "x-forwarded-proto": "https"
    },
    "json": null,
    "url": "https://postman-echo.com/post?param=51zxw"
}

案例2
发送一个Request,其中body为application/x-www-form-urlencoded类型,参数分别为param1=zxw和param2=888
请求URL如下:

https://postman-echo.com/post

在这里插入图片描述
Postman Body数据类型说明:

form-data multipart/form-data是Web表单用于传输数据的默认编码。这模拟了在网站上填写表单并提交它。表单数据编辑器允许我们为数据设置键-值对。我们也可以为文件设置一个键,文件本身作为值进行设置。

x-www-form-urlencoded 该编码与URL参数中使用的编码相同。我们只需输入键-值对,Postman会正确编码键和值。请注意,我们无法通过此编码模式上传文件。表单数据和urlencoded之间可能存在一些差异,因此请务必首先检查API的编码实现,确定是否可以使用这种方式发送请求。

raw 请求可以包含任何内容。除了替换环境变量之外,Postman不触碰在编辑器中输入的字符串。无论你在编辑区输入什么内容,都会随请求一起发送到服务器。编辑器允许我们设置格式类型以及使用原始主体发送的正确请求头。我们也可以手动设置Content-Type标题,这将覆盖Postman定义的设置。

binary 二进制数据可让我们发送Postman中无法输入的内容,例如图像,音频或视频文件。

返回值如下:

{
    "args": {},
    "data": "",
    "files": {},
    "form": {
        "param1": "zxw",
        "param2": "888"
    },
    "headers": {
        "host": "postman-echo.com",
        "content-length": "21",
        "accept": "*/*",
        "accept-encoding": "gzip, deflate",
        "cache-control": "no-cache",
        "content-type": "application/x-www-form-urlencoded",
        "cookie": "sails.sid=s%3A69wx4iZKJDDB1qVsZUnB1RpcwTU-fN_9.pr%2FiwjJzIFDiC9H7dFnINqMwkenjTJnwF8thN15KBzw",
        "postman-token": "09d8e786-834a-42b9-bbe0-3e6886ef7b3b",
        "user-agent": "PostmanRuntime/7.1.5",
        "x-forwarded-port": "443",
        "x-forwarded-proto": "https"
    },
    "json": {
        "param1": "zxw",
        "param2": "888"
    },
    "url": "https://postman-echo.com/post"
}

PUT
HTTP PUT请求主要是从客户端向服务器传送的数据取代指定的文档的内容。

PUT请求可以使用Query String Parameters以及body请求体将参数传递给服务器。

案例:

发送PUT请求,并传递字符参数“hello 51zxw”
在这里插入图片描述

https://postman-echo.com/put

返回值

{
    "args": {},
    "data": "",
    "files": {},
    "form": {
        "hello 51zxw": ""
    },
    "headers": {
        "host": "postman-echo.com",
        "content-length": "11",
        "accept": "*/*",
        "accept-encoding": "gzip, deflate",
        "cache-control": "no-cache",
        "content-type": "application/x-www-form-urlencoded",
        "cookie": "sails.sid=s%3A-kzZXqiAKlk9oDgVADnLyqAEf7f6scDV.dhZZMReTg2y9KuTE%2Fxb9O2qGKnaUxD3O%2B3J4PTTXZms",
        "postman-token": "1338c8b1-b502-45f6-9400-7be048d7b2ea",
        "user-agent": "PostmanRuntime/7.1.5",
        "x-forwarded-port": "443",
        "x-forwarded-proto": "https"
    },
    "json": {
        "hello 51zxw": ""
    },
    "url": "https://postman-echo.com/put"
}

DELETE

HTTP DELETE方法用于删除服务器上的资源,DELETE请求可以使用Query String Parameters以及body请求体将参数传递给服务器。
delete请求

https://postman-echo.com/delete

返回值

{
    "args": {},
    "data": {},
    "files": {},
    "form": {},
    "headers": {
        "host": "postman-echo.com",
        "accept": "*/*",
        "accept-encoding": "gzip, deflate",
        "cache-control": "no-cache",
        "cookie": "sails.sid=s%3A-kzZXqiAKlk9oDgVADnLyqAEf7f6scDV.dhZZMReTg2y9KuTE%2Fxb9O2qGKnaUxD3O%2B3J4PTTXZms",
        "postman-token": "065cb8c4-cea2-4e24-9be0-573d58b4da2c",
        "user-agent": "PostmanRuntime/7.1.5",
        "x-forwarded-port": "443",
        "x-forwarded-proto": "https"
    },
    "json": null,
    "url": "https://postman-echo.com/delete"
}

Request Header
Request Header(请求头)用来说明服务器要使用的附加信息,比较重要的信息有 Cookie、Referer、User-Agent 等。在Postman中可以在请求下方的Headers栏目来设置,如下如图所示:

在这里插入图片描述

Response Header

Response Header(响应头)其中包含了服务器对请求的应答信息,如 Content-Type、Server、Set-Cookie 等,在Postman主界面下方Headers或者Postman Console界面都可以查看Response Header信息。在这里插入图片描述
Tips:通过Postman Console可以看到每次请求的Request Header详细信息,详见视频演示。

授权设置

很多时候,出于安全考虑我们的接口并不希望对外公开。这个时候就需要使用授权(Authorization)机制
授权过程验证您是否具有访问服务器所需数据的权限。
当您发送请求时,您通常必须包含参数,以确保请求具有访问和返回所需数据的权限。
Postman提供授权类型,可以轻松地在Postman本地应用程序中处理身份验证协议。

Postman支持的授权协议类型如下:

No Auth
Bearer Token
Basic auth
Digest Auth
OAuth 1.0
OAuth 2.0
Hawk Authentication
AWS Signature
NTLM Authentication [Beta]
这里主要介绍以上加粗的授权协议的使用。

在这里插入图片描述Basic auth
基本身份验证是一种比较简单的授权类型,需要经过验证的用户名和密码才能访问数据资源。这就需要我们输入用户名和对应的密码。

案例:请求URL如下,授权账号为:

用户名: postman
密码: password
授权协议为:Basic auth

https://postman-echo.com/basic-auth

如果不输入用户名密码,直接使用GET请求,则会返回提示:Unauthorized

输入用户名密码,选择Basic auth授权类型,则返回如下结果:

{
    "authenticated": true
}

Digest Auth
Digest auth 是一个简单的认证机制,最初是为HTTP协议开发的,因此也常叫做HTTP摘要。其身份验证机制非常简单,它采用哈希加密方法,以避免用明文传输用户的口令。摘要认证就是要核实參与通信的两方都知道双方共享的一个口令。

当server想要查证用户的身份,它产生一个摘要盘问(digest challenge),并发送给用户。典型的摘要盘问例如以下:

Digest realm="iptel.org", qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="", algorithm=MD5

这里包含了一组参数,也要发送给用户。用户使用这些參数,来产生正确的摘要回答,并发送给server。摘要盘问中的各个參数,其意义例如以下:

realm(领域):领域參数是强制的,在全部的盘问中都必须有。它是目的是鉴别SIP消息中的机密。在SIP实际应用中,它通常设置为SIP代理server所负责的域名。

nonce(现时):这是由server规定的数据字符串,在server每次产生一个摘要盘问时,这个參数都是不一样的(与前面所产生的不会雷同)。“现时”一般是由一些数据通过md5杂凑运算构造的。
这种数据通常包含时间标识和server的机密短语。这确保每一个“现时”都有一个有限的生命期(也就是过了一些时间后会失效,并且以后再也不会使用),并且是独一无二的
(即不论什么其他的server都不能产生一个同样的“现时”)。

algorithm(算法):这是用来计算的算法。当前仅仅支持MD5算法。

qop(保护的质量)。这个參数规定server支持哪种保护方案。client能够从列表中选择一个。值
auth表示仅仅进行身份查验, auth-int表示进行查验外,另一些完整性保护。需要看更具体的描写叙述,请參阅RFC2617。

案例
请求URL如下

https://postman-echo.com/digest-auth

摘牌配置信息如下:用户名密码和上面basic auth一样

Digest username="postman", realm="Users", nonce="ni1LiL0O37PRRhofWdCLmwFsnEtH1lew", uri="/digest-auth", response="254679099562cf07df9b6f5d8d15db44", opaque=""

在这里插入图片描述
执行请求结果如下:

{
    "authenticated": true
}

Hawk Auth

Hawk Auth是一个HTTP认证方案,使用MAC(Message Authentication Code,消息认证码算法)算法,它提供了对请求进行部分加密验证的认证HTTP请求的方法。hawk方案要求提供一个共享对称密匙在服务器与客户端之间,通常这个共享的凭证在初始TLS(安全传输层协议)保护阶段建立的,或者是从客户端和服务器都可用的其他一些共享机密信息中获得的。

案例
请求URL如下:

https://postman-echo.com/auth/hawk

密钥信息如下:

Hawk Auth ID: dh37fgj492je

Hawk Auth Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn

Algorithm: sha256
在这里插入图片描述
执行结果:

{
    "message": "Hawk Authentication Successful"
}

如果将key改为其他任意的字符则返回如下结果:

{
    "statusCode": 401,
    "error": "Unauthorized",
    "message": "Bad mac",
    "attributes": {
        "error": "Bad mac"
    }
}

OAuth 1.0

OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

扩展资料:

OAuth那些事儿
OAuth的改变

案例
请求URL如下:请求方式为GET,Add authorization data to设置为:Request Headers

https://postman-echo.com/oauth1

参数配置为:

Consumer Key: RKCGzna7bv9YD57c
Consumer Secret: D+EdQ-gs$-%@2Nu7

在这里插入图片描述
发送请求结果如下:

{
    "status": "pass",
    "message": "OAuth-1.0a signature verification was successful"
}

如果Consumer Secret错误则返回如下结果:

{
    "status": "fail",
    "message": "HMAC-SHA1 verification failed",
    "base_uri": "https://postman-echo.com/oauth1",
    "normalized_param_string": "oauth_consumer_key=51zxw&oauth_nonce=pxSgzUivsBi&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1531299384&oauth_version=1.0",
    "base_string": "GET&https%3A%2F%2Fpostman-echo.com%2Foauth1&oauth_consumer_key%3D51zxw%26oauth_nonce%3DpxSgzUivsBi%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1531299384%26oauth_version%3D1.0",
    "signing_key": "D%2BEdQ-gs%24-%25%402Nu7&"
}

Cookie设置

cookie是存储在浏览器中的小片段信息,每次请求后都将其发送回服务器,以便在请求之间存储有用的信息。比如很多网站登录界面都有保留账号密码,以便下次登录。

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

Cookie是由服务端生成,存储在响应头中,返回给客户端,客户端会将cookie存储下来,在客户端发送请求时,user-agent会自动获取本地存储的cookie,将cookie信息存储在请求头中,并发送给服务端。postman也可以设置、获取、删除Cookie。

Set Cookies

在Send按钮下方点击Cookies文字菜单,弹出如下界面,然后可以设置Cookie。
在这里插入图片描述
请求URL如下:请求方式为GET,添加Cookie值为username:51zxw

http://www.baidu.com/

打开Console找到Request Header可以看到自定义设置的Cookie内容。
在这里插入图片描述

Get Cookies

Cookie获取比较简单,直接获取Response Headers里面的set-cookie值即可,或者在主界面下方Cookie菜单栏里面也可以查看。
在这里插入图片描述

Delete Cookies

点击Cookies文字菜单,然后可以根据需求去清除对应的Cookie。

变量
问题思考

在开发不同阶段可能存在不同的环境,比如测试环境和生产环境。

测试环境API如下:

https://dev.postman.com/get
https://dev.postman.com/post
https://dev.postman.com/put

生产环境API如下:

https://postman-echo.com/get
https://postman-echo.com/post
https://postman-echo.com/put

在这么情况下,按照常规思路要么你需要维护两套环境的API,要么每次都手动一个个去修改URL,不管哪种选择都比较麻烦且低效,那么有没有比较的好的方法来解决这个问题呢?

Postman变量类型

通过比较我们可以发现,以上两组API主要是除了host不同之外其他都一样,其实把Host用变量替换,这样就可以灵活切换环境。

Postman提供了变量设置,有4种变量类型。

本地变量(LocalVariable )
全局变量(Global Variable)
环境变量(Environment Variable)
数据变量(Data Variable)

环境变量
环境变量指在不同环境,同一个变量值随着环境不同而变化,比如我们上面举例场景就可以使用环境变量,当在测试环境时,host值为: dev.postman.com ,当切换到生产环境时,host值变为:postman-echo.com 。

环境变量设置:
在postman界面点击右上角眼睛图标,即可开始设置环境变量和全局变量。环境变量设置过程如下图所示:我们可以设置两种环境 dev和release,dev是开发测试环境; release是正式的生产环境。host环境变量,根据不同的环境值不一样。
在这里插入图片描述
在这里插入图片描述
变量引用格式为,如下图所示:
在这里插入图片描述

本地变量

本地变量主要是针对单个URL请求设置的变量,作用域只是局限在请求范围内。如请求URL如下,设置两个本地变量(user,passwd)作为参数。请求方式为POST在这里插入图片描述
从上图中我们可以看到变量设置的格式为

变量设置好之后需要赋值,在Pre-request-Script里面编写如下代码:

pm.variables.set("user","51zxw");
pm.variables.set("passwd","66666");

点击send执行之后的返回值如下,可以看到我们定义的变量已经发送。

{
    "args": {},
    "data": "",
    "files": {},
    "form": {
        "user": "51zxw",
        "passwd": "6666"
    },
    "headers": {
        "host": "postman-echo.com",
        "content-length": "24",
        "accept": "*/*",
        "accept-encoding": "gzip, deflate",
        "cache-control": "no-cache",
        "content-type": "application/x-www-form-urlencoded",
        "cookie": "sails.sid=s%3ARNfROdcmaqrU3ZqglMdbnqU4tI3_BHTE.WUBtzhacnJT44oLzytikWtVmg7wfkD7tDNb%2FPtVBRnM",
        "postman-token": "9367ea9b-b349-4bc4-85d4-5638b5ff30e1",
        "user-agent": "PostmanRuntime/7.1.5",
        "x-forwarded-port": "443",
        "x-forwarded-proto": "https"
    },
    "json": {
        "user": "sutune",
        "passwd": "12345"
    },
    "url": "https://postman-echo.com/post"
}

全局变量

全局变量是指在所有的环境里面,变量值都是一样的,全局变量的作用域是所有请求。

全局变量设置有两种方式:

点击界面里设置
在脚本里设置

界面设置

点击眼睛图标后,在Global选项菜单点击Edit菜单即可设置全局变量,如下图所示。全局变量的引用格式和环境变量一样,

注意:当环境变量和全局变量名称一样时,切换到某个环境时,环境变量会覆盖全局变量。在这里插入图片描述
脚本设置

使用如下脚本可以设置全局变量:variable_key表示变量名称, variable_value 表示变量值。

pm.globals.set("variable_key", "variable_value");

实践案例

在实际接口测试过程中,接口经常会有关联。比如需要取上一个接口的某个返回值,然后作为参数传递到下一个接口作为参数。假设我们要获取A接口返回的userid值作为B接口的请求参数。

A接口请求URL如下:

https://postman-echo.com/post

请求方式为Post
请求参数:userid(这里自己定义,接口会返回对应的id值)
返回值

{
    "args": {},
    "data": "",
    "files": {},
    "form": {
        "userid": "123456"
    },
    "headers": {
        "host": "postman-echo.com",
        "content-length": "13",
        "accept": "*/*",
        "accept-encoding": "gzip, deflate",
        "cache-control": "no-cache",
        "content-type": "application/x-www-form-urlencoded",
        "cookie": "sails.sid=s%3AxZeg8NHeQGGFv2AUFblww7xF5HeP-4pi.sYxwR13VMFrUqvpJ%2Be8scGNnjgQAdOP3EeL6DSZqNQo",
        "postman-token": "7890d763-2bb1-4e88-aa1c-ad0bfc7db9b1",
        "user-agent": "PostmanRuntime/7.1.5",
        "x-forwarded-port": "443",
        "x-forwarded-proto": "https"
    },
    "json": {
        "userid": "123456"
    },
    "url": "https://postman-echo.com/post"
}

根据返回值我们需要从返回值中提取userid值。在Test标签栏下编写如下脚本获取userid值

//获取返回的响应值然后转化为json格式
var jsonData = pm.response.json();

//获取返回的userid值
userid=jsonData.json['userid'];

//控制台日志查看
console.log(userid);

//将获取的变量设置全局变量
pm.globals.set("userid", userid);

B接口请求URL如下:请求方式为GET

postman-echo.com/get?userid={{userid}}

先执行A接口的,然后在执行B接口,此时B接口通过全局变量userid可以获得A接口的返回值。

数据变量
数据变量是通过导入外部数据文件(json文件或者csv文件),来获取变量数据。我们可以创建一个如下内容的json文件:

data.json

[{
  "username": "jack",
  "passwd": "6666"
},{
  "username": "Bob",
  "passwd": "5555"
}, {
 "username": "Marry",
  "passwd": "8888"
}]

稍后我们会结合运行Collection来讲解如何导入该数据文件。

断言

简介
一般来说执行完测试,我们需要对测试结果来进行校验,判断结果是是否符合我们的预期,也就是断言。在接口测试中一般会根据响应状态码或者响应返回的数据来进行断言。

Postman提供一个测试沙箱(Postman Sandbox) 测试沙箱是一个JavaScript执行环境,可以通过JS脚本来编写pre-request Script和test Script。

pre-request Script(预置脚本)可以用来修改一些默认参数,在请求发送之前执行。有点类似于unittest里面的setUp()方法。
test Script(测试脚本)当接收到响应之后,再执行测试脚本。
案例
接口请求URL如下:请求方式为POST

postman-echo.com/post

断言规则

响应状态码:200
响应内容:返回的user参数值与定义的一致
响应时间:小于0.5s
测试脚本

在pre-request Script定义变量user

pm.variables.set("user",'zxw');

在Test栏下面编写如下脚本

//判断响应状态码
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

//获取发送的参数值
username=pm.variables.get("user");
console.log(username);

//校验响应内容是否和请求的一致
pm.test("Check username", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.json['user']).to.eql(username);
});

//检测响应时间是否小于0.5s
pm.test("Response time is less than 500ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(500);
});

断言结果
在这里插入图片描述

运行Collection

批量执行
当我们想批量测试某个集合里面的各个API时,可以使用Collection Runner来批量运行API,同时可以进行环境变量、迭代执行次数、延迟时间等设置。在这里插入图片描述执行结果
在这里插入图片描述

数据驱动

应用背景
有时我们针对一个接口需要测试很多不同的参数,如果每次一个个的去修改参数值来进行测试这样效率肯定会比较低下。因此我们需要每次迭代执行传入不同的参数进行测试,那么需要导入外部数据文件进行参数化,也就是所谓的数据驱动。

数据导入
如下图所示,data选择之前我们创建的json数据文件:data.json,文件类型选择application/json json数据内容如下:

[{
  "username": "jack",
  "passwd": "6666"
},{
  "username": "Bob",
  "passwd": "5555"
}, {
 "username": "Marry",
  "passwd": "8888"
}]

请求之前延迟时间最好设置为1000~3000,避免过于频繁请求被禁。在这里插入图片描述
点击Preview按钮可以预览导入的数据。在这里插入图片描述
执行结果
在这里插入图片描述

构建工作流

问题思考
在使用“Collection Runner”的时候,集合中的请求执行顺序就是请求在Collection中的显示排列顺序。但是,有的时候我们不希望请求按照这样的方式去执行,可能是执行完第一个请求,再去执行第五个请求,然后再去执行第二个请求这样的方式;那么在“Collection Runner”中如何去构建不同的执行顺序呢?

设置方法
最直接的方法就是直接在集合里面拖动调整顺序,但是每次去拖动也比较麻烦,特别是当请求比较多的时候。这个时候最高效的方法就是通过脚本设置。
首先下载官方提供的案例文件:collection.json 导入到postman,运行Collection结果如下图所示:在这里插入图片描述
接下来要调整执行顺序为:Request1->Request3->Request2->Request4

首先在第一个请求:Request1中Test添加如下代码:表示下一个请求为执行请求名称为Request3的请求

postman.setNextRequest('Request 3')

然后在Request3的请求中Test添加如下代码:表示下一个请求为执行请求名称为Request2的请求

postman.setNextRequest('Request 2')

最后在Request2的请求中Test添加如下代码:表示下一个请求为执行请求名称为Request4的请求.

postman.setNextRequest('Request 4')

注意:第一个执行请求的排序一定要在第一个。

执行结果
在这里插入图片描述

命令执行

问题思考
在前面我们都是在postman图形界面工具里面进行测试,但是有时候我们需要把测试脚本集成到CI平台,或者在非图形界面的系统环境下测试,那么该如何处理呢?
Newman简介
Newman是一款基于Node.js开发的可以运行Postman的工具,使用Newman,可以直接从命令行运行和测试Postman集合。

Newman应用
环境准备
Node.js
cnpm或npm
以上安装可以参考:Appium环境搭建

配置好环境后,执行如下命令安装newman

cnpm install newman --global

输入如下面命令检测安装是否成功

C:\Users\Shuqing>newman -v
3.10.0

执行测试
首先将postman的集合导出,如下图所示:
在这里插入图片描述
在桌面新建文件夹pmtest,将导出的postman文件和相关数据文件放入。

打开cmd进入到pmtest目录,输入如下命令:

newman run Postman_API.postman_collection.json -d data.json -r html

命令说明

run代表要执行的postman脚本,即为导出的集合。
-d表示要执行的数据,也就是之前导入postman的数据
-r生成的测试报告类型,这里生成html格式报告
更多命令用法请输入newman -h即可查看。

报告查看
在测试文件夹pmtest里面可以看到生成的一个newman文件夹,打开就可以看到生成的测试报告。

Html报告样式:newman-run-report

newman不仅支持生成html报告,还支持其他报告类型:

JSON reporter
JUNIT/XML reporter
Client report
Html report

集成Jenkins

Jenkins简介
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

下载与安装
下载地址:https://jenkins.io/download/

下载后安装到指定的路径即可,默认启动页面为localhots:8080,如果8080端口被占用无法打开,可以进入到jenkins安装目录,找到jenkins.xml配置文件打开,修改如下代码的端口号即可。

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>

集成步骤

集成到jenkins的思路其实很简单,就把之前我们执行测试的cmd命令放到jenkins里面去执行。集成步骤也很简单:

首先新建一个项目: postman_api_test
然后在构建栏目下拉菜单选择 Execute Windows batch command

c:
cd C:\Users\Shuqing\Desktop\pmtest\
newman run Postman_API.postman_collection.json -d data.json -r html

Tips:我的jenkins安装在D盘因此需要使用命令 c:切换到postman脚本所在盘符。
在这里插入图片描述
最后执行结果如下:
在这里插入图片描述

导出不同语言脚本

问题思考
虽然Postman功能比较强大,但是毕竟是一款商业工具,多少会有一些限制。比如只支持js脚本运行,如果我们想用自己熟悉的编程语言(如:Python,java等)来做接口自动化测试该如何处理?

操作步骤
Postman支持导出不同语言版本的脚本,当一个接口调试好之后,点击右侧的code字样即弹出如下界面可以选择语言。最后选择你需要语言版本即可生成对应的代码。在这里插入图片描述生成的代码片段可以点击 Copy to Clipboard 复制。
在这里插入图片描述

写在最后

2021年,不要只做收藏从未停止,行动从未开始的人,很多事情,做着做着就无师自通了。如果在做的过程中还能稍微加点思考,稍微看一些别人的经验和做法,成长会更快,效果也会更好!

还不过瘾? 如果我的分享对你有那么一点点启发和帮助,请:

1、点赞。防止以后找不到,想看的时候,在自己主页就能找到了,很方便;
2、关注我和专栏。让我们成为长期关系,下一篇会分享更多的硬核干货;
3、本文来源,公众号:伤心的辣条。这样的好内容,里面还有近百篇。 谢谢你的支持!
4.软件测试技术交流群:746506216

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postman接口测试——我看过最详细+全面的文章教程了【转载】 的相关文章

  • 为什么来自 POSTMAN 的 POST 请求返回空?

    我在邮递员中的标题如下 我的身体是这样的 在 Laravel Lumen 路线中 我像这样检查 router gt group middleware gt auth function router router gt post sales
  • 一文让你了解UI自动化测试

    测试都起什么作用 是项目的保险 但不是项目的救命草 测试无实际产出 但作用远大于实际产出 测试是从项目维度保证质量 而不是测试阶段 UI自动化 下面简称自动化 基于UI进行自动功能测试 以Web端作为例子 一般的UI功能自动化都是基于HTM
  • 如何在邮递员中传递客户端凭据?

    这个卷发效果很好 curl acme acmesecret localhost 9999 uaa oauth token d password password username user grant type password H Acc
  • 如何在邮递员的当前时间戳中添加更多时间?

    我知道我可以将当 前时间戳添加到请求中 如下所示 postman setEnvironmentVariable pickUpTime new Date toISOString 但是 我想在 Postman 的当前时间戳上添加 10 分钟后的
  • 如何使用邮递员测试获得代码覆盖率

    我们在 RestEasy 中创建了 REST 服务 并在 Wildfly 服务器中运行 我们正在运行 Postman 测试用例来测试 Rest URL 当我们执行邮递员测试套件时 有没有办法获得服务的代码覆盖率 我们使用SonarQube来
  • 将 body 中的 json 数据发布到 Web api

    我总是从 body 得到 null 值 为什么 我使用提琴手没有问题 但邮递员失败 我有一个这样的网络 API Route api account GetToken System Web Http HttpPost public HttpR
  • tv4.validate 始终返回 true。即使我的模式无效,即: var == "dummy"

    tv4 validate 将始终返回 true 无论架构是有效的 JSON 还是只是虚拟字符串 我浏览 stackoverflow 查找相关问题 但 banUnknownProperties 对我没有帮助 正如我所说 我什至尝试将架构变量更
  • 尝试获取 Pinterest 访问令牌时出现错误

    我的问题类似到这个 https stackoverflow com questions 38070424 how to get an pinterest access token我已遵循尝试获取 Pinterest 访问令牌的每一步 htt
  • 如何使用邮递员发布对象和列表

    我在用邮递员打包的应用程序 https chrome google com webstore detail postman fhbjgbiflinjbdggehcddcbncdddomop hl en发送帖子请求 我想请求以下控制器 如何使
  • 导出邮递员中的所有集合

    我有多个收藏品的邮递员 我可以一项一项地导出 但我没有找到任何按原样导出全部的选项 在进入团队模式时也是如此 是否可以选择将我的所有收藏导出给其他用户 您可以将所有 API 集合 环境 全局和标头预设导出到单个数据转储 zip 文件 要打开
  • 上传文件 spring boot 所需的请求部分“文件”不存在

    我想为我的 Spring Boot 应用程序添加上传功能 这是我的上传休息控制器 package org sid web import java io BufferedOutputStream import java io File imp
  • 如何用纽曼读取两个文件夹

    我与纽曼有以下行 工作正常 但我希望在同一个请愿书中执行两个文件夹 首先将执行Login full 然后再执行另一个 这不是必需的 newman run Example postman collection json folder Logi
  • 如何修复 .Net Core POST 操作中的 400 Bad Request 错误?

    我有一个 Net Core 2 1 API 它使用 EF core 发布数据 当我从 Postman 向 http localhost 3642 task create 发出 POST 请求时 收到 400 Bad Request 错误 由
  • Postman 中的“传输开始”是什么意思?

    我试图弄清楚为什么 API 需要很长时间才能处理我的请求 并在 Postman 中发现了这一点 传输开始是什么意思 https community postman com t how to interpret time details in
  • 更改 PostMan 中的响应

    我正在使用开放 API 但我只使用了 API 提供的响应中的一小部分数据 当我使用具有不同参数的 API 进行测试以查看响应时 我不想每次发送请求时都看到整个 API 响应 我只想查看我感兴趣的数据 例如 响应有 3 个对象 Status
  • 如何在CI环境下运行postman的newman?

    我想跑newman在我的 CI 环境 solano ci 上 newman是一个运行邮递员集合中的请求的工具 我有一个newman脚本在我的package json 而且我也有一个npm start启动服务器的脚本localhost 300
  • 请求响应后正文中出现奇怪的字符

    我正在使用 NodeJS 和 Request 来发布 JSON 并获取其中包含数据的结果 我使用 Postman 设置此请求 并获取完全可读的 JSON 数据 d type Qvision WoningenModule Lib aanbod
  • Postman - 所需的 MultipartFile 参数不存在 - Spring,Java [重复]

    这个问题在这里已经有答案了 Edit 这个问题不同于 jQuery Ajax 文件上传 所需的 MultipartFile 参数 文件 不存在 https stackoverflow com q 29488852 2279082不同之处在于
  • 如何禁用 Postman 应用程序的自动更新

    有没有办法禁用 Postman 中的更新 7 26 对我来说有问题 它会在 nresponses 上冻结较大的调试数据 但 7 23 运行得很好 但即使我将 自动下载主要更新 设置为禁用 也没有帮助 因为这是一个次要更新并会自动应用 有没有
  • 如何查看 Postman Collection Runner 中的回复?

    我正在使用 Postman Collection Runner 使用迭代多次运行相同的请求 我的测试按预期工作 但我无法看到每个请求的单独响应 是否可以在 Postman Collection Runner 中查看请求的响应 在最新版本的

随机推荐

  • pandas读取SQL数据库到DataFrame

    在查询sql数据库时可以直接将数据读取到dataframe中 这样直接解决读取了大量含BLOB的记录后出现BLOB数据无效的问题 如LOB variable no longer valid after subsequent fetch 对这
  • python绘制饼图双层_Python通过matplotlib画双层饼图及环形图简单示例

    1 饼图 pie 即在一个圆圈内分成几块 显示不同数据系列的占比大小 这也是我们在日常数据的图形展示中最常用的图形之一 在python中常用matplotlib的pie来绘制 基本命令如下所示 python3 X版本 vals 1 2 3
  • 刷脸支付促使传统行业迎来了数字化变革契机

    人脸识别的时候可以进行性别识别 性别识别是利用计算机视觉来辨别和分析图像中的人脸性别属性 多年来 人脸性别分类因其在人类身份认证 人机接口 视频检索以及机器人视觉中的潜在应用而备受关注 性别分类是一个复杂的大规模二次模式分类问题 分类器将数
  • Flutter安装的常见错误

    1 android studio not installed flutter config android studio dir E Android AndroidStudio 指定android studio的目录 2 flutter d
  • Pytorch Windows C++调用(libtorch) Cmake编译 分别在python和C++中验证一致

    0 下载准备 具备vs2015 cmake libtorch libtorch https pytorch org get started locally 先用的release版本测试了一下 把lib中的dll放在bin中 然后加到环境变量
  • 云服务器网卡mac地址修改,服务器mac地址修改教程

    服务器mac地址修改教程 内容精选 换一换 您可以根据以下步骤使用管理控制台创建一个裸金属服务器实例 本教程以部署一台Web应用服务器为场景 旨在帮助您快速创建一个实例 因此不会涵盖所有可能的选项 详细的创建信息和参数说明 请参见创建裸金属
  • NGUI的学习

    一 导入和创建UIROOT 1 导入Ngui 导入哪个都可以 推荐第一个 2点击NGUI Options Reset prefabs ToolBar 插入背景prefab创建了UIROOT和摄像机及背景 二 UI Label 的使用 1 选
  • (三)kityMinder如何实现节点间的跳转

    本文章系列将会记录在做kityminder二次开发过程中 遇到的问题以及解决方法 有同事反馈需要脑图能够支持类似于xmind中的节点中的跳转的功能 但是实际上节点目前支持的链接方式只是支持跳转到外部的链接上去而已 并不能够支持节点间跳转的功
  • 微信支付——微信退款实战教程(Java版)

    微信支付之微信申请退款实战 Java版 微信支付业务场景 一 注意事项 二 微信支付退款案例 1 微信退款案例 二 微信支付官方说明 总结 微信支付业务场景 当交易发生之后一年内 由于买家或者卖家的原因需要退款时 卖家可以通过退款接口将支付
  • 利用python中GDAL读写tif文件

    废话不多说 直接上代码 读取tif from osgeo import gdal import sys def Read img2array img file path 读取栅格数据 将其转换成对应数组 img file path 栅格数据
  • 推特色情机器人账号泛滥,马斯克的“治推谋略”何在?

    据BleepingComputer消息 推特虚假机器人账户泛滥的问题不仅还未得到解决 其中传播色情信息的机器人账户近期反而严重泛滥 在安全研究小组MalwareHunterTeam最近的一项调查研究中曝光了多个传播虚假消息的机器人账户 它们
  • ASP.NET三层架构详解

    实例截图 文件 590m com f 25127180 489402295 978e99 访问密码 551685 以下内容无关 分割线 在vue3里面 我们可以通过 reactive 来实现引用类型的响应性 那么基础类型的响应性如何来实现呢
  • C语言 在数组中找到和值为目标值的两个元素

    输入你的目标值target 就能找到相加为target的两个数了 自己输入一个数组 并且设定一个目标值 target 就能在数组中找到两个相加等于target的元素了 include
  • 基于linux的调试技术

    虽然使用printk函数可以很方便的将消息写入日志文件或者控制台 但是大量使用printk函数频繁的操作日志文件或者控制台文件会严重影响到linux驱动的开发性能 因此 这就需要linux驱动在开发阶段使用printk函数输出消息 在正式发
  • 解决“Pick up system reserved threshold 500ms because of config missing”

    skywalking启动日志一直刷 Pick up system reserved threshold 500ms because of config missing 如下图 原因缺少动态的配置项 skywalking支持动态配置的配置项如
  • 【总结】为什么对累积奖励减去baseline项能起到减小方差的作用?

    深度强化学习实验室 论坛 http deeprlhub com 来源 https zhuanlan zhihu com p 98506549 作者 风清云 很多论文的工作都专注于减少policy gradient的方差 以得到更加优质且稳定
  • TT100K数据集

    http cg cs tsinghua edu cn traffic sign data model code data zip
  • 字符转ASCLL码输出

    今天做EDA课程设计时 同学的串口通信程序涉及到字符和ASCLL码的转化 我看着他一个字符的对着ASCLL表 然后再敲进程序 真心急 想想都大三了 C语言都大一学的了 而现在经常遇到的问题 很多大学生都直接用非常笨的方法去弄 却不知道使用自
  • USB转串口那些事儿—USB转串口工作原理及应用

    一 简介 USB转串口即实现计算机USB接口到物理串口之间的转换 可以为没有串口的计算机或其他USB主机增加串口 使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备 USB虚拟串口应用特点 USB应用广泛 支持热插拔 传输速
  • Postman接口测试——我看过最详细+全面的文章教程了【转载】

    Postman简介 一般简单的接口测试我们可以直接在浏览器里面进行调试 但是涉及到一些权限设置的就无法操作了 因此我们需要接口测试的相关工具 Postman 是一个接口测试和 http 请求的工具 官网地址 https www getpos