通常简单的接口测试咱们能够直接在浏览器里面进行调试,可是涉及到一些权限设置就没法操做了,所以咱们须要接口测试的相关工具:postman是一个接口测试和HTTP请求的工具。html
postman的优势:java
Postman有Windows,Mac,Liunx以及Chrome插件版本。这里主要介绍win平台版本的使用。node
发送第一个请求:python
一、启动软件后在引导界面点击Request,给Request命名,而后建立文件夹并把该Request归属到该文件夹。web
二、在地址栏输入postman-echo.com/get而后点击send按钮,能够看到返回值。算法
以下图所示,当你在Postman中输入请求并单击Send按钮时,服务器将接收请求并返回Postman在接口中显示的响应npm
发送不一样的HTTP请求编程
GET
json
HTTP GET请求用于从服务器检索数据,数据由统一的URI(统一资源标识符)标识,GET请求可使用Query String Parameters 将参数传递给服务器。api
请求说明:
参数编辑:
响应数据:
POST
HTTP POST请求是将数据传输到服务器,返回 的数据取决于服务器的实现。
POST请求可使用query String Parameters以及body将参数传递给服务器。
案例1:
在下面的请求中,使用Query String Parameters传递参数。
https://postman-echo.com/post?param=test
返回值
{ "args": { "param": "test" }, "data": {}, "files": {}, "form": {}, "headers": { "x-forwarded-proto": "https", "host": "postman-echo.com", "content-length": "0", "accept": "*/*", "accept-encoding": "gzip, deflate", "cache-control": "no-cache", "cookie": "sails.sid=s%3A57aLbjtudZ0eAUQPTGkyqZR-k148qAzN.tS52N8wbompQ8tzqpFZnu%2Bq4x5KLy1tR9g%2FhIn9Ss7s", "postman-token": "be4d5653-949f-4ea1-b63a-8572d1a8ffb5", "user-agent": "PostmanRuntime/7.13.0", "x-forwarded-port": "443" }, "json": null, "url": "https://postman-echo.com/post?param=test" }
案例2:
发送一个Request,其中body为application/x-www-form-urlencoded类型,参数分别为param1=zed和param2=jiawen,请求URL以下:
https://postman-echo.com/post
Postmam Body 数据类型数码:
HTTP PUT请求主要是从客户端向服务器传送的数据取代指定的文档的内容,PUT请求可使用Query String Parameters以及body请求体将参数传递给服务器。
发送PUT请求,并传递字符参数“hello postman”
HTTP DELETE方法用于删除服务器上的资源,DELETE请求可使用Query string parameters以及body请求体将参数传递给服务器
DELETE请求
https://postman-echo.com/delete
返回值
{ "args": {}, "data": {}, "files": {}, "form": {}, "headers": { "x-forwarded-proto": "https", "host": "postman-echo.com", "accept": "*/*", "accept-encoding": "gzip, deflate", "cache-control": "no-cache", "cookie": "sails.sid=s%3A-PlKnJ5cqYk6Uqz9tVwj-4o1lr5LZWrg.NRSWI4CcrBfKDAGgoUszOojVC%2F5v%2FY0YqZPFrRxaavg", "postman-token": "e8737025-ca4c-4b2c-91ef-338de8fd1f09", "user-agent": "PostmanRuntime/7.13.0", "x-forwarded-port": "443" }, "json": null, "url": "https://postman-echo.com/delete" }
请求头-用来讲明服务器要使用的附加信息,比较重要的信息由Cookie、Referer、User-Agent等,在postman中能够在请求下方的Heafers栏目中设置,以下图所示
响应头-其中包含了服务器对请求的应答信息,如Content-Type、Server、Set-Cookie等,在postman主界面下方Heerders或者Postman Console界面均可以查看Response Heaader信息
Tips: 经过控制台能够看到每次请求的Request Header详细信息
不少时候,出于安全考虑咱们的接口并不但愿公开。这是就须要使用受权(Authorization)机制,受权过程验证您是否具备访问服务器所需数据的权限。当您发送请求是,您一般必须包含参数,以确保请求具备访问和返回所需数据的权限。Postman提供受权类型,能够轻松的在Postman本地程序中处理生发验证协议。
Postman支持的受权协议类型以下:
这里主要介绍加粗的受权协议
基自己份验证是一种比较简单的受权类型,须要通过验证的用户名和密码才能访问数据资源。这就须要咱们输入用户名和应对 的密码。
案例:请求URL以下,受权帐号为:
用户名:postman
密码:password
受权协议为:Basic auth
https://postman-echo.com/basic-auth
若是不输入用户名密码,直接用GET请求,则返回提示:Unauthorized
若是输入用户密码,选择Basic auth受权类型,则返回以下结果
Digest Auth是一个简单的认证机制,最初是为HTTP协议开发的,所以也常叫作HTTP摘要。其身份验证机制很是简单,它采用哈希加密方法,以免铭文传输用户的口令。摘要认证就是要合适参与通讯的两方都知道双方共享的口令。
当server想要查证用户的省份,它产生体个摘要盘问(Digest challenge),并发送给用户。典型的摘盘问用例如如下:
Digest realm = “iptel.org”, qop="auth,auth-int", nonce="dcd98b7102dd3f0e8b11d0f600bfb0c093",opaque=""
,algorithm=MD5
这里包含了一组参数,也要发送给用户。用户使用这些参数,来产生正确的摘要回答,并发送给server。再要盘问中的各个参数,其意义以下:
realm(领域):领域参数是强制的,在所有的盘问中都不准。它的目的是鉴别SIP消息中的机密。在SIP实际引应用中,它一般设置为SIP代理所负责的域名。
nonce(现时):这是由server规定的数据字符串,在server每次产生一个斩妖盘问时,这个参数都是不同的(与前面所产生的不会雷同)。“现时”通常是由一些数据经过MD5杂凑运算构造的。这种数据一般包含时间标识和server的机密短语。这确保每个“现时”都有一个有限的生命期(也就是过了一段时间会失效,而且之后不会使用),而且时独一无二的(即不论什么其余的server都不能产生一个一样的“现时”)。
algorithm(算法):这是用来计算的算法。当前仅仅支持MD5算法。
qop(保护的质量):这个参数规定server支持那种保护方案。client可以从列表中选择一个。值auth表示仅仅进行身份查验,auth-int表示进行查验外,另外一些完整性保护。
案例
请求URL以下
https://postman-echo.com/digest-auth
摘牌配置信息以下:用户密码和basic auth同样
Digest username=“postman”, realm=“Users”, nince=“ni1LiL0037PRRhofwdCLmwFsnEtH1lew”,uri=“?digest-auth”, opaque=“”
执行结果以下
{ "authenticated": true }
Hawk Auth是一个HTTP认证方案,使用MAC(message authentication code,消息认证算法),它提供了对请求进行部分加密的认证HTTP请求的方法。hawk方案要求提供一个共享对称密匙在服务器与客户端之间,一般这个共享的凭证在初试TLS(安全传输层协议)保护阶段创建的,或者是从客户端和服务器均可用的其余一些共享机密信息中得到的。
案例
请求URL以下:
https://postman-echo.com/auth/hawk
密匙信息以下:
执行结果:
{ "message": "Hawk Authentication Successful" }
若是将Key改为其余任意的字符则返回以下结果:
{ "statusCode": 401, "error": "Unauthorized", "message": "Bad mac", "attributes": { "error": "Bad mac" } }
OAuth(开放受权)是一个开放标准,容许客户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
案例
请求URL以下:
https://postman-echo.com/oauth1
请求方式为GET,Add authorization data to 设置为:Request Headers
参数配置为:
Consumer Key:RKCGzna7bv9YD57c
Consumer Sceret: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=RKCGzna7bv9YD57c&oauth_nonce=lBeuZSBkUw1&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1558957675&oauth_version=1.0", "base_string": "GET&https%3A%2F%2Fpostman-echo.com%2Foauth1&oauth_consumer_key%3DRKCGzna7bv9YD57c%26oauth_nonce%3DlBeuZSBkUw1%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1558957675%26oauth_version%3D1.0", "signing_key": "D%2BEdQ-gs%24-%25%402Nu7&" }
扩展资料:各个受权协议文档
Cookie是存储在浏览器中的小片断信息,没次请求后都将其发送会服务器,以便在请求之间存储有用的信息。好比不少网站登陆界面都有保留帐号密码,以便下次登陆。
因为HTTP是一种无状态的协议,服务器从网络链接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证,没人一个,不管谁访问都必须携带本身通讯证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工做原理。
Cookie是有服务端生成,储存在响应头中,返回客户端,客户端会将cookie存储下来,在客户端发送请求时,user-agent会自动获取本地存储的cookie,将cookie信息存储在请求头重,并发送给客户端。postman也能够设置、获取、删除cookie。
在send按钮下方点击Cookies文字菜单,弹出以下界面,而后能够设置Cookie。
请求URL以下:
http://www.baidu.com/
请求方式为GET,添加Cookie值为hobby:rubikcube
打开Console找到Request Header能够看到自定义设置的Cookie内容
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
生产环境以下:
https://postman-echo.com/get https://postman-echo.com/post https://postman-echo.com/put
在这种状况下,按照常规思路要么维护两套环境的API,要么每次手动一个个去修改URL,两种方法都低效且麻烦,设置变量就能够很好的解决这个问题。
Postman变量类型
经过比较咱们能够发现,以上两组API除了host不一样以外其余都同样,其实吧host用变量替代,这样就能够灵活切换环境。
Postman提供了变量设置,有4种变量类型:
Tips:数据变量结合Collection介绍,不在此处介绍
环境变量指在不一样环境,同一个变量值随着环境不一样而变化,好比咱们上面举例场景就可使用环境变量,当在测试环境时,host值为:dev.postman.com,当切换到生产环境时,host值变为:postman-echo.com。
环境变量设置:在postman界面点击右上角眼睛图标,便可开始设置环境变量和全局变量。环境变量设置过程以下图所示:能够设置两种环境dev和release,dev是开发测试环境;release是正式生产的生产环境。host环境变量,根据不一样的环境值而改变。
引用变量格式为{{varname}},以下图所示:
本地变量主要是针对单个URL请求设置的变量,做用域只局限在请求范围内。如请求URL:https://postman-echo.com/post,设置两个本地变量(user,passwd)做为参数。请求方式为post。
设置本地变量:
pm.variables.set("user","yi"); pm.variables.set("passwd","aeaqaaa");
引用本地变量格式:{{variable_name}}
全局变量是指在全部环境里面,变量值都是同样的,全局变量的做用域是全部请求。
全局变量设置有两种方式:
页面设置
点击右上角设置变量的图标,在Global选项菜单点击Edit菜单便可设置全局变量,以下图所示。全局变量的引用方式和环境变量同样。
注意:当环境变量和全局变量名称同样,切换到某个环境时,环境变量会覆盖全局变量。
脚本设置
在 Pre-request Script 编写以下代码能够设置全局变量:
pm.globals.set("variable_key","variable_value");
variable_key表示变量名称,variable_value表明变量值。
案例实践
在实际接口测试中,接口常常会有关联。好比须要取上一个接口的某个返回值,而后做为参数传递到下一个接口做为参数。假设如今要获取A接口返回的userid值做为B接口的请求参数。
A、B接口请求URL以下:
A:https://postman-echo.com/post
B:https://postman-echo.com/get
通常来讲执行完测试,咱们须要对测试结果来进行校验,判断结果是否符合咱们的预期,也就是断言。在街口测试中通常会根据响应状态码或者返回的数据来进行断言。
postman提供一个测试沙盒(postman sandbox)测试沙盒是一个JavaScript执行环境,能够经过JS脚原本编写pre-request Script 和 test Script。
案例
请求接口以下:
postman-echo.com/post
断言规则:
响应状态码:200
断言内容:返回的user参数值与定义的一致
响应时间:小于0.5s
测试脚本:
在pre-request Script定义变量user
pm.variables.set("user","zed");
在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); });
引用本地变量
断言结果
当咱们想批量测试某个集合里面的各个API时,能够试用Collection Runner 来批量运行API,同时能够进行环境变量,迭代执行册数,延迟时间设置。
Collection入口
Collection执行前选项
执行结果
有时咱们针对一个接口须要测试不少不一样的参数,若是每次一个个去修改参数值来进行测试这样效率确定比较低下。所以须要每次迭代执行传入不一样的参数进行测试,那么须要导入外部数据文件进行参数化,也就是数据驱动。
数据导入(此连接跳转Newman命令说明)
以下图所示,data选择json数据文件:data.json,文件类型选择application/json Json数据内容以下:
[{ "username":"Jack", "passwd":"6666" },{ "username":"Bob", "passwd":"5555" },{ "username":"Marry", "passwd":"8888" }]
执行结果
构建工做流
再使用"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')
注意:首个执行的请求要排在第一位
执行结果
相关资料:collection runs 官方文档
命令执行
在以前咱们都是在postman图形界面工具里面进行测试,可是有时候须要把测试脚本集成到CI平台,或者在非图形界面的系统环境下测试,此时就须要用到Newman。
Newman时一款基于Node.js开发的能够运行postman的工具,使用Newman能够直接从命令行运行和测试postman集合。
环境准备
配置好环境后,执行以下命令安装newman
cnpm install newman -- global
输入以下命令检测安装是否成功
C:\Users\ccl>newman -v 4.4.1
执行测试
首先将postman的集合导出到桌面新建文件夹pmtest,以下图所示:
打开cmd进入pmtest目录,输入以下命令:
newman run setNextRequest.postman_collection.json -d data.json -r html
命令说明
更多方法请输入newman -h 便可查看
报告查看
在测试文件pmtest里面能够看到自动生成的newman文件夹,打开就能够看到生成的测试报告
Html报告样式:newman-run-report
newman不只支持生成html报告,还支持其余报告类型:
jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工做,旨在一共一个开放易用的软件平台,使软件的持续集成变成可能。
下载地址:https://jenkins.io/download/
下载后安装到指定的路径便可,默认启动也买你为localhost: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里面去执行,集成步骤也很简单:
cd C:\Users\ccl\Desktop\postman_api_test
newman run setNextRequest.postman_collection.json -d data.json -r html
Tips:个人文件夹中的文件与Newman应用的文件时同样的
如此保存后再jenkins主页进行构建任务便可,其余的设置如:定时执行,发送邮件报告等功能后期再Jenkin使用手册中详细介绍。
虽然Postman功能比较强大,但毕竟时一款商业工具,多少会有些限制。好比只支持JS脚本运行,若是享用本身熟悉的编程语言(如:python,java等)来作接口自动化测试就须要导出对应的语言脚本了。
操做步骤
Postman支持导出不一样语言版本的脚本,到一个接口调试好以后,点击右侧的code字样即弹出图下界面能够选择语言。最后你须要选择语言版本便可生成对应的代码。
生成的代码片断能够点击Copy to Clipboard 复制。