• 技术分享 | 接口自动化测试如何处理 Header cookie


    Cookie(复数形态:Cookies)是某些网站为了辨别用户身份而储存在用户本地终端上的数据。在接口测试过程中,如果网站采取了 Cookie 认证的方式,那么发送的请求需要附带 Cookie,才会得到正常的响应的结果。接口自动化测试也是同理,需要在构造接口测试用例时加入 Cookie。

    实战练习

    对于要对 Cookie 进行验证的网站发起请求,如果在请求过程中没有传递 Cookie 数据,则会返回错误的响应结果。下面的实战以雪球为例。

    没有 Cookie 数据的场景

    下方示例对雪球的 url 发起一个 get 请求,在请求过程中没有添加 Cookie 数据。

    1. >>> import requests
    2. >>>
    3. >>> url="https://xueqiu.com/stock/search.json"
    4. >>> params={"code": "sogo", "size": "3", "page": "1"}
    5. >>> header={ "Accept": "application/json",
    6. ... "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) \
    7. AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
    8. ... }
    9. >>> r = requests.get(url, params=params, headers=header)
    10. >>> r.text
    11. '{"error_description":
    12. "遇到错误,请刷新页面或者重新登录帐号后再试",\
    13. "error_uri":"/stock/search.json",
    14. "error_code":"400016"}'
    15. >>>

    由上面的例子可以看到,如果在请求过程中没有添加 Cookie 数据,结果报错,要求登录账号。

    添加 Cookie 的场景

    接下来,在请求过程中添加正确的 Cookie 信息,即可得到正常的响应信息。

    Python 版本

    同样访问雪球,通过关键字参数 cookies 传递正确的 Cookie 数据。

    1. >>> import requests
    2. >>>
    3. >>> url="https://xueqiu.com/stock/search.json"
    4. >>> params={"code": "sogo", "size": "3", "page": "1"}
    5. >>> header={ "Accept": "application/json",
    6. ... "User-Agent": "Mozilla/5.0 \
    7. (Macintosh; Intel Mac OS X 10_14_6)\
    8. AppleWebKit/537.36 (KHTML, like Gecko) \
    9. Chrome/77.0.3865.90 Safari/537.36",
    10. ... }
    11. >>> cookies={
    12. "xq_a_token":"...省略..."
    13. }
    14. >>> requests.get(url,
    15. params=params, headers=header, cookies=cookies).text
    16. '{"q":"sogo","page":1,"size":3,"stocks":
    17. [{"code":"SOGO","name":"搜狗",
    18. "enName":"","hasexist":"false","flag":null,
    19. "type":0,"stock_id":1029472,"ind_id":0,
    20. "nd_name":"通讯业务","ind_color":null,
    21. "_source":"sc_1:1:sogo"}]}'

    Java 版本

    在 Java 中,可以使用 cookie() 方法传入雪球所需要的 Cookie 数据信息。

    1. import static io.restassured.RestAssured.*;
    2. public class Requests {
    3. public static void main(String[] args) {
    4. given().
    5. params("code", "sogo", "size", 3, "page", 1).
    6. cookie("xq_a_token", "...省略...").
    7. when().
    8. get("https://xueqiu.com/stock/search.json").
    9. then().statusCode(200).log().all();
    10. }
    11. }
  • 相关阅读:
    【网络】- TCP/IP四层(五层)协议 - 网际层(网络层) - 路由控制
    软考-高项-论文-信息系统项目的进度管理
    让测试人头疼的这几件“小事”
    【MATLAB的方程组求解】
    LeetCode算法题解|LeetCode435. 无重叠区间、LeetCode763. 划分字母区间、LeetCode56. 合并区间
    物联网感知-基于分布式光纤传感的石油石化管道综合监测
    算法----小行星碰撞
    算法学习 | day48/60 两个字符串的删除操作/编辑距离
    AUTOSAR汽车电子嵌入式编程精讲300篇-车载CAN总线网络的异常检测(续)
    初识设计模式 - 享元模式
  • 原文地址:https://blog.csdn.net/ceshiren456/article/details/126241832