前言
我将在本文中简单介绍使用python进行接口测试时,遇到302重定向时的一些测试心得。
本文涉及实例中的一些关键信息不便透漏,已作遮挡处理,不影响整体。
1 接口简介
首先,我们通过Fiddler抓包工具来分析一下请求的完整过程。
#1 GET请求,请求结果200。发起GET请求,返回下一步请求所需的data(以A和B代指)以及cookies(SESSION);(这里遇到过一个坑,就是在代码中发起请求后并未获取返回的cookies,在下一步请求的时候即使提交了表单数据也一直被当做新的请求,会返回新的参数A/B)
GET请求的返回header和RAW
#41 POST请求,返回结果302。通过POST请求提交表单数据(包含用户名、密码、验证码、上一步获取的随机参数以及一些固定参数),返回重定向地址Location;(这里也有一个坑,我们抓包后在RAW查看到data中的密码是经过转义后的,如果直接在代码中使用就会报错,因此我们需要在WebForms中去查看原始的密码)
POST请求头
POST请求的返回结果
#42 GET请求,返回结果302。向上一步的Location地址发起GET请求,获得登录cookies以及登录后的页面地址Location;
GET请求
GET请求的结果
#43 GET请求,返回结果200。最后一次GET请求,登录成功,不再截图演示。
2 代码实现
2.1 自动重定向
首先来看一下完整代码:
使用自动重定向的时候非常简单,只需要默认使用requests
库的get和post即可。
line12-19:分别定义get_request和post_request两个函数执行Get和POST请求,get时只需使用url即可,而post需要url,data以及cookies发起请求。
接下来看主函数:
line26:通过get_request函数发起请求,将返回结果保存在get_result中;
line27-28:通过re
模块使用正则表达式从get_result中提取参数A和B(因为re匹配后返回的是list,所以加上[0]表示取第一个结果);
line29:使用requests
自带的函数*.cookies.get_dict()
即可获取返回结果中的cookies并以字典类型保存;
line33:拼接下一步POST所需的data;
line42:通过post_request函数发起post请求即可,requests库会自动处理后续的重定向过程。
2.2 跟随重定向
有的接口需要登录后才可进行测试时,我们通常会保存登录时的cookies带入后续接口的请求中。但当登录使用了302重定向时,使用自动重定向的方法我们无法获取登录的cookies,这个时候跟随重定向的意义就体现出来了。下面我们来看一下完整的代码:
引用的库一样,依旧是requests
和re
。
line11-18:get_request函数新增了cookies和allow_redirects参数,post_request函数新增了allow_redirects参数。跟随重定向的关键就在于allow_redirects参数,设置为False的时候则是跟随重定向,默认情况下为True;
line45:使用*.headers['Location']
获取post请求后返回的重定向地址;
line50:使用获取的重定向地址发起GET请求;
line53:获取登录页面的重定向地址;
line54:获取登录的cookies;
line58:通过GET请求登录成功。
至此,两种302重定向的测试方法介绍完毕。