[Postman]接口自动化测试入门

打印 上一主题 下一主题

主题 1047|帖子 1047|积分 3141

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
文章大多用作个人学习分享,假如各人觉得有不足或错漏的地方欢迎批评指出或补充
此文章将完整的走一遍一个web页面的接口测试流程
大致路径为:
        创建集合->调用接口登录获取token->保存token->带着token去完成其他接口的自动化测试->断言->断言->保存测试效果
简单介绍

        postman是用于软件测试调试接口的工具,通过模拟用户发出的http哀求参数来验证响应是否与盼望值相符合。
新建集合与哀求

workplace中创建一个集合,以及在集合中创建哀求
在集合中,可以将组织干系的API都整合到一起,且可以按照顺序一键运行,记录测试效果,生成测试报告

下面会以csdn中的搜索接口来走一遍这个流程
csdn页面中需要先进行登录,才可完成后续的操作
以是,我们第一步的是需要先获取登录接口中返回的认证信息。
postman中参数变量的存储

通常在调用了一个登录接口后,会相应的返回一个token或者是cookie。让客户端存储下来,好完成后续的身份验证。
假如我们想要对一些有身份验证要求的接口进行测试,就要在哀求头上对应的加上一个token或者cookie(对应的身份验证方式就要看被测接口的开辟计划了)
对于哀求头或者哀求体中的某些参数,我们可以使用情况变量或者全局变量去进行赋值。
首先,先观察csdn登录接口的计划与参数

下面是csdn的账密登录接口对应的参数,userIdentification是账号,pwdOrVerifyCode是密码
  1. {
  2.     "userIdentification":"",
  3.     "pwdOrVerifyCode":"",
  4.     "loginType":"1",
  5.     "webUmidToken":"",
  6.     "uaToken":"",
  7.     "agreedPrivacyPolicy":0
  8. }
复制代码
我们在对应的进行传参登录后,再查看respond,可以发现其返回的cookie格式是由多个set-cookie以键值对的方式返回的。 

想要把这个respond里的cookie带到后续哀求接口的header的参数中,方法可以有如下:
使用javascript对响应进行处理存储cookie到情况变量  

大致的流程是:
   1. 首先对登录接口进行哀求
  2.使用postman中的test模块编写javascript,对响应中的cookie进行存储到情况变量当中
  3.在后续的接口上,将cookie字段中的参数使用一个占位符进行更换
  4.效果是,在进行哀求时header就会带着cookie去访问了            
  新建一个情况与情况变量

并在哀求中使用上对应的情况,这样在实验javascript的时候,才会赋值到对应的情况变量上 
编写一个javascript脚本去存储响应头里的所有set-cookie并进行拼装处理
  1. //  拿header里面set-cookie
  2. const cookies = pm.response.headers.filter(function (header){
  3.     return header.key.toLowerCase() === 'set-cookie';
  4. })
  5. // 拼接起来
  6. let cookieString = cookies.map(function (cookie){
  7.     return cookie.value.split(';')[0];
  8. }).join(';');
  9. // 存储到环境变量中
  10. pm.environment.set("cookie", cookieString);
  11. // 打到控制台看一眼
  12. console.log(pm.environment.get("cookie"));
复制代码

在接口进行哀求响应后,再去查看情况变量中的cookie变量。可以发现cookie已经存储起来了 

在其他需要认证的接口上的哀求头里加上cookie键,并将值用占位符取代。这样在哀求的时候,就会将情况变量里的cookie值加到哀求头上,完成身份验证。
使用这个方法同理,也可以对其他响应体或者响应头中的参数进行存储或处理。
postman中的cookie管理

其实,在postman当中会自动识别响应当中是否包罗有cookie,假如有的话会根据域名存储起来,下一次在对同一个域名的其他接口进行哀求的时候,会自动给你加上域名对应的cookie

会自动的给你先拼接好这个哀求头中的cookie 

 断言

假如想要知道一个接口的响应是否符合预期,那么可以写一个断言来对响应进行判断。
在postman中提供了一个pm API去方便编写一些脚本进行测试
pm.test是此中会用到进行断言或者测试的方法
pm.test()会接收两个参数,
        第一个参数是,测试的名称
        第二个参数是,测试函数,包罗了测试的逻辑
状态码断言

假如我想要判断一个接口的状态码是否为200,则脚本可以编写为:
  1. pm.test("状态码为200", function(){
  2.     pm.expect(pm.response).to.have.status(200);
  3. })
复制代码
响应体内容断言

