• 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

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

    1. def get_rdp_erpticket():
    2. ....
    3. reponse2 = requests.get(url='XXX/report_api/auth/info?ticket=%s'%access_token)
    4. # print(reponse2.history)
    5. reditList = reponse2.history
    6. print(f'获取重定向的历史记录:{reditList}')
    7. print(f'获取第一次重定向的headers头部信息:{reditList[0].headers}')
    8. print(f'获取重定向最终的url:{reditList[len(reditList)-1].headers["location"]}')
    9. print(reditList[len(reditList)-1].headers["location"][41:77])
    10. return reditList[len(reditList)-1].headers["location"][41:77]
    11. if __name__ =="__main__":
    12. erpticket = get_rdp_erpticket()
    13. 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值。
    1. import requests
    2. def get_rdp_erpticket():
    3. url = 'XXX/report_api/auth/info?ticket=%s' % access_token
    4. response = requests.get(url)
    5. # 获取重定向的历史记录
    6. redirect_history = response.history
    7. print(f'获取重定向的历史记录:{redirect_history}')
    8. # 获取第一次重定向的headers头部信息
    9. first_redirect_headers = redirect_history[0].headers
    10. print(f'获取第一次重定向的headers头部信息:{first_redirect_headers}')
    11. # 获取重定向最终的url
    12. final_redirect_url = redirect_history[-1].headers["location"]
    13. print(f'获取重定向最终的url:{final_redirect_url}')
    14. erpticket = final_redirect_url[41:77]
    15. return erpticket
    16. if __name__ == "__main__":
    17. erpticket = get_rdp_erpticket()
    18. print(erpticket)

  • 相关阅读:
    python经典百题之乒乓球比赛
    微信小程序--微信开发者工具使用小技巧(3)
    小波神经网络短期负荷分析,小波神经网络的缺点
    【剧前爆米花--爪哇岛寻宝】面向对象的三大特性——封装、继承以及多态的详细剖析(中——多态)。
    Leetcode.714 买卖股票的最佳时机含手续费
    【云原生之kubernetes实战】在k8s环境下部署Lychee照片管理平台
    okcc呼叫中心的的录音功能
    恩智浦为稳固地位,将扩大投资4国家 | 百能云芯
    Java实现图书管理系统
    Mac M3 芯片安装 Nginx
  • 原文地址:https://blog.csdn.net/qq_29720657/article/details/126959710