前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测试之路 pytest接口自动化-request包中的headers覆盖

测试之路 pytest接口自动化-request包中的headers覆盖

作者头像
歪小王
发布2023-03-07 20:07:35
6520
发布2023-03-07 20:07:35
举报

各位大佬,马上过年了,歪小王在这里给大家拜个早年。祝大家新年快乐,早日卷出一片天~ 年底偷懒了一段时间,一直没写公号。最近在写执行接口自动化脚本过程中,遇到了一个header的问题。就随手整理记录一下

问题描述

前段时间,完成了接口自动化解析swagger版本的代码修改。并在我们项目中跑了一次。由于是读取swagger接口,直接绕过了业务层,没有去从业务角度出发跑脚本,所以在结果上面,没有很强的参考性

通过简单修改,在yaml文件中,拼接上业务层的路由加上夹具获取登录态,然后走网关ip,从而实现正常的业务请求

但是在完成这些操作后,依然不能够实现正常的一个效果。经过与研发沟通,需要在header中增加用户id。来表明用户角色。才能实现正常的验证效果

于是就想着直接在yaml用例文件的header头中增加用户id。就又延伸了一个新的问题。会把基本的header信息覆盖

问题定位

经过一番断点调试后,发现request发起请求本身,会填写默认header值,这些默认值能够保证常规请求。如果在yaml文件中随意写一个header。在脚本执行时,就会讲这些默认值覆盖,从而导致请求不成功等一些问题。

所以通过写死yaml文件的方法来解决这个问题,就会有隐患:

  1. 写死一个变量,这个做法很low。如果换一个用户id,就每次手动调整。很麻烦
  2. 如上面所说,如果在header中写死一个值时,会将基本的默认参数覆盖掉,导致请求失败‍‍‍‍‍

解决方法

在request发起请求时,header是以一个字典的方式存在,可以通过插入用户id的方式来解决这个问题。既保证了默认值的存在。也可以将需要的用户id更新进去,达到最终的验证效果

有了目标,接下来就是实现思路

  • 首先在夹具获取登录态的方法中,将用户id提取
  • 然后将这个用户id更新到session的header中

在这个过程中,有个小坑,就是在request这个包实现共享session的时候,需要调用同一个封装实例

比如,接口脚本调用的是封装着request的A对象。此时,夹具中获取登录态的也需要调用这个A对象,如果重新实例了一个新的B对象,就没办法达到共享session的效果

最终通过这种解决方式,能够使接口自动化脚本达到预期的验证效果

结语

以上就是本期分享的内容了。关于接口自动化脚本方面,基于本次改动,扩展了一下验证范围,由原来的只验证接口的边界、合法性,延伸到接口权限验证,后面会更新一些验证接口权限的思路

各位大佬们,再次祝大家新年快乐。我们下期见~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 歪小王的测试成长之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 问题定位
  • 解决方法
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档