如何使用Selenium发送带身份验证的POST、GET API请求
Selenium结合接口请求的DAM资源上传校验实现方案
首先准备依赖库:
- Selenium:用于浏览器自动化操作,完成页面跳转、资源上传等UI层操作
- requests:用于发送HTTP接口请求,完成查询、资源拉取操作
- Pillow(可选):用于图片二进制内容校验
步骤1:Selenium启动浏览器完成资源上传操作
from selenium import webdriver from selenium.webdriver.common.by import By import time # 启动Chrome浏览器,可根据需求替换为Firefox、Edge等驱动 driver = webdriver.Chrome() # 跳转至目标DAM系统上传页面 driver.get("替换为实际上传页面地址") # 补充登录逻辑,按实际页面元素调整 # driver.find_element(By.ID, "username").send_keys("你的账号") # driver.find_element(By.ID, "password").send_keys("你的密码") # driver.find_element(By.ID, "submit_login").click() # time.sleep(2) # 定位文件上传控件,传入本地待上传文件的绝对路径 upload_input = driver.find_element(By.XPATH, '//input[@type="file"]') upload_input.send_keys("替换为本地测试文件的绝对路径,如/Users/test/1.jpg") # 等待上传完成,可根据页面上传成功提示、进度条状态调整等待逻辑 time.sleep(5) # 可补充UI层上传成功校验 assert "上传成功" in driver.page_source
步骤2:发送带身份验证的POST查询请求
直接复用Selenium登录后的Cookie,不需要单独申请接口身份凭证:
import requests import json # 从Selenium中提取当前登录态Cookie,组装到请求头 cookies = driver.get_cookies() cookie_header = "; ".join([f"{c['name']}={c['value']}" for c in cookies]) headers = { "Content-Type": "application/json", "Cookie": cookie_header # 如有其他身份校验头如Authorization,按实际接口要求补充 } # 替换为实际资源查询接口地址 post_url = "替换为实际POST查询接口地址" post_body = { "predicateParams": { "type":"dam:Asset", "p.offset": "0", "p.limit": "-1" }, "dateParams": { "group.1_daterange.lowerBound":"2021-11-19T00:10:15", "group.1_daterange.upperBound":"2021-11-19T23:59:15" } } post_resp = requests.post(post_url, headers=headers, data=json.dumps(post_body)) post_result = post_resp.json()
步骤3:从POST响应提取预览URL
# 先校验查询接口返回正常 assert post_result["status"]["success"] == True assert post_result["totalAssetsModifiedOrCreated"] >= 1 # 提取对应资源的预览链接,可根据上传文件名匹配对应命中资源 preview_url = post_result["hits"][0]["previewLink"]
步骤4:发送GET请求获取预览资源
# 按要求组装GET请求参数,如预览链接为静态资源地址无需传参可省略params字段 get_params = { "predicateParams": { "type":"dam:Asset", "p.offset": "0", "p.limit": "-1" }, "dateParams": { "group.1_daterange.lowerBound":"2021-11-17T00:10:15", "group.1_daterange.upperBound":"2021-11-18T23:50:15" } } # 拉取二进制资源添加stream=True参数 get_resp = requests.get(preview_url, headers=headers, params=get_params, stream=True) assert get_resp.status_code == 200
步骤5:校验资源正确性
可根据测试需求选择校验方式:
from PIL import Image import io # 方式1:校验图片内容和本地原图一致 local_img = Image.open("替换为本地测试文件绝对路径") resp_img = Image.open(io.BytesIO(get_resp.content)) # 校验尺寸、像素完全匹配 assert local_img.size == resp_img.size assert list(local_img.getdata()) == list(resp_img.getdata()) # 方式2:如返回为元数据JSON,直接校验字段 # get_result = get_resp.json() # assert get_result["path"] == "预期资源路径" # 测试完成关闭浏览器 driver.quit()
内容的提问来源于stack exchange,提问作者Nagaraju
相关产品推荐
相关产品推荐

