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

在GitHub Action中使用K6时测试脚本应使用哪个URL

需求可行性结论

该需求完全可实现。K6原生定位就是API性能测试工具,各类入门教程中用普通网页URL做示例仅为降低上手门槛,不存在只能测试静态网页的限制,完全支持对自有REST、GraphQL、gRPC等各类协议的API做压力测试,结合GitHub Action可以很方便地嵌入生产部署前的卡点流程。

完整实现方案

1. 编写适配自有API的K6测试脚本

和测试普通网页的逻辑区别仅在于请求地址、请求方法、请求参数、响应断言的配置调整,核心压测逻辑完全一致。基础脚本示例如下:

import http from 'k6/http';
import { check, sleep } from 'k6';

// 压测配置,可根据需求调整并发数、压测时长、性能阈值
export const options = {
  vus: 50, // 模拟50个并发用户
  duration: '30s', // 持续压测30秒
  thresholds: {
    http_req_failed: ['rate<0.01'], // 接口错误率必须低于1%
    http_req_duration: ['p(95)<500'], // 95%的请求响应时间必须低于500ms
  },
};

export default function () {
  // 替换为你的自有API路径,支持GET/POST/PUT/DELETE等所有HTTP方法
  const res = http.post(`${__ENV.TARGET_API_URL}/user/login`, JSON.stringify({
    username: 'test_user',
    password: 'test_pass'
  }), {
    headers: { 'Content-Type': 'application/json' }
  });

  // 自定义接口响应校验规则
  check(res, {
    'login success': (r) => r.status === 200,
    'response has token': (r) => r.json('data.token') !== '',
  });
  sleep(1);
}

如果你的API需要鉴权,不要把密钥硬编码在脚本中,后续通过环境变量注入即可。

2. 配置GitHub Action工作流

工作流建议配置为生产部署任务的前置依赖,只有压测通过才会触发后续生产部署步骤。注意不要直接把压测请求打向正在运行的生产环境,推荐先把待发布版本部署到和生产配置1:1对齐的预发布环境,再对预发布环境执行压测。基础工作流配置示例:

name: Pre-deploy K6 Load Test
on:
  push:
    tags:
      - 'v*.*.*' # 打生产版本标签时触发,可根据你的部署触发规则调整
jobs:
  k6-load-test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Run K6 test
        uses: grafana/k6-action@v0.3.1
        with:
          filename: ./load-test/script.js # 你的K6脚本存放路径
        env:
          TARGET_API_URL: ${{ secrets.STAGING_API_URL }} // 预发布环境地址存在GitHub密钥中
          API_TOKEN: ${{ secrets.TEST_API_TOKEN }} // 接口鉴权密钥同样从密钥读取
      // 压测通过后再添加后续生产部署步骤即可

3. 卡点规则配置

脚本中thresholds字段定义的性能阈值会直接决定K6进程的退出码,只要压测结果不满足你预设的错误率、响应时间要求,K6就会返回非0退出码,GitHub Action会直接标记任务失败,阻断后续生产部署流程,实现自动卡点。

测试脚本的目标URL选择规则
  • 优先选择和生产环境规格、配置完全一致的预发布(Staging)环境API地址:这是部署前压测的最优选择,既不会影响线上真实用户,压测结果也具备足够的参考价值,能提前发现版本性能问题。
  • 禁止在无防护的情况下直接使用生产环境URL:部署前流程直连生产压测很容易打垮线上服务、影响正常用户访问,如果确实需要做线上压测,必须单独配置流量隔离、服务熔断、数据隔离逻辑,放在专门的压测时段执行。
  • 轻量校验可选择PR预览环境地址:如果你的CI流程会为每个Pull Request生成独立的临时预览部署环境,也可以将压测目标指向该地址,在代码合入前就做基础的接口性能校验。

内容的提问来源于stack exchange,提问作者Simon Balling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:54:33