初级性能测试总结

定义:web

性能测试(Performance Testing):经过模拟真实用户来测试系统的性能是否知足用户的需求数据库

负载测试(Load Testing):经过在被测系统上不断增长压力,直到性能指标超过预约指标或者某种资源使用已达到饱和状态服务器

压力测试(Stress Testing):测试系统资源在必定饱和状态下,系统可以处理的会话能力,以及系统是否会出现错误cookie

配置测试(Configuration Testing):经过对被测系统的软、硬件环境的调整,了解不一样环境对系统性能的影响程度,从而找到系统各项资源的最优分配原则网络

并发测试(Concurrency Testing):模拟用户的并发访问,测试多用户并发访问同一个应用、同一个模块或者数据记录时是否存在锁死等性能问题并发

稳定性测试(Reliability Testing):经过给系统必定的业务压力的状况下,让应用持续运行一段时间,测试系统在这种条件下可否稳定运行tcp

性能指标:函数

1)响应时间(Response Time):从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,这个过程所耗费的时间工具

2)TPS(Transaction Per Second):每秒系统可以处理的交易或事务的数量性能

3)资源利用率(Resource Utilization):服务器CUP、MEM、网络、磁盘I/O的使用状况

4)成功率(Success Rate):系统成功事务数占总事务数的比例

5)稳定时长:系统可稳定运行的时间

6)总事务数:系统在稳定时长内处理的事务总数

7)波动范围:系统处理事务能力的波动大小,标准误差/平均值(Std. Deviation/Average

Loadrunner的4部分:

1)脚本生成器(Virtual User Generator)

2)压力调度和监控系统(Controller)

3)压力生成器(Load Generator)

4)结果分析工具(Analysis)

脚本调优经常使用方法:

1)添加事物:lr_start_transaction("事务名"); lr_end_transaction("事务名",LR_AUTO); //事务的开始与结束是成对出现的,LR_AUTO指事务的状态由系统自动根据默认规则来判断,结果为PASS/FAIL

2)添加检查点:web_reg_find("Search=Body/Headers/All","Savecount=N","Text=文本内容"); //此函数要写到被检查内容以前,检查事务是否运行成功,Search为检查的范围,Savecount为检查的次数,Text为检查的内容

3)添加集合点:lr_rendezvous("集合点名"); //等达到规定的用户数后再一块儿执行某个操做,Insert-Rendezvous添加

4)添加关联:web_reg_save_param("response","LB=","RB=","Search=",LAST); //当服务器返回动态值并须要将此动态值应用到后续请求中时才用到关联,此函数返回的值为左边界LB和右边界RB之间的数据,如用到后续请求中时需将动态值替换为{response}

5)参数化:把以后会用到的参数集合起来,以便统一使用,通常使用Unique(惟一)+Each iteration(每次迭代)+Continue in a cyclic manner(循环方式)

经常使用到的脚本函数:

1)web_url();  //地址请求函数

2)web_submit_form();  //单表单提交函数

3)web_submit_data();  //多表单提交函数

4)web_custom_request();  //多功能表单提交函数

5)lr_think_time();  //思考时间,单位:s

6)lr_output_message(字符串);  //打印输出括号内字段

字符串处理函数:

1)lr_save_string("value","name"); lr_save_int("value","name"); lr_save_datetime("value","name");  //将一个字符串、数字、日期写入一个参数保存

2)lr_eval_string("{参数}");  //返回脚本中的一个参数当前的值,返回值类型:char,例如将上一个函数中的name做为参数,便可返回value的值

3)sprintf:相似printf,只是将打印出来的内容变为给变量赋值,sprintf(变量,"%d/s/g",value);

4)strlen:strlen("hello world!");返回字符串的长度12

5)strcat:strcat(a,b);将b字符串链接到a以后,无返回值

6)strcpy:strcpy(a,b);  //把b的值复制到a中

7)strcmp:strcmp(str1,str2);  //对比str1字符串和str2字符串(区分大小写),若相同返回0,不一样则返回非0

8)strchr:strchr(s,'a');字符首次在字符串s中出现的位置的指针,若是不存在则返回NULL,printf("%s",strchr("abcdefg",'c')),输出结果就是cdefg

9)strstr:相似strchr,strstr("abcdefg","cde")字符串首次在字符串中出现的位置的指针,若是不存在则放回NULL,printf("%s",strchr("abcdefg","cde"));输出结果为cdefg

10)atoi(字符串);  //将字符串转变为整数int,返回值类型:int,如不能转换成int或者为空字符串,那么将返回0

11)itoa(整形);  将整形转化为字符串类型,返回值类型:char  //已被淘汰

12)memset:

13)lr_convert_string_encoding:

性能测试流程:

1)性能测试需求分析:

  • 肯定测试范围
  • 肯定测试交易
  • 肯定测试工具
  • 肯定测试指标:根据业务指标(二八原则),按照硬件配置同比例缩小

