Request自动化测试

一、接口测试基础

  1. 接口定义

    • 符合特定规格和协议的模块间数据交互枢纽

    • 核心作用:前后端分离开发的协作桥梁

      • 前端:负责UI渲染与交互("看得见"的部分)

      • 后端:处理数据与逻辑("看不见"的部分)

      • 协作方式:通过接口文档契约交互

  2. 项目开发流程

     

    • 接口测试优势

    • 早期发现Bug,修复成本最低(防患于未然)

    • 编码阶段即可介入(功能测试需等待测试阶段)


二、HTTP协议核心概念

  1. 请求流程
    Request → 协议 → Server → Response → Client

  2. 关键组件

    组件说明常见值/示例
    Status Code请求状态码200(成功), 302(重定向), 403(无权限), 502(服务崩溃)
    Content-Type响应数据类型text/htmlapplication/json, 多媒体(图片/音频)
    Set-Cookie用户身份标识加密键值对存储于浏览器
    User-Agent客户端设备信息用于防爬虫机制
  3. GET vs POST 核心区别

    特性GETPOST
    参数位置URL中消息体(Body)
    安全性低(参数可见)较高
    长度限制有上限无上限
    用途数据读取(如页面访问)数据提交(如表单)

    ✅ 纠正误区:POST不会在TCP三次握手时提交参数,参数均在握手完成后发送。


三、Requests库实战指南

  1. 安装与导入

    pip install requests
    import requests
  2. GET请求三种传参方式

    # 方式1:URL直接拼接
    url = "https://api.example.com?key=value&location=深圳"
    
    # 方式2:字典传参(推荐)
    params = {"key": "SYaVX1EP5R6y71KYk", "location": "深圳"}
    res = requests.get(url, params=params)
    
    # 方式3:URL规则字符串
    data = "key=SYaVX1EP5R6y71KYk&location=深圳"
    res = requests.get(url, data=data)
    
     
  3. POST请求示例

    url = "http://localhost/login"
    data = {"username": "admin", "password": "123456"}
    res = requests.post(url, data=data)
    print(res.json())  # 处理JSON响应
    
     
  4. 高级参数

    requests.get(
        url,
        headers={"User-Agent": "Mozilla/5.0"},  # 模拟浏览器
        cookies={"session_id": "abc123"},       # 身份验证
        timeout=5,                             # 超时设置
        allow_redirects=False                  # 禁止重定向
    )
    
     

四、接口依赖处理

  1. 权限依赖解决方案

    • 方法1:Cookie传递

      # 登录获取Cookie
      login_res = requests.post(login_url, data=credentials)
      cookies = login_res.cookies
      
      # 使用Cookie访问受限接口
      profile_res = requests.get(profile_url, cookies=cookies)
      
       
    • 方法2:Header模拟

      headers = {"Cookie": "PHPSESSID=t6ir8rvq70vr9uvtn133u3k9u5"}
      res = requests.get(url, headers=headers)
      
       
    • 方法3:Session会话

      session = requests.Session()
      session.post(login_url, data=credentials)  # 自动维护Cookie
      session.get(profile_url)                   # 免认证访问
      
       

五、文件与多媒体处理

  1. 文件下载流程

    res = requests.get("http://example.com/image.jpg")
    with open("image.jpg", "wb") as f:  # 必须二进制写入
        f.write(res.content)            # 使用.content获取字节数据
    
     
  2. 批量下载示例(海鲜图片)

    data = requests.get(api_url).json()["data"]["list"]
    for item in data:
        img_data = requests.get(item["imgurl"]).content
        with open(f"fishes/{item['title']}.jpg", "wb") as f:
            f.write(img_data)
    
     

六、响应处理技巧

方法适用场景示例
res.text文本响应 (text/html)print(res.text)
res.json()JSON数据 (application/json)data = res.json()["results"]
res.content二进制数据 (图片/文件)f.write(res.content)
res.cookies获取服务端Cookiesession_id = res.cookies["PHPSESSID"]

附:高频问题速查

  1. 403错误排查口诀

    查权限 → 验身份 → 看IP → 清缓存 → 读日志 → 问文档 → 找运维

  2. URL标准结构
    协议://域名:端口/路径?参数1=值1&参数2=值2...

    • 默认端口可省略(如HTTP:80, HTTPS:443)

  3. 正则提取数据

    import re
    matches = re.findall(r'<td>(.*?)</td>', res.text)  # 非贪婪匹配
    
     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值