# testnewbie-iot-performance-test **Repository Path**: testnewbie-projects/testnewbie-iot-performance-test ## Basic Information - **Project Name**: testnewbie-iot-performance-test - **Description**: 模拟大量硬件设备连接服务器。 - **Primary Language**: Java - **License**: EPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-01 - **Last Updated**: 2022-04-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## iot-performance-test 物联网行业,软件平台接入一款设备时,测试环境可用的真实设备往往很少。 另外,做压力测试时,如果像互联网项目一样模拟用户登录平台,做操作,调接口等,是无法给系统提供真实的压力的。 因为一般情况下,物联网软件平台,用户数都比较少,而接入的硬件数量却很高。 所以做压力测试时,需要考虑模拟大量的设备连接服务器。 给服务器运行带来真实的压力,如校验报文,记录心跳,接收和存储设备上报的数据,处理和分析数据等。 ### 代码结构说明 可执行工程: 运行方式:两个服务都基于Springboot,直接运行 `XXXApplication` 即可。 - demo-clients :模拟设备连接服务器。目前提供了一个demo,以及高仿国内某著名显示屏厂商的协议实现。其他设备需要你们自己写逻辑实现。 - demo-server :服务器端demo,调试连接数使用。 其他工程: - performance-test-core :核心代码 ### 已实现的协议 demo-clients 提供的实现: - `DemoScreenBehaviorImpl` : 高仿国内某著名显示屏厂商的协议,作者编写该开源软件期间(2021年2月左右),可以在官网可以搜索并下载到。 如果侵犯了该厂商的权益或者对该厂商造成了一定困扰,请联系作者删除,作者并无恶意。 performance-test-core 提供的实现: - `DemoBehaviorImpl` : 单纯的demo,测试核心代码性能时使用。 如果想要将该软件应用到您的项目中,需要您根据设备的协议,自行编写协议实现(如`DemoScreenBehaviorImpl.java`)。 依据协议coding出对应的代码,需要一定的代码功底,如果有困难,并且您的设备协议全网公开,作者可以考虑帮您写一个开源实现。 ### 自定义协议 - 类似`DemoScreenBehaviorImpl.java` ,新写一个`XxxBehaviorImpl.java`类实现`Behavior`接口 - 类似`DemoScreenDeviceConfig.java` ,新写一个`XxxDeviceConfig.java`类继承`BaseDeviceConfig`抽象类 - 编写上面2个类的代码,mock设备心跳、数据上报、命令接收等与服务器的交互实现。 - 修改`demo-clients`包的配置文件`application.yaml`,将`demo-screen-devices`分组的配置复制一份,并修改前缀为`xxx-devices`; - 修改配置文件`xxx-devices`分组的`behavior: xxxBehaviorImpl`,值为新写`XxxBehaviorImpl.java`的实例名,即类的注解`@Component(value = "xxxBehaviorImpl")` - 修改配置文件`xxx-devices`分组的`clientInfo: xxx-devices.csv`,类似`screen-devices.csv`,新写一个设备清单`xxx-devices.csv` - 运行`DemoClientsApplication`调试,可以先执行少量连接服务器,然后查看业务功能是否正常使用。 - 模拟100、1000、3000、5000、7000、10000 个设备连接服务器,查看服务器压力情况。 ### 性能数据(使用`demoBehaviorImpl.java`连接`demo-server`) #### 客户端(2017年的i7): - win7下,不修改注册表,可以连接3824左右; - win7 按照 https://blog.csdn.net/zhangjunli/article/details/87914000 修改注册表 ```sh HKEY_LOCAL_MACHINE \System \CurrentControlSet \services \Tcpip \Parameters MaxUserPort = 65534 (Decimal) MaxHashTableSize = 65536 (Decimal) MaxFreeTcbs = 16000 (Decimal) ``` - 修改后,添加jvm参数 “ -Xmx1024m -Xms1024m” 可以上38777(服务端运行在另一台电脑的情况下); ### TODO 已知的问题: 1. 服务器停止,过一断时间重启后,客户端不会重连。所以要先启动`demo-server` 3. 设备(信息)列表需要更灵活的获取方式,如通过接口传入、从数据库读取等。 或者类似jenkins的master-agent模式,由master统一调度。 4. 多实例时,需要汇总各个实例的运行状态数据,并统一的展示面板,需要将缓存从本地迁移到redis等中间件。 5. 如果测试服务器性能强悍,后期可以考虑容器化,绕过单机的端口数量限制。 6. 大批量客户端运行时,服务器和客户端连接数量显示不一致,如 38777 vs 39798,待排查 已经解决: 2. 设备(信息)列表有点死板,每个设备只有一个属性; --支持扩展属性,见DeviceInfo.java