avatar

mdo

Hello

  • 首页
  • 知识库
  • 归档
  • 标签
  • 关于
主页 k6 PHP API 并发测试
文章

k6 PHP API 并发测试

发表于 2026-08-19 更新于 2026-08- 19
作者 mdo
10~13 分钟 阅读

对,k6 很适合你的 TP6 / PHP API 并发测试。它的优势是可以用 JavaScript 描述压测场景,比 ab 更适合模拟真实业务。

最简单的 GET 压测

安装 k6 后:

k6 run test.js

test.js:

import http from 'k6/http';

export const options = {

vus: 100,

duration: '30s',

};

export default function () {

http.get('http://127.0.0.1/api/test');

}

这表示:

  • 100 个虚拟用户

  • 持续 30 秒

  • 不断请求 /api/test


更推荐:逐步增加并发

测试 TP6 接口时,我更建议这样:

import http from 'k6/http';

import { check } from 'k6';

export const options = {

stages: [

{ duration: '10s', target: 50 },

{ duration: '20s', target: 100 },

{ duration: '20s', target: 500 },

{ duration: '20s', target: 1000 },

{ duration: '10s', target: 0 },

],

thresholds: {

http_req_failed: ['rate<0.01'],

http_req_duration: ['p(95)<500'],

},

};

export default function () {

const res = http.get('http://127.0.0.1/api/test');

check(res, {

'HTTP 200': (r) => r.status === 200,

});

}

然后:

k6 run test.js

最终重点看:

http_req_duration

http_req_failed

http_reqs

vus

尤其是:

p(95)

p(99)

例如:

http_req_duration:

avg=120ms

p(95)=280ms

p(99)=520ms

说明 95% 请求在 280ms 以内,但最慢的 1% 已经明显变慢。


POST JSON 接口

你的 TP6 API 如果是 POST,可以直接这样:

import http from 'k6/http';

export const options = {

vus: 100,

duration: '30s',

};

export default function () {

const url = 'http://127.0.0.1/api/user/login';

const payload = JSON.stringify({

username: 'test',

password: '123456',

});

const params = {

headers: {

'Content-Type': 'application/json',

},

};

http.post(url, payload, params);

}


带 Cookie / Token

例如登录后测试业务接口:

const params = {

headers: {

'Authorization': 'Bearer xxxxxxxxx',

'Content-Type': 'application/json',

},

};

http.get(

'http://127.0.0.1/api/user/info',

params

);

如果是 TP6 Session,也可以模拟 Cookie:

const params = {

headers: {

'Cookie': 'PHPSESSID=xxxxxxxxxxxxxxxx',

},

};

http.get(

'http://127.0.0.1/api/user/info',

params

);


如果你是测试 TP6 + Swoole

我建议不要一上来就 1000 并发。

可以按照:

10

↓

50

↓

100

↓

200

↓

500

↓

1000

↓

2000

逐级测试。

同时观察服务器:

top
htop

MySQL:

SHOW PROCESSLIST;

Redis:

redis-cli info

以及 Swoole 的:

worker CPU

worker memory

request latency

连接数

协程数量

这样才能判断到底是 PHP、Swoole、MySQL、Redis 还是连接数先达到瓶颈。

如果你愿意,我可以直接给你做一个 “TP6 API 专用 k6 压测脚本”,包含 登录 → 获取 Session/Token → 并发访问接口 → 统计 QPS、P95、P99、错误率。

知识库
许可协议:  CC BY 4.0
分享

相关文章

10月 7, 2026

比尔盖茨的智慧:想多赚钱,就每天循环做这3件事

我们总有一种非常固执的错觉,认为那些站在财富金字塔顶端的人,必然拥有某种超越常人的特异功能。我们在脑海中给比尔盖茨这样的大佬描绘了一幅极其悲壮的奋斗画像。大家总觉得,他之所以能富可敌国,肯定是因为他每天只睡三个小时,同时对着八个电脑屏幕疯狂敲击键盘,每一秒钟都在做出价值几亿美金的生死抉择。 为了模仿

9月 28, 2026

程序员越想创业,越不要急着动手

一个能源方面的前辈找到我,希望通过我把一些人工的工作 AI 自动化。 能源方面我不懂,找 Gemini 聊完发现这个是可以复制的,非常兴奋。我跟老婆说,这个项目做好以后可以做成平台,推广到其他公司,你就等着做总裁夫人吧! 她听完以后跟我说,这个项目还是太定制化,和我之前做的一个项目很像。 那个项目一

9月 25, 2026

忍了一年多,我终于对i18n下手了过去一年,我主要参与国际机票业务的开发工作,因此每天都要和多语言(i18n)打交道

前言 大家好,我是奈德丽。 过去一年,我主要参与国际机票业务的开发工作,因此每天都要和多语言(i18n)打交道。熟悉我的朋友都知道,我这个人比较“惜力”(并不是,实际上只是忍不下去了),对于重复笨拙的工作非常抵触,于是,我开始思考如何优化团队的多语言管理模式。 痛点背景 先说说我们在机票项目中遇到的

下一篇

内置一个简易的 HTTP API 接口

上一篇

Manticore Search

最近更新

  • 比尔盖茨的智慧:想多赚钱,就每天循环做这3件事
  • iOS 侧载(Sideloading)工具
  • 程序员越想创业,越不要急着动手
  • 注册 Chat Participant
  • 中秋给在外游子的一封信

热门标签

API CodeGeex Coding Cursor DeepSeek Docker Gitkraken Harness Laravel Management

目录

©2026 mdo. 保留部分权利。