Python requests库接口测试实战:GET/POST参数与响应处理详解

江岸
江岸
发布时间:2026-10-14| 4人浏览过
原创

本文详细介绍Python中requests库进行接口测试的核心用法。涵盖GET与POST请求的参数传递方式,重点解析params、data与json三者的区别及适用场景。同时讲解如何利用requests.Session()保持会话状态,并演示如何获取状态码、响应头、编码格式及JSON数据等关键响应信息,帮助开发者快速掌握接口自动化测试基础。

GET请求参数传递与实现

在接口测试中,GET方法是获取资源的基础方式。

首先需要明确接口的完整URL地址,这是请求的目标路径。

其次需配置请求头(headers),例如指定内容类型为application/x-www-form-urlencoded,以告知服务器数据格式。

通过params参数传递GET请求所需的查询参数,Python中通常使用字典格式(key-value)来组织这些参数。

具体实现代码如下所示:


import requests
url="http://api.shein.com/login"
header={"content-type":"application/x-www-form-urlencoded"}
param={"user_id":123456,"email":"123456@163.com"}
timeout=0.5
response = requests.get(url, headers=header, params=param, timeout=timeout)
# response = requests.request("get",url,headers=header,params=body,timeout=timeout)
print (response.text)

POST请求与Session会话管理

与GET不同,POST方法常用于提交数据。


import requests

url="http://api.shein.com/login"

header={"content-type":"application/x-www-form-urlencoded"}

param={"user_id":123456,"email":"123456@163.com"}

timeout=0.5

response = requests.post(url, headers=header, data=param, timeout=timeout)

# response = requests.request("post",url,headers=header,data=param,timeout=timeout)

print (response.text)

import requests

url = "https://apipc.xinqgj.com/user/login"
payload = {"phone":"17779828887","pwd":"Ty+coun/mUj1saGV2OCK6p5kN9MNt8Uznj"}
headers = {'Content-Type': 'application/json'}

response = requests.request("POST", url, headers=headers, json = payload)
print(response.text)

以下是使用Session对象进行接口请求的示例,适用于需要保持登录状态或多步操作的场景。


import requests

session = requests.Session()  #定义全局session,通过 session 保持会话
class Cms():

  def login(self):
    url = "http://192.168.1.110:8080/cms/manage/loginJump.do"
    header = {"Content-Type": "application/x-www-form-urlencoded"}
    parmas = {"userAccount": "admin", "loginPwd": "123456"}
    #通过全局 session 请求接口
    res = session.post(url=url, headers=header, data=parmas)
    print(res.json())

  def queryUserList(self):
    url = "http://192.168.1.110:8080/cms/manage/queryUserList.do"
    header = {"Content-Type": "application/x-www-form-urlencoded"}
    parmas = {"startCreateDate":"",
         "endCreateDate":"",
         "searchValue":"",
         "page":"1"}
    # 通过全局 session 请求接口
    res = session.post(url=url, headers=header, data=parmas)
    print(res.json())

if __name__ == '__main__':
  Cms().login()
  Cms().queryUserList()

params、data与json参数区别解析

在使用requests模块时,需特别注意params、data和json三个参数在报文提交时的区别。

  • requests模块支持三种携带参数的方法:data、json和params。
  • 总结而言,params适用于GET请求,而data和json主要用于POST请求。
    • 对于常见的form表单提交,可直接使用data参数,其值应为Python字典类型。
    • 若接口接收的是JSON格式数据,则应直接使用json参数进行报文提交,无需手动序列化。

接口响应信息与状态码处理

获取接口返回结果后,可对响应对象进行多种操作以提取所需信息。

使用text属性可直接获取接口返回的原始文本内容。

调用json()方法可将返回的JSON字符串解析为Python字典对象,便于后续处理。

通过status_code属性可获取HTTP状态码,通常200表示请求成功。

headers属性返回完整的响应头信息,可通过headers['name']语法获取指定的头部字段值。

encoding属性返回服务器响应的字符编码格式,有助于正确解码文本内容。

url属性返回接口实际请求的完整URL地址,可能包含重定向后的最终地址。


import requests

url = "https://xxxx.com/user/login"
payload = {"phone":"1777982xxxx","pwd":"Ty+coun/mUj1saGV2OCK6p5kN9MNt8UznjaGsQ5A/nKPSH1NZW"}
headers = {'Content-Type': 'application/json'}

response = requests.request("POST", url, headers=headers, json = payload)

print(response.text)
print(response.json())
print(response.status_code)
print(response.url)
print(response.headers)
print(response.encoding)

以上内容涵盖了Python requests接口测试的主要知识点,希望对读者有所帮助。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。