接口自动化测试中的得力助手:Requests
一、接口自动化测试与Requests
在当今数字化飞速发展的时代,软件系统愈发复杂,接口的数量与日俱增。接口自动化测试成为保障软件质量、提升测试效率的关键环节。它能够模拟大量用户请求,快速且精准地发现接口中的潜在问题,避免人工测试的繁琐与疏漏。而在众多工具中,Requests 脱颖而出,宛如一位得力助手,为接口自动化测试人员提供了简洁、高效的操作方式,极大地简化了与各类接口交互的流程,让测试工作如虎添翼。
二、Requests简介与安装
Requests 是 Python 的一个 HTTP 库,它使得发送 HTTP 请求变得轻而易举。用简洁明了的 API,开发人员和测试人员无需深入了解底层网络细节,就能轻松实现与 Web 服务的交互。安装过程也十分便捷,对于熟悉 Python 环境搭建的小伙伴来说,只需在命令行中执行 pip install requests,等待片刻,Requests 便成功入驻你的 Python 工具库,随时待命,开启接口测试之旅。
三、Requests的常用请求方法
(一)GET请求
GET 请求是最为常见的 HTTP 请求方式之一,主要用于从服务器获取资源。使用 Requests 发送 GET 请求就像在 Python 代码里写一句日常问候语一样简单。例如,我们想要获取某个在线 API 提供的天气信息,代码如下:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
url = "https://api.testerroad.com/weather?city=Beijing"
response = requests.get(url)
print(response.text)
在这个示例中,通过将城市名称 “Beijing” 作为参数添加到 URL 后面,向指定的天气 API 发送 GET 请求,服务器接收到请求后返回的天气数据,就可以通过 response.text 打印出来查看,是不是超级直观?而且,如果有多个查询参数,还可以使用 params 字典来传递,像这样:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
query_params = {
"city": "Shanghai",
"unit": "Celsius"
}
url = "https://api.testerroad.com/weather"
response = requests.get(url, params=query_params)
print(response.text)
这样就能够更加灵活、清晰地构建带参数的 GET 请求,满足多样化的测试需求。
(二)POST请求
POST 请求常用于向服务器提交数据,比如用户注册、登录、提交表单等场景。在 Requests 中,POST 请求的使用也相当顺手。假设我们要模拟用户登录一个网站,向登录接口发送用户名和密码:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
url = "https://login.testerroad.com/api/login"
data = {
"username": "TesterRoad",
"password": "TesterRoad123"
}
response = requests.post(url, data=data)
print(response.text)
这里使用 data 参数传递了一个包含用户名和密码的字典,服务器会根据这些信息进行登录验证,并返回相应结果。需要注意的是,有时候接口要求的数据格式是 JSON,这时就要用到 json 参数,它会自动将数据转换为 JSON 格式发送,示例如下:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
url = "https://api.testerroad.com/submit_data"
json_data = {
"key1": "value1",
"key2": "value2"
}
response = requests.post(url, json=json_data)
print(response.text)
两种传参方式各有适用场景,测试时务必根据接口文档要求准确选用,确保请求顺利被服务器接收和处理。
(三)其他请求方法
除了 GET 和 POST,HTTP 协议还定义了 PUT、DELETE 等请求方法。PUT 通常用于更新服务器上的资源,DELETE 用于删除资源。虽然它们在日常接口测试中的使用频率相对较低,但在一些特定业务场景下却不可或缺。例如,要更新一篇博客文章的内容,可使用 PUT 请求:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
url = "https://www.cnblogs.com/mrjade/api/update_article/123"
update_data = {
"title": "Updated Title",
"content": "New and improved content"
}
response = requests.put(url, json=update_data)
print(response.text)
而如果要删除某条评论,DELETE 请求便能派上用场:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
url = "https://www.cnblogs.com/mrjade/api/delete_comment/456"
response = requests.delete(url)
print(response.text)
熟悉这些不同请求方法的使用,能够全方位应对各种复杂的接口测试场景,让测试覆盖无死角。
四、请求参数与请求头设置
(一)请求参数
前面提到的 params、data 和 json 是 Requests 中常用的请求参数设置方式,它们分别适用于不同的数据传递需求。params 主要用于 GET 请求中添加查询参数,使请求更加灵活精准;data 用于 POST 请求传递表单数据,格式较为简单直接;json 则专注于以 JSON 格式传递数据,满足现代 Web 开发中对数据结构化、标准化的要求。除此之外,还有一些特殊情况,比如上传文件时,需要使用 files 参数,示例如下:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
url = "https://www.cnblogs.com/mrjade/api/upload_file"
files = {
"file": open("example.txt", "rb")
}
response = requests.post(url, files=files)
print(response.text)
这里打开一个本地文件 “example.txt”,以二进制模式读取并通过 files 参数上传到指定接口,实现文件上传功能的测试,拓宽了接口测试的边界。
(二)请求头
请求头(Headers)在 HTTP 请求中起着至关重要的作用,它包含了诸如客户端类型、可接受的数据格式、授权信息等诸多关键信息,能够帮助服务器更好地理解和处理请求。在 Requests 中,设置请求头同样轻松自如。例如,为了模拟一个特定浏览器访问网页,设置 User-Agent 请求头:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
url = "https://www.cnblogs.com/mrjade"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
}
response = requests.get(url, headers=headers)
print(response.text)
又如,在向需要身份验证的 API 发送请求时,设置 Authorization 头携带令牌:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
url = "https://www.cnblogs.com/mrjade"
headers = {
"Authorization": "Bearer your_token_here"
}
response = requests.get(url, headers=headers)
print(response.text)
合理且准确地设置请求头,能够确保请求顺利通过服务器的初步校验,进入核心业务逻辑处理流程,提升测试的有效性。
五、响应对象处理
当我们使用 Requests 发送请求后,会得到一个响应对象,它蕴含着服务器返回的诸多宝贵信息。其中,status_code 是判断请求是否成功的首要指标,常见的 200 表示请求成功,404 表示未找到资源,500 表示服务器内部错误等。例如:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
url = "https://www.cnblogs.com/mrjade"
response = requests.get(url)
if response.status_code == 200:
print("请求成功")
else:
print(f"请求失败,错误代码: {response.status_code}")
另外,json() 方法是处理返回 JSON 数据的利器,它能直接将服务器返回的 JSON 字符串转换为 Python 字典,方便后续的数据提取与分析,如:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
url = "https://www.cnblogs.com/mrjade"
response = requests.get(url)
data = response.json()
print(data["key"]) # 假设返回的 JSON 数据中有一个 "key" 对应的 value 是我们需要的信息
而 text 属性则用于获取服务器返回的原始文本内容,在返回数据不是 JSON 格式或者需要查看完整的文本信息时非常实用。熟练掌握这些响应对象的属性与方法,能够快速洞察服务器的 “心思”,准确判断接口的运行状况,为测试结果分析提供有力支撑。
六、高级应用
(一)Session会话
在一些需要多次交互的场景中,比如用户登录后进行一系列操作,每次请求都重新建立连接会显得繁琐且低效。这时,Session 会话就发挥出巨大作用。Session 对象能够自动保持 cookies,模拟用户在一次会话中的连续操作。示例如下:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
# 创建 Session 对象
session = requests.Session()
# 模拟登录
login_url = "https://www.cnblogs.com/mrjade/api/login"
login_data = {
"username": "TesterRoad",
"password": "TesterRoad123"
}
session.post(login_url, data=login_data)
# 在登录后访问其他页面
protected_url = "https://www.cnblogs.com/mrjade"
response = session.get(protected_url)
print(response.text)
通过使用 Session,首次登录后的 cookies 被保存下来,后续访问受保护资源时无需再次登录,就像一个真实用户在持续操作,大大简化了测试流程,提升了测试的真实性与连贯性。
(二)SSL证书验证
在处理 HTTPS 请求时,SSL 证书验证是保障通信安全的重要环节。但在测试环境中,有时可能会遇到自签名证书或者证书不匹配的情况,导致请求失败。Requests 提供了相应的解决方案,可以选择关闭证书验证(虽然不建议在生产环境使用,但在测试环境为了快速验证接口功能,偶尔一用也无妨):
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
url = "https://www.cnblogs.com/mrjade"
response = requests.get(url, verify=False)
print(response.text)
或者指定本地信任的证书路径进行验证,确保通信安全与测试需求的平衡:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
url = "https://www.cnblogs.com/mrjade"
cert_path = "path/to/your/certificate.pem"
response = requests.get(url, verify=cert_path)
print(response.text)
灵活处理 SSL 证书验证问题,能够在不同的测试场景下畅通无阻地与服务器进行安全通信,保障测试工作顺利推进。
(三)代理设置
在一些特殊情况下,比如测试需要绕过防火墙、模拟不同地区的访问,或者对网络请求进行监控与分析时,设置代理服务器就显得尤为重要。Requests 允许轻松设置代理:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
proxy = {
"http": "http://your_proxy_ip:your_proxy_port",
"https": "https://your_proxy_ip:your_proxy_port"
}
url = "https://target.example.com/api/resource"
response = requests.get(url, proxies=proxy)
print(response.text)
通过指定代理服务器的 IP 地址和端口号,请求会先经过代理服务器再转发到目标服务器,为测试人员打开了一扇通往多样化网络环境模拟的大门,拓展了测试的边界与深度。
七、接口自动化测试实战
下面通过一个简单的实际案例来展示 Requests 在接口自动化测试中的完整应用步骤。假设我们要测试一个电商平台的商品查询、添加购物车、下单等一系列接口。
首先,进行查询商品接口测试:
'''
@Author : TesterRoad
@Time : 2024/12
@Desc : 公众号:测试工程师成长之路
@Software: PyCharm
'''
import requests
# 查询商品接口 URL
search_url = "https://www.cnblogs.com/mrjade/api/search"
# 查询参数,这里假设查询关键词为 "phone"
query_params = {
"keyword": "TesterRoad"
}
response = requests.get(search_url, params=query_params)
if response.status_code == 200:
products = response.json()
print(f"查询到 {len(products)} 款手机产品")
else:
print(f"查询商品失败,错误代码: {response.status_code}")
接着,模拟用户将心仪商品添加到购物车:
# 添加购物车接口 URL
add_to_cart_url = "https://www.cnblogs.com/mrjade/api/add_to_cart"
# 假设商品 ID 为 123,数量为 1
add_data = {
"product_id": 123,
"quantity": 1
}
response = requests.post(add_to_cart_url, data=add_data)
if response.status_code == 200:
print("商品已成功添加到购物车")
else:
print(f"添加购物车失败,错误代码: {response.status_code}")
最后,尝试下单:
# 下单接口 URL
place_order_url = "https://www.cnblogs.com/mrjade/api/place_order"
# 这里可能需要带上用户身份信息等,假设通过请求头携带令牌
headers = {
"Authorization": "Bearer your_token_here"
}
response = requests.post(place_order_url, headers=headers)
if response.status_code == 200:
print("订单已成功提交")
else:
print(f"下单失败,错误代码: {response.status_code}")
通过以上一系列连贯的接口自动化测试,利用 Requests 的强大功能,快速、准确地模拟了用户在电商平台的购物流程,及时发现接口可能存在的问题,如查询不到商品、添加购物车失败、下单受阻等,大大提高了测试效率,为电商平台的稳定运行保驾护航。
更多推荐

所有评论(0)