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

Locust io发起GET请求时如何执行页面中的JavaScript脚本

Locust 发起请求时执行页面JS的可行方案

Locust 本身是纯HTTP协议层面的压测工具,默认仅处理网络请求的收发,不会像真实浏览器一样解析DOM结构、运行页面内嵌的JavaScript代码,原生不支持请求同时执行页面JS的需求,可通过以下两种方案实现对应要求:

方案1:集成无头浏览器实现全链路模拟

该方案完全模拟真实浏览器的页面加载逻辑,访问页面时会自动执行所有内嵌、外部引入的JS代码,适配所有依赖浏览器环境的监控脚本场景,适合对模拟真实性要求高的场景。
示例代码(Locust + Playwright 实现):

from locust import User, task, between
from playwright.sync_api import sync_playwright

class BrowserSimulateUser(User):
    wait_time = between(1, 3)
    
    def on_start(self):
        # 初始化无头浏览器
        self.playwright = sync_playwright().start()
        self.browser = self.playwright.chromium.launch(headless=True)
        self.page = self.browser.new_page()
    
    @task
    def visit_target_page(self):
        # 访问页面时自动加载并执行所有页面JS
        self.page.goto(f"{self.host}/target-page-path")
        # 等待页面资源加载、JS执行完成
        self.page.wait_for_load_state("networkidle")
    
    def on_stop(self):
        # 释放浏览器资源
        self.page.close()
        self.browser.close()
        self.playwright.stop()

方案2:单独提取JS脚本在Python侧执行

如果监控脚本逻辑不依赖浏览器DOM、window等专属API,可提取JS代码后直接用Python的JS执行引擎运行,资源消耗远低于无头浏览器方案,适合高并发压测场景。
示例代码(Locust + PyExecJS 实现):

from locust import HttpUser, task, between
import execjs
from lxml import etree

class JsRunUser(HttpUser):
    wait_time = between(1, 3)
    
    @task
    def request_and_execute_js(self):
        # 发起GET请求获取页面内容
        resp = self.client.get("/target-page-path")
        # 从页面源码中提取目标监控JS代码,可根据实际页面标签特征调整匹配规则
        html_dom = etree.HTML(resp.text)
        monitor_js = html_dom.xpath('//script[contains(text(), "监控脚本特征标识")]/text()')[0]
        # 编译并执行JS
        js_ctx = execjs.compile(monitor_js)
        # 若JS需要入参,可传入请求地址、请求头等对应参数
        js_ctx.call("监控脚本入口函数名称", resp.url)

注意事项

  • 若监控脚本依赖浏览器专属API,仅能使用方案1实现,方案2无浏览器环境会执行报错
  • 无头浏览器的资源消耗是纯HTTP请求的10~50倍,高并发压测前需要提前评估施压机器的CPU、内存容量,避免资源不足导致压测数据失真
  • 若不需要监控脚本产生脏上报数据,可在无头浏览器中配置规则拦截对应上报请求

内容的提问来源于stack exchange,提问作者Antonio Gálvez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:45:00