302接口重定向进行接口测试(python+request)

目录

一、背景

二、发现问题

三、解决问题

四、总结

一、背景

这段时间要求做接口测试,场景化,无非就是接口依赖接口。在这期间刚好遇到一个token的问题。可能是出于安全的考虑,token会过期。所以要自己调用生成token的接口。这个token的用途就是想要用平台内部的接口,头部需要传token。这里就遇到了一个重定向的问题

二、发现问题

第3步的接口来源自第二步302,第2步的请求路径的ticket来源第1步的响应。302这个接口在浏览器F12是抓取不到的。

 响应头:这里就包含需要跳转的URL地址,我们就是要这个erpticket

去公司的自动化测试平台配置请求一下

也没有 location字段信息

三、解决问题

通过公司自己的平台测试,响应没有需要的location字段信息。我们当然想获得响应头里面的location字段,即那一段字符串。然后通过截取获得erpticket,这样子平台的接口都能调用了。不会再报错需要重新登录。

公司自动化也是python+request发送请求,我们把代码挪到本地调试,看看返回的具体消息有没有响应头location。

通过百度,发现可以获取重定向列表以及重定向信息,history

以下是解决问题的核心代码:

 def get_rdp_erpticket():
     ....
     reponse2 = requests.get(url='XXX/report_api/auth/info?ticket=%s'%access_token)
     # print(reponse2.history)
     reditList = reponse2.history
     print(f'获取重定向的历史记录:{reditList}')
     print(f'获取第一次重定向的headers头部信息:{reditList[0].headers}')
     print(f'获取重定向最终的url:{reditList[len(reditList)-1].headers["location"]}')
     print(reditList[len(reditList)-1].headers["location"][41:77])
     return reditList[len(reditList)-1].headers["location"][41:77]

if __name__ =="__main__":
    erpticket = get_rdp_erpticket()
    print(erpticket)

执行,返回结果。通过截取获得erpticket

 这个erpticket就可以用在平台内部接口的请求头啦。

把这个函数复制到公司的自动化测试平台上,请求头那里调用一下这个函数。ok,大功告成

四、总结

现在很多测试平台都是基于python+request+Httprunner实现的,做接口测试的时候,如果不满足自己的测试场景,就可以编码去解决问题

2023年6月1日更新

代码优化:

  • 使用requests.get()方法发送GET请求,并将响应保存在response变量中。
  • 获取重定向的历史记录,并将其存储在redirect_history变量中。
  • 获取第一次重定向的头部信息,并将其存储在first_redirect_headers变量中。
  • 获取重定向最终的URL,并将其存储在final_redirect_url变量中。
  • 提取所需的erpticket值,使用切片操作从final_redirect_url中获取。
  • 返回erpticket值。
import requests

def get_rdp_erpticket():
    url = 'XXX/report_api/auth/info?ticket=%s' % access_token
    response = requests.get(url)
    
    # 获取重定向的历史记录
    redirect_history = response.history
    print(f'获取重定向的历史记录:{redirect_history}')
    
    # 获取第一次重定向的headers头部信息
    first_redirect_headers = redirect_history[0].headers
    print(f'获取第一次重定向的headers头部信息:{first_redirect_headers}')
    
    # 获取重定向最终的url
    final_redirect_url = redirect_history[-1].headers["location"]
    print(f'获取重定向最终的url:{final_redirect_url}')
    
    erpticket = final_redirect_url[41:77]
    return erpticket


if __name__ == "__main__":
    erpticket = get_rdp_erpticket()
    print(erpticket)

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件测试李同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值