目录
这段时间要求做接口测试,场景化,无非就是接口依赖接口。在这期间刚好遇到一个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
变量中。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)