如何获取弹出式登录窗口URL?Locust测试Oxwall登录遇难题
解决Oxwall弹出式登录窗口的Locust负载测试方案
遇到弹出式无独立URL的登录窗口,核心思路是抓包还原真实登录请求,再在Locust脚本中模拟完整的登录流程,具体步骤如下:
1. 抓包分析真实登录请求
打开浏览器开发者工具(F12)切换到Network标签,触发登录弹窗并提交登录信息,找到实际发送的登录请求:
- 记录请求的URL(通常是Oxwall的AJAX接口,比如
/ajax.php?r=auth/login) - 查看请求的参数:包括用户名(
identity或username)、密码(password)、CSRF令牌(可能叫csrf_token、ow_csrf_token等)、记住密码选项(remember) - 复制请求的请求头:重点关注
X-Requested-With(AJAX请求通常为XMLHttpRequest)、Referer等字段
2. 在Locust中模拟前置步骤获取CSRF令牌
Oxwall的CSRF令牌通常嵌入在首页的HTML中,需要先访问首页提取令牌:
from locust import HttpUser, task, between from bs4 import BeautifulSoup class OxwallUser(HttpUser): wait_time = between(1, 3) def on_start(self): # 访问首页,提取CSRF令牌 home_response = self.client.get("/") soup = BeautifulSoup(home_response.text, "html.parser") # 根据实际页面结构调整提取方式,以下两种是常见情况: # 情况1:令牌在meta标签中 csrf_token = soup.find("meta", attrs={"name": "ow_csrf_token"})["content"] # 情况2:令牌在登录弹窗的隐藏input字段中 # csrf_token = soup.find("input", attrs={"name": "csrf_token"})["value"]
3. 构造并发送登录请求
用抓包得到的URL、参数和请求头,组装登录请求:
# 构造登录参数(根据抓包结果调整字段名) login_payload = { "identity": "your_test_username", "password": "your_test_password", "ow_csrf_token": csrf_token, "remember": "1" } # 发送登录请求 login_response = self.client.post( "/ajax.php?r=auth/login", # 替换为抓包得到的真实URL data=login_payload, headers={ "X-Requested-With": "XMLHttpRequest", "Referer": f"{self.host}/" } ) # 验证登录是否成功 result = login_response.json() if result.get("status") != "success": raise Exception(f"登录失败:{result.get('message')}")
4. 编写登录后的业务任务
登录成功后,就可以在@task装饰的方法中模拟用户的后续操作,比如浏览主页、访问个人资料:
@task(3) def browse_homepage(self): self.client.get("/") @task(1) def view_profile(self): self.client.get("/profile/your_test_username")
关键注意事项
- 如果抓包时看到请求是JSON格式,把
data参数换成json参数传递payload - Locust的
HttpUser会自动维护会话Cookie,无需手动处理登录后的Cookie携带 - 若测试环境有多用户,可通过参数化方式(比如读取CSV文件)批量生成测试用户
内容的提问来源于stack exchange,提问作者university_misaghi
相关产品推荐
相关产品推荐

