TECHNOLOGY_FRONTIER

>> 已收录 ${postCount} 项技术方案

性能测试五:测试环境

测试环境及风险

单独的测试环境风险可控,难点在环境的构建上,规模和生产一致的成本也是较高的,所以一般而言有通过等比构建(1/2,1/4,1/8等),甚至是生产环境中部分应用独立部署测试集群,数据库共用的方式,此外测试环境需要从生产环境中导入脱敏的基础数据,例如至少是最近半年或者1年的,保持其整体的数据关联性,这个对于压测的准确度和参考性也很重要。
 
测试环境的风险主要体现在跟生产的差异度,测试结果的参考价值会打一定程度的折扣,可以视自身情况选择合理的方式,例如看重入口网络的检验的,可以测试环境和生产环境共享入口。 对测试环境系统平台、中间件、数据库等不熟悉和不了解,也会导致瓶颈不易分析、不易调优。
 

一、测试环境分类


 UT(Unit Testing 单元测试)

是指对软件中的最小可测试单元进行检查和验证。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
SIT(System Integration Testing 集成测试)
把自己的代码和别人的代码合并(一般是指版本库整合代码),在测试服务器,或者有条件的服务器【测试环境】进行测试。
 UAT(User Acceptance Testing 用户验收测试
就是把需要上生产的代码在生产环境进行最后的演练,让用户验收。
Performance testing 性能测试
 

二、测试环境规范


 测试环境调研

系统架构
系统如何组成的,每一层功能是做什么的,与生产环境有多大差异,主要为后面进行瓶颈分析服务和生产环境性能评估,这个很重要。
操作系统
操作系统是哪种平台,进行工具监控。
中间件
哪种中间件,进行工具监控和瓶颈定位。
数据库
哪种数据库,进行工具监控和瓶颈定位。
应用
启动多少个实例,启动参数是多少,进行问题查找和瓶颈定位。
可以配合APM工具(如ARMS)进行中间件、数据库、应用层面的问题定位。
 
测试环境搭建
  • 测试环境架构与生产环境架构完全相同。
  • 测试环境机型与生产环境机型尽量相同,云化的资源确保是同规格ECS或者容器。
  • 测试环境软件版本与生产环境软件版本完全相同,版本主要包括:操作系统、中间件相关、数据库、应用等。
  • 测试环境参数配置与生产环境完全相同,参数主要包括:操作系统参数、中间件参数、数据库参数、应用参数。
  • 测试环境基础数据量与生产环境基础数据量需在同一个数量级上。
  • 只能减少测试环境机器台数,并且需要同比例缩小,而不能只减少某一层的机器台数。理想的测试环境配置是生产环境的1/2,1/4。
 

三、测试数据


 测试数据分类

  • 基础数据/存款数据:需要保持跟生产上相同级别的数据量,或测试方案中规划的数据量(未来三年数据量增长趋势),同时关注数据分布问题。未来5年峰值(每年增加0.1) = 当前数据量 *(1+0.1)*(1+0.1)*(1+0.1)*(1+0.1)*(1+0.1)
  • 测试数据:即消耗型数据
注意: 
参数化数据量尽可能的多,必要的情况下,可以清除缓存或者用写代码的方式提供参数化。
参数化数据分布,如果业务有明显的地域等分布的特征,需要考虑数据分布的情况。

 

四、挡板


 "挡板"(Mock)是一种模拟对象或功能的技术,用于替代实际的组件或服务。它通常用于测试和开发过程中,当某个组件或服务尚未准备就绪或不易访问时。其实现方法分为代码逻辑实现和挡板服务器实现。

挡板在性能测试中的作用

部分接口涉及跨系统平台调用,当只测试本系统接口性能时,外联系统就需要挡板模拟返回数据。

 

挡板服务器(Mock Server)

服务器挡板是指在服务器端对请求进行限制和过滤的一种技术手段。其作用是保护服务器免受意外流量的冲击,防止恶意请求对系统造成破坏,以及提高服务器的稳定性和安全性。服务器挡板的原理主要包括以下几个方面:

  • 流量控制:服务器挡板可以根据预设的流量阈值,对请求进行限制。当请求的流量超出设定的阈值时,服务器挡板会拒绝请求或者推迟处理,从而保护服务器免受过载的影响。流量控制可以避免服务器由于突发大量请求而崩溃,保证系统的可用性。
  • IP过滤:服务器挡板可以根据IP地址对请求进行过滤。通过配置黑名单或白名单,可以禁止某些IP地址的请求访问服务器,或者只允许某些IP地址的请求访问。通过IP过滤,可以防止恶意攻击、网络爬虫等对服务器造成破坏和资源浪费。
  • 请求验证:服务器挡板可以对请求进行验证,以确保请求的合法性和完整性。通过验证请求的参数、身份认证等信息,可以防止恶意请求、篡改请求等对服务器的攻击。请求验证可以提高服务器的安全性,减少非法请求所带来的风险。
  • 缓存处理:服务器挡板可以将一些常用的请求结果缓存起来,当下次有相同请求时,直接返回缓存结果,而不需要真正去处理请求。这样可以减轻服务器的负载,并提高请求的处理速度。
  • 异常处理:服务器挡板可以对异常请求进行处理,保证服务器的稳定性。当服务器出现异常时,服务器挡板可以拦截异常请求或者自动切换到备用服务器,保证系统的正常运行。
  • 模拟服务器行为:服务器挡板可以模拟服务器的各种行为,包括返回指定的状态码、响应头、响应体等。开发者可以根据需要设置挡板的行为,例如返回成功的响应、错误的响应、超时等。通过模拟各种情况,可以在不依赖实际服务器的情况下进行各种测试,包括正常情况、异常情况、边界情况等。

 

五、压力机


或发压机,即模拟请求流量的客户端或服务器。

为避免压力机性能影响整个性能测试,应做如下检查:

CPU核数:当cpu被其他的程序所占用的时候,进程中的线程无法获取足够的cpu内存等支持,也是会阻塞排队,影响测试结果的,最好cpu的占用率维持到80%以下,确保压力机本身请求发起是有效的且无丢失的。还要确认程序是否发起了足够的线程。

内存大小:内存保证使用率≤80%;假如压力机为4c8g,可用内存为3.5g左右,启动一个线程需要1M(一个http请求),1000个线程大概需要1G,假如JVM设置Xms512m,Xmx1024m,1000VU,会导致Out of Memory。

网络:保证压力机与被测系统在同一局域网; 次选各个组件网卡带宽相同避免某一个组件成为瓶颈

线程数:Jmeter单台压力机推荐最高线程数500

Linux压力机内核限制

netstat -n| awk '/^tcp/{++s[$NF]} END {for (a in S)print a,s[a]}'       
#循环计算当前统计连接数 理论linux单机连接数在1024 ~ 65000
修改tcp连接状态限制
#vim /etc/sysctl.conf
net.ipv4.tcp_max_tw_buckets = 8000    #系统所处理最大timewait_sockets数目:最高65535,压测机增加至16000可提性能
net.ipv4.tcp_tw_reuse = 1             #是否允许重新应用处于TIME-WAIT状态的Socket用于新得TCP连接:默认0
net.ipv4.tcp_tw_recycle = 1           #快速打开TIME-WAIT socket回收:默认0
net.ipv4.tcp_fin_timeout = 10         #对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认60

修改进程允许打开文件数

ulimit -n  1024 

 

posted on 2025-03-20 15:35  王元安  阅读(96)  评论(0)    收藏  举报