You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取弹出式登录窗口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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 03:37:12