大家好,又见面了,我是你们的朋友全栈君。
文章目录- 1. 背景介绍
- 2. 测试需求
- 3. 测试用例
- 4. 测试组网
- 5. Web服务器性能测试话务模型要求
- 6. 性能测试对Web服务器的要求
- 6.1 Web服务器部署位置
- 6.2 Web服务器配置要求
- 6.3 Web服务器开放权限
- 7. 软件获取和安装
- 7.1 Jemeter 下载链接
- 7.2 Jemeter 下载 zip 或者 tgz 任意格式都可以
- 7.3 Jmeter 安装
- 7.4 Jmeter 插件管理器下载链接
- 7.5 Jmeter 插件管理器安装
- 7.5 Jmeter 步长插件学习资料
- 8.JMeter GUI 图形界面测试
- 8.1 选择 GUI 图形界面语言
- 8.2 JMeter 按钮介绍
- 8.3 建立测试任务
- 8.3.1 建立线程组
- 8.3.2 建立 HTTP 请求
- 8.3.3 建立 HTTP 信息头管理器
- 8.3.4 建立聚合报告
- 8.3.5 建立察看结果树
- 8.4 测试任务参数填写
- 8.4.1 线程组参数填写
- 8.4.2 HTTP 请求参数填写
- 8.4.3 HTTP 信息头管理器参数填写
- 8.4.4 聚合报告参数说明
- 8.4.5 查看结果树参数说明
- 9.JMeter 命令行测试
- 10. 自动生成测试报告
- 11. FAQ
- 11.1 Jmeter 产生 address already in use 的异常处理方法解决方案:
- 11.2 Jmeter 在每个线程中只发送一条数据,然后就拆链的处理方法解决方案:
- 11.3 Jmeter 同时发送多条建链请求【SYN】,APP 侧会丢弃部分【SYN】,导致 JMeter 重传【SYN】解决方案:
- 6.1 Web服务器部署位置
- 6.2 Web服务器配置要求
- 6.3 Web服务器开放权限
- 7.1 Jemeter 下载链接
- 7.2 Jemeter 下载 zip 或者 tgz 任意格式都可以
- 7.3 Jmeter 安装
- 7.4 Jmeter 插件管理器下载链接
- 7.5 Jmeter 插件管理器安装
- 7.5 Jmeter 步长插件学习资料
- 8.1 选择 GUI 图形界面语言
- 8.2 JMeter 按钮介绍
- 8.3 建立测试任务
- 8.3.1 建立线程组
- 8.3.2 建立 HTTP 请求
- 8.3.3 建立 HTTP 信息头管理器
- 8.3.4 建立聚合报告
- 8.3.5 建立察看结果树
- 8.4 测试任务参数填写
- 8.4.1 线程组参数填写
- 8.4.2 HTTP 请求参数填写
- 8.4.3 HTTP 信息头管理器参数填写
- 8.4.4 聚合报告参数说明
- 8.4.5 查看结果树参数说明
- 11.1 Jmeter 产生 address already in use 的异常处理方法解决方案:
- 11.2 Jmeter 在每个线程中只发送一条数据,然后就拆链的处理方法解决方案:
- 11.3 Jmeter 同时发送多条建链请求【SYN】,APP 侧会丢弃部分【SYN】,导致 JMeter 重传【SYN】解决方案:
1. 背景介绍
XXX 认证要求测试合作伙伴的 Web服务器性能,主要涉及 APP服务器最大的并发请求消息处理能力,根据《XXX 设计说明书》里的要求,Web服务器并发数量为 2500 packet/s。
2. 测试需求
Web服务器并发请求消息处理能力为 2500 packet/s
3. 测试用例
名称 | 预置条件 | 测试步骤 | 预期结果 |
---|---|---|---|
Web服务器处理北向推送数据的能力 | 1.在公有云上完成Web服务器的部署2.在公有云上的IoT平台上传profile/publicKey/插件/CA证书3.完成Web服务器和IoT平台的对接4.在Web服务器上按顺序开户30万5.提供开户的IMEI和终端的payload信息给IOT平台测试人员,IOT平台测试人员将信息写入性能测试工具Jmeter中 | 启动Jmeter性能测试工具,以2500packet/s对APP服务器发https包,持续发送120秒 | 120秒后,在Web服务器能够查询到300,000条数据 |
4. 测试组网
Web服务器 和 Jmeter 安装在同一台 服务器或者服务器里的不同虚拟机里,2 个虚拟机通过内部的交换机互连。
5. Web服务器性能测试话务模型要求
话务模型需要对应场景的SA 提供,以X表为例,当前 SA 提供的话务模型是2500 packet/s,持续 2 分钟。
6. 性能测试对Web服务器的要求
6.1 Web服务器部署位置
Web服务器需要部署在实验室内网,以减少外网(比如 Internet)传输丢包对性能测试的影响。
6.2 Web服务器配置要求
Web服务器的配置需要测试厂家提供,一般包含前置机/业务机/数据库等。 前置机:16 核/32G/200G SATA 业务机:16 核/32G/200G SATA 数据库:16 核/32G/200G SATA 操作系统:CentOS 7.3/Window server 2008 等
6.3 Web服务器开放权限
Web 需要提供跟 IoT 平台对接时的 API 回调接口用于 Web 性能测试
7. 软件获取和安装
7.1 Jemeter 下载链接
http://jmeter.apache.org/download_jmeter.cgi
7.2 Jemeter 下载 zip 或者 tgz 任意格式都可以
7.3 Jmeter 安装
解压后,在下面的目录打开 Jmeter5.0 apache-jmeter-5.0bin
7.4 Jmeter 插件管理器下载链接
https://jmeter-plugins.org/install/Install/
7.5 Jmeter 插件管理器安装
将下载的插件管理器 jmeter-plugins-manager-1.3.jar 拷贝到 Jmeter 的安装目录下X:apache-jmeter-5.0libext
7.5 Jmeter 步长插件学习资料
https://blog.csdn.net/u011541946/article/details/71194990
8.JMeter GUI 图形界面测试
8.1 选择 GUI 图形界面语言
点击【Options】,选择【Choose Language】-【Chinese(Simplified)】
8.2 JMeter 按钮介绍
8.3 建立测试任务
建立线程组—>建立 HTTP 请求—>建立 HTTP 信息头管理器—>建立聚合报告—>建立查看结果树
8.3.1 建立线程组
右键点击【测试计划】,选择【添加】-【线程(用户)】-【线程组】
8.3.2 建立 HTTP 请求
右键点击【线程组】,选择【添加】-【取样器】-【HTTP 请求】
8.3.3 建立 HTTP 信息头管理器
右键点击【HTTP 请求】,选择【添加】-【配置元件】-【HTTP 信息头管理】
8.3.4 建立聚合报告
右键点击【HTTP 请求】,选择【添加】-【监听器】-【聚合报告】
8.3.5 建立察看结果树
右键点击【HTTP 请求】,选择【添加】-【监听器】-【察看结果树】
8.4 测试任务参数填写
8.4.1 线程组参数填写
8.4.2 HTTP 请求参数填写
8.4.3 HTTP 信息头管理器参数填写
在 IOT 平台上将 APP 的消息推送改为 http 方式,然后点击确认。 在 APP服务器上用 fiddler或者wireshark 抓包,可以看到 protocol 类型为 HTTP 的 POST 消息,将消息中的Request Headers消息填写到 JMeter 的信息头管理器中,消息名称的上下顺序不限。
8.4.4 聚合报告参数说明
8.4.5 查看结果树参数说明
9.JMeter 命令行测试
E:apache-jmeter-5.4.1binjmeter.bat -n -t E:HTTP请求.jmx -l result.jtl -e -o e:Web_HttpsReport
10. 自动生成测试报告
上面的命令将测试报告输出到 E盘根目录下,打开测试报告文件夹下的 index.html 文 件,可以看到测试报告。测试报告主要关注 3 个指标,Average Response Times ,Throughput , Error%,要保证 Error 错误率为 0%,然后观察 Throughput 的值和Average Response Times是否满足要求。
11. FAQ
11.1 Jmeter 产生 address already in use 的异常处理方法解决方案:
- 在运行JMeter的机器上添加注册表条目MaxUserPort和TcpTimedWaitDelay,分别设 置值为65534、30,以增大可分配的tcp连接端口数、减小处于TIME_WAIT状态的 连接的生存时间。
- cmd中,用regedit打开注册表
- 在 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters下 1)右击parameters,添加一个新的DWORD,名字为MaxUserPort 2)双击MaxUserPort,输入数值数据为65534,基数选择十进制
- 右击parameters,添加一个新的DWORD,名字为TcpTimedWaitDelay 4) 双击TcpTimedWaitDelay,输入数值数据为30,基数选择十进制
- 然后重启电脑!
11.2 Jmeter 在每个线程中只发送一条数据,然后就拆链的处理方法解决方案:
- Jmeter在每个线程中只发送一条数据,然后就拆链了,导致throughput达不到1500TPS以上,在【HTTP请求】的【高级】里将【实现】改成Java,设置连接和响应超时为10000ms后,JMeter可以在每个线程中发送多条数据。
11.3 Jmeter 同时发送多条建链请求【SYN】,APP 侧会丢弃部分【SYN】,导致 JMeter 重传【SYN】解决方案:
- tcp_max_syn_backlog是指定所能接受SYN同步包的最大客户端数量,即半连接上限;
- somaxconn是指服务端所能accept即处理数据的最大客户端数量,即完成连接上限。
- 这两个参数的默认值都是1024,需改为16384。
- 把参数添加到/etc/sysctl.conf中,然后执行sysctl -p使参数永久生效。
JMeter侧抓包: JMeter侧抓包可以看到第1次发送【SYN】后,由于Web服务器没有响应导致3秒后重传,第2次发 送【SYN】后,由于APP还是没有响应导致6秒后再次重传,重传后APP回复了【SYN,ACK】
Web服务器侧抓包: APP 侧抓包只看到 JMeter 发的最后一条【SYN】消息,所以说明 CentOS 在底层就把 【SYN】消息丢弃了,修改 tcp_max_syn_backlog 和 somaxconn 参数后,问题解决。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128751.html原文链接:https://javaforall.cn