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

各位大佬,马上过年了,歪小王在这里给大家拜个早年。祝大家新年快乐,早日卷出一片天~

年底偷懒了一段时间,一直没写公号。最近在写执行接口自动化脚本过程中,遇到了一个header的问题。就随手整理记录一下

问题描述

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

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

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

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

问题定位

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

f453ca3391010ec77fddb28033f1ee4e.png

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

  1. 写死一个变量,这个做法很low。如果换一个用户id,就每次手动调整。很麻烦

  2. 如上面所说,如果在header中写死一个值时,会将基本的默认参数覆盖掉,导致请求失败‍‍‍‍‍

3cad919ca5e4b7da8fb2034402c9ee5b.png

解决方法

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

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

  • 首先在夹具获取登录态的方法中,将用户id提取

  • 然后将这个用户id更新到session的header中

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

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

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

结语

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值