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

如何在受密码保护的Vercel URL上运行Artillery测试?

解决Vercel密码保护URL的Artillery压测令牌传递问题

问题根源

你的配置中存在两个关键问题导致令牌未正确传递:

  1. YAML配置里的令牌值使用了不必要的转义符\",导致头信息格式错误
  2. Artillery Playwright引擎的extraHTTPHeaders配置可能未被Playwright的page实例正确继承

修正步骤

1. 修复YAML配置中的头信息格式

修改load-test.yml里的extraHTTPHeaders部分,去掉多余的转义符:

config:
  target: '<my url>'
  phases:
    - duration: 1 # Total duration of the test in seconds
      arrivalRate: 1 # Initial arrival rate of users per second
      rampTo: 1 # Ramp up to 1137 users over the duration
      name: 'Ramp-up Users'
  engines:
    playwright:
      config:
        extraHTTPHeaders:
          'x-vercel-protection-bypass': '<my token>' # 移除不必要的转义符\"
        baseURL: '<my url>'
  processor: './automation-test/loadtest/artillery/search.ts'
scenarios:
  - engine: playwright
    testFunction: 'artilleryScript'

2. 在Playwright代码中强制设置请求头(更可靠)

为确保每个请求都携带令牌,直接在测试脚本中为Playwright的context设置全局请求头,或者在page.goto时显式传递:

方法A:设置全局请求头

修改search.ts,在执行测试前为page的context添加全局头:

import { Page, expect } from '@playwright/test';
async function testSearch(page: Page) {
   await page.goto('/'); // 用/替代空字符串,语义更清晰
   await page.getByTestId('search-input-header').click();
   await page.getByTestId('search-input-header').fill('test');
   await page.getByTestId('search-input-header').press('Enter');
   await expect(page.getByTestId('clear-button')).toBeVisible();
}

export async function artilleryScript(page: Page) {
   // 为当前page的context设置全局请求头,所有请求都会携带该令牌
   await page.context().setExtraHTTPHeaders({
     'x-vercel-protection-bypass': '<my token>'
   });
   await testSearch(page);
}

方法B:在goto时显式传递头

如果只需要在初始页面加载时传递令牌,也可以直接在page.goto中添加headers参数:

async function testSearch(page: Page) {
   await page.goto('/', {
     headers: {
       'x-vercel-protection-bypass': '<my token>'
     }
   });
   // 后续操作保持不变
}

3. 验证令牌有效性

先通过curl命令验证令牌是否能正确绕过Vercel保护:

curl -H "x-vercel-protection-bypass: <my token>" <my url>

如果返回正常页面内容,说明令牌有效;如果返回403或密码验证页面,说明令牌错误或权限不足。

验证修改

重新执行Artillery测试命令:

artillery run load-test.yml

如果配置正确,页面会正常加载,测试函数能找到目标元素,不会再出现超时错误。

内容的提问来源于stack exchange,提问作者Saranya Shanmugam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:22:27