想要判断返回的jsonData中的某个字段是否存在,以及对其value进行断言,可以进行下面的编写。
场景方法
判断value是否为某一个特定值to.eql(value)/to.equal(value)
判断value是否小于某个值to.below(value)
判断value是否大于某个值to.above(value)
判断value是否包罗某个值to.include(value)
判断对象是否包罗某个键/字段/属性to.have.property(key)
eg,判断message字段是否为success
  1. pm.test("检查message字段的value", function(){
  2.     const jsonData = pm.response.json();
  3.     pm.expect(jsonData.message).to.eql("success")
  4. })
复制代码
eg,判断score字段是否小于50 
  1. pm.test("检查score字段的value是否小于50", function(){
  2.     const jsonData = pm.response.json();
  3.     const data = jsonData.data;
  4.     const score = data.score;
  5.     let scoreData = score.score;
  6.     pm.expect(scoreData).to.below(50);  // 检查score字段的value是否小于50,是的话通过
  7. })
复制代码
eg中对应的响应体内容
  1. {
  2.     "code": "0",
  3.     "data": {
  4.         "password": {
  5.             "hasInfo": true,
  6.             "expired": true
  7.         },
  8.         "email": {
  9.             "hasInfo": false,
  10.             "email": null
  11.         },
  12.         "score": {
  13.             "score": 30
  14.         },
  15.         "loginLog": {
  16.             "hasInfo": true,
  17.             "logRisk": true
  18.         },
  19.         "showCancellation": true
  20.     },
  21.     "message": "success",
  22.     "status": true
  23. }
复制代码
响应头断言

判断response的header中某一个字段是否为某一个值时
  1. pm.test("检查响应头中的content-type是否为application/json;charset=utf-8", function(){
  2.     pm.expect(pm.response.headers.get('Content-Type')).to.equal("application/json;charset=utf-8")
  3. })
复制代码
响应时间断言

判断本次响应的时间是否在600ms之内
  1. pm.test("检查响应时间是否在600ms之内", function(){
  2.     let time = pm.response.responseTime;
  3.     pm.expect(time).to.below(600);
  4. })
复制代码
DDT数据驱动测试

DDT(Data-Driven Testing,数据驱动测试)是一种自动化测试方法,指通过使用外部数据文件(如 CSV、Excel、JSON 等)或数据源来驱动测试的输入。它的核心思想是将测试数据和测试逻辑分离,以便在不修改测试代码的情况下,用不同的数据集来重复实验同样的测试逻辑。
学会了接口身份认证登录的方式,以及断言的编写后,就来到了被测接口的计划了。
像是对csdn中的文章搜索接口进行测试,测试返回的内容是否包罗搜索关键字
 在network中找到的接口可以直接以bash形式复制下来,再导入到postman中,就可以带着参数以及其哀求头的参数了

 编写CSV文件


此处就简单的计划一下测试用例,不具有太多的参考性。

再将postman中搜索接口的关键字的value用占位符更换,留意占位符的定名要与csv文件中对应的参数名一致

响应的效果一般是这样滴
 
运行集合

写好搜索接口的断言
  1. pm.test("检查响应中是否有key值", function(){
  2.     // 拿result_vos 这个对象是一个数组,一个元素就是一篇文章的信息
  3.     let result_vos_data = pm.response.json().result_vos
  4.     // 还要先判断是否存在result_vos
  5.     // 如果result_vos为空,下面的forEach也不会执行,断言会通过
  6.     pm.expect(result_vos_data).to.be.an('array').that.is.not.empty
  7.     // 遍历result_vos_data中存储的元素,检查元素中的title字段是否包含有{{key}}参数
  8.     // 动态的从csv中取参
  9.     let key = pm.variables.get('key');
  10.     console.log(key)
  11.     result_vos_data.forEach((item, index) => {
  12.         // 检查是否有title字段
  13.         console.log(item)
  14.         pm.expect(item).to.have.property('title');
  15.         // 检查title字段是否为空
  16.         let sign = item.title.toLowerCase().includes(key);
  17.         console.log(sign)
  18.         pm.test(`返回的下标为${index}的数据是否通过`, function(){
  19.             pm.expect(sign).to.be.true;
  20.         });
  21.     })
  22. })
复制代码
打开菜单后,选择 Run collection

 可以在上传附件中参加写好的csv文件

但是有一点需要留意的是,测试接口根据csv文件中的参数个数,需要进行循环n次。但这个循环次数是会将整个集合的接口都重新调用一遍。
像是一些获取前置条件的接口:登录接口之类的 ,不想且不需要被重复调用。
只能创建另一个集合去单独调用了
在点击之后对应的测试报告就会生成出来啦


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表