本文首发:Postman使用教程-API接口自动化测试初探-卡拉云
Postman是一套API接口测试工具,它的强大在于灵活趁手的接口测试功能,极大的提高了API测试效率。本教程将由浅入深,带领大家一起学习如何使用Postman进行接口测试。
API是什么?
API的英文即ApplicationProgrammingInterface首字母的缩写。不要被这么长的单词吓到,直译过来的意思就是:程序之间的接口。我更倾向于把API理解为,程序之间的合约。有关API是什么及它的意义这里就不展开讲了,了解更多可看卡拉云博客之前的文章《API是什么:一篇讲透API》
Postman是什么?
Postman是一款API开发协作工具,它可以帮助你测试和开发API,Postman提供了测试API的友好界面和功能,使用简单便捷,安全可靠。Postman是API接口测试工具的Top因为它简单可靠又免费,目前有超过800万开发者用户使用。特别是API批量测试功能,在近几次的大版本更新中,用户体验得到了极大的提升。Postman是每一位前后端开发者必掌握的开发工具。
如何安装Postman
Postman支持Windows、Mac和Linux,也可以直接跑在浏览器里,跨平台,使用相当便捷。
API模拟工具GoRest
本教程使用模拟API工具GoRest进行模拟API测试。GoRest有非常多的使用场景,比如,后端接口还没有准备好时,我们可以先用GoRest模拟测试,又或者你自己暂时不想搞服务器,也不想搭后端,也可以先用GoRest来测。
GoRest可以理解为后端工程师帮你搭好了后端服务器,而且是完全测过的,几乎不可能有Bug。GoRest除了其中的数据是模拟的,所有API响应都是完全真实的,你可以通过API调用的返回数据判断你的前端是否有问题。
GoRest的API调用URL及规则。
通常API由BaseURL+Endpoint构成。比如上中第一个Resources:
这个API是由https://gorest.co.in+/public/v1/users即BaseURL+Endpoint组成的。一般我们可以从API地址看出调取信息的大意,这段URL是调用GoRest上有关users的信息。
下一节,我们使用GET请求调用这个API,看看返回结果是不是与users信息有关。
用Postman发出第一个GET请求
GET请求基本操作
GET请求是API中使用最频繁的请求之GET请求仅从数据库中请求读取数据,不会修改服务器中的数据。
接下来,我们来创建一个基本的GET请求
点击主界面「+」号,新建一个请求页
选择GET请求命令
输入API地址:
在GoRestAPI设计中GET请求无需鉴权,所有我们直接点击「Send」即可远程调取服务器信息。
点击「Send」,我们可以看到下方的Body显示了GETAPI返回值,第一段落是users信息概览,下面是一组组user信息。
如果我们只想看调取其中一位用户的信息应该怎么办呢?我们可以在APIURL中带上参数。
带参数的GET请求
如果我们想查询ID为2043的用户信息,我们只需要在请求页面中的Params(参数)标签页的KEY-VALUE内填写对应的参数即可,之后Postman会自动在APIURL中生成你填写的参数,使URL带上参数GET请求。
设置完成后,点击「Send」
我们可以看到,返回值中仅包含我们请求的userid为2043的用户信息。
GET请求中的多条件查询
有时,我们需要使用API进行多条件查询操作,比如想找name值为kalacloucom,同时gender值为male的用户。
主URL之后使用?连接参数,参数与参数之间使用&连接符连接。
我们可以直接在Postman的Params中直接填写KEY-VALUE
让Postman帮我们生成,然后点击「Send」
可以看到APIGET调取了我们设定的两个VALUE值的data信息。
特别提示,你可以点击右上角的「BulkEdit」进行参数的批量编辑
Params批量编辑模式。
在Postman中发送POST请求
这一节我们讲POST请求,POST请求和GET请求最大的区别是GET请求仅使用只读形式读取数据,而POST请求会修改服务器中的数据,比如创建新用户,创建用户信息,上传片等操作都是用POST完成的。
POST请求前,使用Postman对API鉴权
POST不再仅仅是读取数据,会涉及到对数据的写入,这种敏感的操作,一定会涉及到账号鉴权操作。
GoRest模拟API工具使用HTTPBasicAuthentication鉴权方式
这种鉴权方式可以直接放在Headers中以Key-Value的形式进行验证,本教程演示稍微复杂点的OAuth2鉴权方式,好让大家学到更多。
首先在GoRest注册账号,然后点击顶部的「RestConsole」进入控制页,我们可以在这个页面获得自己的AuthToken,这段就是API用于鉴权的密钥。
在Postman请求页的Auth标签中,选择鉴权类型为OAuth0,然后在AccessToken中填写网页上的这段Value后,在请求类型中选择POST,输入API请求地址
然后点击「Send」
如果HTTP响应代码返回42表示鉴权成功,只是没有填写数据。
特别提示:在本案例中使用的GoRestAPI是先检测Token是否正确,之后在检测body等信息。也有先检测提交信息是否正确再鉴权的API,这取决于API的开发者怎么设定,那么这种情况422就不代表鉴权成功。所以谨慎起见,所有4XX开头的响应代码,你都可以理解为出现了错误。
如果返回401说明鉴权验证失败你的Token可能复制错了,请检查后再试。
鉴权成功后,下一节,我们通过APIPOST请求将第一组数据写入服务器数据库。
用Postman发出第一个POST请求
上一节,我们通过APIToken鉴权成功,下面我们在请求页设置POST请求信息。
请求命令选择POST,然后在地址栏填写API地址:
在「Auth」标签页根据本文上一小节设置API鉴权AccessToken
在Body中选择raw然后选择JSON格式。
将下列JSON代码填入编辑框,此为本次POST发送给服务器的内容。
我们将注册一个新用户,用户信息包含在这个JSON文本里。
{
'name': 'kalacloud',
'gender': 'Male',
'email': 'JiangChuan@kalacloud.com',
'status': 'Active'
}
点击「Send」,发送POST请求。
我们可以看到API返回信息,已经在服务器中注册好新用户,新用户ID为215并一起返回了我们刚刚提交的用户注册信息。
如果你也看到了类似的返回结果,那么恭喜,你的第一个POST请求被服务器成功接受,你通过API在服务器上注册了一个新用户。
扩展阅读:最好的6个免费天气API接口对比测评
用Postman发送第一个PUT更新请求
PUT请求一般用于更新服务器已有资源,如果服务器中没有对应的资源,那么PUT会创建相应的资源
打开你的Postman我们来创建一个PUT请求。
点击「+」号,新建一个请求页请求类型选择「PUT」根据第四节我们使用POST请求创建的资源ID为147又根据GoRestAPI的文档得知,修改资源的API地址为https://gorest.co.in/public/v1/users/{{ID}},所以我们要使用PUT修改ID为1475资源的请求地址应该写:
选择在Body标签中填写JSON格式的资源修改信息。我们将1475中的邮箱由JiangChuan@kalacloucom修改为Hi@kalacloucom,所以我们在Body中填写以下代码。
{
'name': 'kalacloud',
'gender': 'Male',
'email': 'Hi@kalacloud.com',
'status': 'Active'
}
选择Auth标签,进行API鉴权,鉴权方法详见本文第四节《使用Postman对API鉴权》点击「Send」发送PUT请求
如上所示,可以看到红4位置响应代码返回200,这说明PUT请求已经执行成功。返回的Body信息中,email字段已经更新为Hi@kalacloucom
用Postman发送第一个PATCH更新请求
PATCH请求一般用于服务器资源的部分更新,它相对于PUT提交的数据更少,不用提整个数据,只需要提交需要修改的字段即可。有关PUT和PATCH的更多区别,可查看本文第七节。
打开你的Postman我们来创建一个PATCH请求。
点击「+」号,新建一个请求页请求类型选择「PATCH」根据第四节我们使用POST请求创建的资源ID为147又根据GoRestAPI的文档得知,修改资源的API地址为https://gorest.co.in/public/v1/users/{{ID}},所以我们要使用PATCH修改ID为1475资源的请求地址应该写,到这里都和PUT请求修改资源的方法一样。
选择在Body标签中填写JSON格式的资源修改信息。上一节我们已经将ID为1475资源的邮箱改为Hi@kalacloucom,接着我们用PATCH请求把这个邮箱改为HelloWord@kalacloucom
{
'email':'HelloWord@kalacloud.com'
}
选择Auth标签,进行API鉴权,鉴权方法详见本文第四节《使用Postman对API鉴权》点击「Send」发送PATCH请求
如上所示,可以看到红4位置响应代码返回200,这说明PATCH请求已经执行成功。返回的Body信息中,email字段已经更新为HelloWord@kalacloucom
PUT和PATCH的区别
在HTTP协议中,PUT和PATCH都是用于更新服务器资源的命令,但他们有着不同的格式和用途。
PUT请求:一般用于更新服务器已有资源,如果服务器中没有对应的资源,那么PUT会创建相应的资源
PATCH请求:用于局部更新服务器现有资源,它不用像PUT更新资源中的一点点也要提交所有字段信息,PATCH更新哪个字段就提交哪个字段的更新信息即可。
举例说明PUT和PATCH的区别:
同样是更新资源中的Email信息,PUT需要带上资源中的所有信息,然后在更新
而PATCH则仅需要提交更新部分,即仅提交邮箱信息即可
如果PUT像PATCH一样仅提交资源的局部信息会发生什么呢?会400报错。
PUT不论修改多少,必须把修改资源的全部字段写全,否则会400报错。
扩展阅读:最好用的5款React富文本编辑器
用Postman发送第一个DELETE删除请求
我们在上文讲了获取(GET),创建(POST),更新(PUT/PATC请求,接着我们来说说删除(DELET请求。顾名思义,DELETE请求执行可删除整个资源。我们来直接实践一次你就明白了。
打开你的Postman,跟随本教程一起创建一个DELETE请求。
点击「+」号,新建一个请求页请求类型选择「DELETE」我们来把上文刚刚创建的ID为1475的资源彻底删掉。根据GoRestAPI的文档得知,删除资源的API请求地址为https://gorest.co.in/public/v1/users/{{ID}},所以我们要使用PATCH删除ID为1475资源的请求地址应该写:
选择Auth标签,进行API鉴权,鉴权方法详见本文第四节《使用Postman对API鉴权》点击「Send」发送DELETE请求,删除对应的资源。
如上所示,提交DELETE请求后,响应代码为20返回的body为空,删除成功。
特别提示:在GoRest的文档说明中,特别说了DELETE删除返回值的状态。
API返回状态具体是怎么样的,还要看API的开发者是如何约定的,并非只有返回200才是成功的。
扩展阅读:PAW使用教程-手把手教你API接口测试
Postman中的全局变量、环境变量、集合变量的设置
Postman设置变量的意义
Postman里有多种变量,我们可以把某些重要的值抽象出来变成变量,方便我们做场景/条件切换。比如,我们可以把baseURL抽出来,在环境变量里设置「生产环境变量」和「测试环境变量」,之后,我们只需要切换标签即可快速将数据从一个环境切换到另一个环境中,非常方便。
Postman常用的三种变量形式
全局变量:全局变量一旦声明,即可应用到Postman中所有测试的API中。任何请求都可以直接使用全局变量,它的作用域是全局的。环境变量:Postman的环境变量可以理解为一组选项,当这组环境变量选项被选中时,才会生效,特别适合「生产环境」和「测试环境」之间的切换等应用场景。集合变量:集合变量是针对集合生效的,一个集合下可能有N条API请求,集合变量可以一次修改集合下的所有变量数值。
以上三种变量的作用域从大到小为全局>集合>环境,当三个变量形式同时作用于一个API测试条时,Postman会优先使用最小作用域变量。
如何在Postman设置全局变量与环境变量
新建一个请求页,点击右上角的「小眼睛」进入变量设置页。页面上方为「环境变量」,我们点击编辑设置环境变量名为「卡拉云_API测试环境」VARIABLE设置为baseURL,INITIALVALUE设置为https://gorest.co.in,保存之后我们就可以使用{{baseURL}}变量来替代APIURL了。页面下方为「全局变量」,VARIABLE设置为kalacloud_id,INITIALVALUE设置为2312(2312为GoRest中的一个已存在的用户信息I,保存后我们就可以使用{{kalacloud_id}}变量来替代ID值了。
我们来一起测一下刚刚设置好的「全局变量」和「环境变量」是否生效。
新建一个GET请求页,地址栏填入:
点击「Send」
返回响应代码为200说明请求成功,返回的Body信息是ID为2312的用户信息,说明全局和环境变量已生效。
如何在Postman设置集合变量
集合变量是指应用在整个集合所有请求中的变量,集合变量优先与其他变量应用与请求,也就是说如果有集合变量,那么其他变量与集合变量相冲突的化,优先执行集合变量。
集合变量很适合临时修改整个集合中的变量,来针对集合进行测试。
打开你的Postman,我们一起操作一遍。
选中一个集合,点击集合标题右侧「…」选择编辑。进入集合设置页,选择Variables设置集合变量此时,整个集合下所有请求页,都应用了此集合变量。
如何使用PostmanPre-requestscripts预请求脚本
Pre-requestscripts预请求脚本是在API请求之前执行的脚本,我们可以临时更改请求的某些变量。一般预请求脚本有这么两种常见的应用场景。设置动态请求头信息。设置动态请求参数信息。比如,当我们要请求一个与时间有关的资源时,我们可以在预请求脚本中添加timestamp字段,这是一个动态值,我们可以通过前置请求脚本来实现。
举例说明:比如我们要在header中包含一个时间戳,我们可以这样操作
在Pre-requestscripts中添加获取时间戳的代码
在header中添加预脚本中的变量TimeStampHeader当请求时,Postman会先执行预脚本获取时间戳,然后再将时间戳赋予到header中timestamp值中。
接着我们来执行这条GET请求,打开控制控制台,在控制台中,可以看到RequestHeaders中包含我们刚刚设置的时间戳「timestamp」特别提示:有关控制台的讲解,在本教程第十二节。
附:常用的Pre-requestscripts:
获取变量
//通用语法
postman.getGlobalVariable('key'); //获取全局变量
postman.getEnvironmentVariable('key'); //获取环境变量
//postman native app 特有语法
pm.globals.get('key'); //获取全局变量
pm.environment.get('key'); //获取环境变量
设置变量
//通用语法
postman.setGlobalVariable('key','value'); //设置全局变量
postman.setEnvironmentVariable('key','value'); //设置环境变量
//postman native app 特有语法
pm.globals.get('key','value'); //设置全局变量
pm.environment.get('key','value'); //设置环境变量
清除变量
//通用语法
postman.clearGlobalVariable('key'); //清除全局变量
postman.clearEnvironmentVariable('key'); //清除环境变量
//postman native app 特有语法
pm.globals.unset('key'); //清除全局变量
pm.environment.unset('key'); //清除环境变量
将数组、嵌套对象存储到全局&环境变量中
//将数组储存到环境变量中
var array = [1, 2, 3, 4];
postman.setEnvironmentVariable('array', JSON.stringify(array));
//将嵌套对象储存到环境变量中
var obj = { a: [1, 2, 3, 4], b: { c: 'val' } };
postman.setEnvironmentVariable('obj', JSON.stringify(obj));
//从环境变量中获取数组对象
var array = JSON.parse(postman.getEnvironmentVariable('array'));
//从环境变量中获取嵌套对象/json对象
var obj = JSON.parse(postman.getEnvironmentVariable('obj'));
十如何创建PostmanTests测试脚本-Postman断言功能
在Postman中Pre-request和Tests是两兄弟,一个是在调用前执行,一个是在调用后执行,我们可以在Tests中使用JavaScript校验代码协助我们验证结果,可以说Tests是Postman的断言功能
PostmanTests断言的实际应用
Postman状态类断言
我们首先创建一个GET请求,然后点击Postman中Tests标签,进入断言设置。
我们可以在右侧已经预设好的断言代码,我们先点击「Statuscode:Codeis200」,可以看到预设的代码直接写入编辑框。这段代码的意思是,如果执行调用,服务器返回响应代码为200时,判断为PASS即调用成功。
点击「Send」执行GET请求,返回的断言可以在TestResults中看到结果。
绿色的PASS,说明服务器返回的响应代码为200,调用成功。
Postman结果比较类断言
我们再添加一条带有变量的JavaScript断言设置,比较预期结果和实际返回结果之间是否一致。
我们刚刚GET请求了ID2312的用户信息,其中name的值为kalacloud
那么我们接下来写一个JS判断预期与返回结果是否一致。即预期为name的值为「kalacloud」,写断言自动判断返回结果的name值是否也是「kalacloud」
在Tests选项卡右侧选择「Responsebody:JSONvaluecheck」,我们来检测ID为2312的返回值中,name的值是否为kalacloud
我们将「YourTestName」替换为「检查ID为2312的name返回值为kalacloud」让这条测试的名字直接反应出我们想测试的内容。
使用jsonDatdata[0].name代替jsonDatvalue,即检测第一个返回值中的name的value
检测返回值:在to.eql()中输入待检测值'kalacloud',即需要检测的text。
代码如下,你可以复制并根据你的情况简单修改,然后在Postman中,跟随教程一起测试。
特别注意:这里的ID=2312是我这里的情况,你需要根据你的情况进行相应修改。
pm.test('Status code is 200', function () {
pm.response.to.have.status(200);
});
pm.test('检查 ID 为 2312 的 name 返回值为 kalacloud', function () {
var jsonData = pm.response.json();
pm.expect(jsonData.data[0].name).to.eql('kalacloud');
});
十如何在Postman中使用控制台
控制台可以非常直观的显示当前调用的一系列信息,我们可以在「菜单→view→ShowPostmanConsole」或者点击Postman左下角的「Console」标,打开控制台。
我们可以在Tests测试脚本中加入consollog来显示我们需要在控制台显示的调用信息。
如上,我们在Test脚本中加入以下代码
console.log('本次测试 id 值为',pm.variables.get('kalacloud_id'));
可以显示隐藏在变量下面的具体变量值,方便我们测试时,进行相应的判断。
十如何使用Runner批量执行测试,批量更换变量测试
当我们有一组API且这一组之间相互关联的关系,使用手动测试效率非常低。这时,我们就要用到Postman的批量执行功能,Runner不仅可以批量执行API调用,还可以批量更换变量。掌握此方法,大幅度提升API测试效率。
打开你的Postman,跟随本教程一起操作一遍吧。
本次批量API测试,我们先导入一个CSV文件,文件中包含四组等待新建的用户信息,将CSV文件导入Runner中待用。
新建POST调用页,在Body里写上创建用户所需信息,所有值使用变量替代,这些变量将从CSV中读取。
新建GET调用页,使用email作为查询KEY进行查询,如果上一步POST执行成功,那么GET就能成功查询到新建用户对应的email,查询到表示POST创建成功。
在「卡拉云kalacloucom批量测试」这个集合中设置Tests中设置全局断言,每当一个调用执行完毕时,进行Tests一次判断。
打开「卡拉云kalacloucom批量测试」合集的「RunCollection」的设置页Iterations:这是测试组,我们CSV文件中有4组测试条目Delay:延迟,一般填2000毫秒,太密集的请求,容易被服务器拒绝Data:这里选择我们刚刚的CSV文件:kalacloud_users.csv导入测试数据点击RUN蓝色按钮开始执行批量测试
从上可以看到,Postman按顺序提交了POST请求和GET请求,并连续测试了从CSV文件导入的4组数据。一键批量测试,相当高效。
十Postman接口测试总结
本文从GET/POST功能开始讲起,然后详细讲解了API接口自动化测试所需要的几个功能特点,全局/环境/集合变量设置,测试断言,测试集合等,以及最后的自动化测试工具Runner。这些功能共同构成了PostmanAPI接口自动化测试功能。
接着推荐一下卡拉云,卡拉云是一套低代码开发工具,支持多种数据库及API接入。你不仅可以在卡拉云中测试API,还能直接把返回的结果映射到组件上,不用写一行代码,只需简单拖拽即可搭建属于你自己的后台工具。
上为使用「卡拉云」调用金数据API,然后将返回结果直接映射到表格组件中。你仅需一步,即验证了API可用性,又直接把你正在搭的工具给作出来了。立即试用卡拉云,一分钟快速搭建属于你自己的API工具。
扩展阅读:
MySQL时间戳用什么类型-MySQL时间函数详解最好用的七大顶级API接口测试工具最好用的5款React富文本编辑器如何在MySQL/MariaDB中跳过多张表导出或指定多张表导出备份如何将MySQL/MariaDB的查询结果保存到文件如何在MySQL中导入和导出CSV/Excel文件
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点
_喧哗的城市、空2023-01-27
华泰股票发布港股策略研报称,截至1月24日,春节假期期间消费数据恢复良好,春运客运量修复至2019年同期57%水平,多项旅游业务反超2019年同期,电影票房修复至2019年同期105%水平,春节假期前四日北京超市等企业销售额较2019年同期增长17%,国内线下经济回暖;海外经济数据方面,欧元区1月PMI数据超预期转好,美元指数承压。资金面角度,2022Q公募基金对港股整体配置强度升至8%,预计或仍有一定配置空间。