2)编写性能测试方案:

  • 测试背景、目的
  • 业务场景、测试场景
  • 业务指标、测试指标
  • 生产环境与测试环境的差别
  • 测试基础数据量
  • 测试场景(策略):

    1.单交易基准测试:单个交易在一个用户下(无压力)获取系统单笔交易的响应时间,为后续交易提供数据依靠

      通常为迭代100次,交易之间pacing1s,关注指标:响应时间、成功率

    2.单交易负载测试:单交易多并发测试,考察交易自身是否存在并发缺陷,同时考察单交易的最大处理能力

      通常为等梯度的4组用户,1vu-10vu的响应时间变化应该不大,关注指标:TPS、响应时间、成功率、资源利用率

    3.混合容量测试:按照测试场景配比发起压力,检测系统在给定负载下的性能表现,验证是否达到预期性能指标

      通常为经过加入pacing使各交易TPS达到场景配比,计算公式:pacing = 总VU/总TPS - 单用户响应时间(总VU=单交易总占比TPS/单用户TPS,向上进位)

      例如:存款交易占比32%,总TPS为100,单交易基准的响应时间为0.2s,则应发起的vu数为100*32%*0.2=6.4,向上进位为7vu,则pacing=7/320.2=0.01875s,此交易关注指标:TPS、响应时间、成功率、资源利用率

    4.稳定性测试:按照系统最大的处理能力的80%发起压力,运行较长时间后,检验系统可否稳定运行                                                                                      通常为执行24H,关注指标:TPS、响应时间、成功率、资源利用率、稳定运行时长、总事务数、波动范围

    5.最大并发用户数测试:当并发用户数持续递增,系统资源利用率接近100%、响应时间超过3s、错误率超过0.5%达到其中任一指标时,测试中止,获取系统最大的并发用户数

3)编写测试用例

遵循测试场景的规则编写

4)编写测试脚本及调优

使用经常使用函数进行脚本编写

5)测试执行

在Controller中,按案例添加场景并执行

6)监控系统

在Linux系统中执行./nmon进入nmom工具

执行./nmom -t -f -s -c -m   -s:每隔几秒收集一次  -c:收集次数   -m:+/tmp存放路径

7)统计、分析测试结果

使用Analysis调取测试报告,进行数据分析

常见问题:

增长并发后,TPS基本没有变化,应用和数据库的CPU也都消耗不高

能够先选择一个非登陆的交易,最好是查询类交易,作1并发、5并发、10并发,试运行5分钟查看平均响应时间和TPS,若是TPS从5到10并发基本没有变化,应用和数据库的CPU也没大的变化,只是平均响应时间翻倍增长,那么基本能够肯定是链接的限制问题,须要让开发查看三个链接数的设置:一个是应用容许的链接数;一个是链接池的限制;一个是数据库容许的链接限制。

切记:必定跟开发确认关闭日志或者为error级别,不然也会存在TPS很低。

应用容许的链接数查看方法,在Linux 系统下查看命令:

netstat -n | grep 23000 | awk '/^tcp/{++S[$NF]} END {for(a in S) print a,S[a]}'

netstat -an|grep 8080|grep timewaited|wc -l

执行该命令,其中23000是应用的端口,发现出现大量的time-wait

此时考虑更改操做系统的核心参数,用户有更改权限,更改配置文件使TCP端口快速回收:

(修改操做系统TCP核心参数 开启TCP复用和快速回收)

经过在/etc/sysctl.conf中增长以下几行参数, 而后/sbin/sysctl -p或重启网卡  使之生效。

链接数:10   timewait不断增长则表明链接数有问题

 

修改后的核心参数以下:

######################

net.ipv4.tcp_max_tw_buckets = 10000

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_fin_timeout=30

net.ipv4.tcp_syncookies=1

sysctl -w net.ipv4.tcp_keepalive_time=600  

sysctl -w net.ipv4.tcp_keepalive_probes=2

sysctl -w net.ipv4.tcp_keepalive_intvl=2

###################

8)编写测试报告

测试概述:测试背景、范围、指标、环境、数据、工具

测试实施:地点、阶段

测试数据:测试目的、场景设置、场景配置、测试结果:

     单交易基准测试:记录交易平均响应时间、TPS、成功率

     单交易负载测试:记录交易平均响应时间、TPS、成功率,并截取每一个梯度的TPS曲线图和资源利用率使用状况(带图)

     混合容量测试:记录交易平均响应时间、TPS、总TPS、成功率,并截取每一个梯度的TPS曲线图和资源利用率使用状况(带图)

     稳定性测试:记录交易平均响应时间、TPS、总TPS、成功率,并截取每一个梯度的TPS曲线图和资源利用率使用状况(带图)

结果分析:

     单交易负载测试结果分析:Excel中分别做出每一个交易的TPS-VU、资源利用率-VU的趋势图,复制到报告中,并叙述TPS、资源利用率、并发用户数之间的关系

     混合容量测试结果分析:Excel中分别做出每一个交易的TPS-VU、资源利用率-VU的趋势图,复制到报告中,并分析出系统在知足指标的同事其最佳并发用户数

     稳定性测试结果分析:分析系统在稳定性测试期间的交易总笔数及成功率

相关文章
相关标签/搜索