文章目录
- 1、项目背景
- 2、项目功能
- 3、功能测试
- 测试工具
- 服务器启动设置
- 3.1访问页面测试
- 3.2 POST请求测试
- 3.3GET请求测试
- PUT请求测试
- 3.5查询字符串打印
- 四、边界测试
- 4.1 长连接测试
- 4.2 超时连接测试
- 4.3 数据不完整测试
- 4.4 业务处理超时测试
- 4.5 多请求并发处理测试
- 4.6 大文件传输测试
- 5、性能压力测试
- 6、总结
1、项目背景
该项目是根据陈硕大神的muduo网络库原理进行模仿开发的基于主从React模式的OneThreadOneLoop 的Linux网络服务器框架。用来帮助使用者进行一个快速的高性能并发服务器搭建。
2、项目功能
该项目目前支持常用的高频的HTTP交互请求,如:GET、POST、PUT、字符串访问、上传文件功能。所有业务通过高并发进行处理且具有异常场景的监测与容错处理,还可以对非活跃的链接进行及时的断联来节省资源。
3、功能测试
| 测试项 | 测试目的 | 测试结果 |
|---|---|---|
| 访问页面测试 | 验证浏览器访问页面正确性 | 成功 |
| GET请求测试 | 验证服务器正确处理请求并返回响应 | 成功 |
| POST请求测试 | 验证服务器正确处理请求并提交数据 | 成功 |
| PUT请求测试 | 验证服务器正确处理资源文件的修改 | 成功 |
| 查询字符串打印测试 | 验证服务器正确解析并打印URL查询参数 | 成功 |
测试工具
Microsoft Edge 143.0.3650.80 (正式版本) (64 位)
PostMan 11.76.0
服务器启动设置
3.1访问页面测试
3.2 POST请求测试
3.3GET请求测试
PUT请求测试
采用Postman Put请求后,对应文件出现请求更改的文字。
3.5查询字符串打印
四、边界测试
| 测试场景 | 测试描述 | 测试结果 |
|---|---|---|
| 长连接超时测试 | 客户端持续发送数据至超时时间,观察服务器是否正常关闭连接 | 成功(超时后连接正常释放) |
| 超时连接测试 | 创建一个客户端,给服务器发送一次数据后,不动了,查看服务器是否会正常的超时关闭连接 | 成功(正常超时关闭连接) |
| 数据不完整测试 | 发送不足1024字节的数据,观察服务器处理逻辑 | 成功(未处理请求,超时关闭连接) |
| 业务处理超时测试 | 模拟单次业务处理超时,观察其他连接是否被拖累 | 成功(释放操作延迟至任务池处理) |
| 多请求并发处理测试 | 一次性发送多条数据,验证每条请求均被独立处理 | 成功(所有请求正常响应) |
| 大文件传输测试 | 上传一个1G的文件到服务器,验证服务器保存的文件与客户端上传的文件内容是否一致 | 成功(客户端与服务器的文件内容相同) |
4.1 长连接测试
创建一个客户端,设定好请求方法与路径后, 设置连接模式为keep-alive,查看服务器端是否会短时间内释放
服务器状态:
由时间可以看出,我设置了一直不断联已经运行了30分钟,由此看出长连接设置启动是有效的。
4.2 超时连接测试
服务器状态:
服务器已设置了10秒钟没有请求后释放。在client端发送第一次请求后,没有请求发送10秒后,服务器自动释放,客户端收到接收失败。
4.3 数据不完整测试
客户端测试设置:
在header中高设置自身发送数据长度(100),但本身数据长度不足
- 首先只发送一次数据
服务器状态:在建立连接后,等待了9秒没有收到完整长度的数据进行了释放操作。
客户端收到信息: - 连续发送三次给服务器
服务器状态:
客户端收到信息:
由两次测试可以看出结论:
- 如果数据只发送一次,服务器将得不到完整请求,就不会进行业务处理,客户端也就得不到响应,最终超时关闭连接
- 连着给服务器发送了多次 小的请求, 服务器会将后边的请求当作前边请求的正文进行处理,而后便处理的时候有可能就会因为处理错误而关闭连接
4.4 业务处理超时测试
当服务器达到了一个性能瓶颈,在一次业务处理中花费了太长的时间(超过了服务器设置的非活跃超时时间)。在一次业务处理中耗费太长时间,导致其他的连接也被连累超时,其他的连接有可能会被拖累超时释放。
假设现在 12345描述符就绪了, 在处理1的时候花费了30s处理完,超时了,导致2345描述符因为长时间没有刷新活跃度。
1.如果接下来的2345描述符都是通信连接描述符,如果都就绪了,则并不影响,因为接下来就会进行处理并刷新活跃度。
2.如果接下来的2号描述符是定时器事件描述符,定时器触发超时,执行定时任务,就会将345描述符给释放掉,这时候一旦345描述符对应的连接被释放,接下来在处理345事件的时候就会导致程序崩溃(内存访问错误)因此这时候,在本次事件处理中,并不能直接对连接进行释放,而应该将释放操作压入到任务池中,等到事件处理完了执行任务池中的任务的时候,再去释放。
服务器状态:
客户端状态:
4.5 多请求并发处理测试
一次性给服务器发送多条数据请求,然后查看服务器能否正确处理
服务器状态: 所有请求全部收到并且处理正确
4.6 大文件传输测试
发送一个1g大小的文本文件给服务器
传输完成后对比两个文件md5值
服务器端:
客户端:
5、性能压力测试
测试环境:
服务器:2核2G云服务器
客户端:服务器本地
工具:Webbench
测试方法:
60秒短时高并发测试:经测试4000并发量为最大并发量
6、总结
该高并发服务器核心功能覆盖HTTP标准方法、大文件传输、高并发处理及异常场景容错,具备稳定的性能表现(QPS达68,952)和可靠性,适用于高负载Web服务等场景。