Skip to content

测试的概念

为什么要有测试?

避免事后诸葛亮,尽量达到一个先知先觉的地步

种类

  • 黑盒——常规的应用层面测试,门槛低
  • 白盒——考虑内部代码和执行逻辑的测试,门槛高

方法

  • 单元测试——独立测试每个代码单元,不涉及外部依赖
  • 集成测试——关注模块之间的接口和依赖关系,测试不同模块在真实环境中的交互
  • 功能测试——关注功能模块是否正常运作
  • 端到端测试——前后端或后端+后端
  • 回归测试——版本升级后,重新测试已通过的用例
  • 安全测试——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