测试的概念
为什么要有测试?
避免事后诸葛亮,尽量达到一个先知先觉的地步
种类
- 黑盒——常规的应用层面测试,门槛低
- 白盒——考虑内部代码和执行逻辑的测试,门槛高
方法
- 单元测试——独立测试每个代码单元,不涉及外部依赖
- 集成测试——关注模块之间的接口和依赖关系,测试不同模块在真实环境中的交互
- 功能测试——关注功能模块是否正常运作
- 端到端测试——前后端或后端+后端
- 回归测试——版本升级后,重新测试已通过的用例
- 安全测试——SQL 注入、XSS
- 验证
- 授权
- 数据
- 性能测试
- 负载测试:正常负载条件下
- 压力测试:超出负载的情况下
- 并发测试:多用户并发请求下
额外注意
- 边界测试(最小值、最大值、空输入、负数)
- 兼容性测试(操作系统、浏览器、数据库、网络环境、web & 移动端)
- 错误处理与异常管理
- 数据一致性 & 团队数据统一
- 国际化和本地化测试
wrk
语法
wrk [options] <url>
-t 线程数
-c 并发链接数
-d 持续时间
--latency 延迟统计信息
-s 指定lua脚本
示例
wrk -t12 -c400 -d30s http://localhost:8000/chat
12线程400并发连接持续30秒
输出解析
Running 持续时间
Threads 线程数
Connections 并发链接数
Request/sec 每秒完成的请求 / 吞吐量
Transfer/sec 每秒传输的数据流
Latency 请求延迟统计
Avg 平均延迟
Stdev 标准差
Max 最大延迟
+/-Stdev 百分位数延迟
结合lua脚本进行测试
wrk -t12 -c400 -d30s -s <lua script> <api>
Running 1m test @ http://localhost:3000/api/llm/chat
12 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 0.00us 0.00us 0.00us -nan%
Req/Sec 0.16 0.69 3.00 94.74%
19 requests in 1.00m, 593.59KB read
Socket errors: connect 0, read 0, write 0, timeout 19
Requests/sec: 0.32
Transfer/sec: 9.88KB
Running 10m test @ http://localhost:3000/api/llm/chat
12 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 0.00us 0.00us 0.00us -nan%
Req/Sec 0.24 0.96 10.00 95.09%
1039 requests in 10.00m, 6.64MB read
Socket errors: connect 0, read 0, write 0, timeout 1039
Requests/sec: 1.73
Transfer/sec: 11.33KB