Day4
一、性能测试的学习路线:
1、性能测试的初级部分:
1)概念的理解和灵活应用:事务、检查点、并发点(集合点),初级的参数池(参数化)
2)理解并能够灵活应用的测试类型:
A、基准测试
B、并发测试
C、综合场景测试
2、性能测试的高级部分:
1)脚本调试:高级的参数池部分(三大策略)、关联、涉及简单的C语言函数
2)控制台设置:继续巩固初级部分,加强对服务器的各项资源控制
3)结果分析:能够深入理解Analysis报告,并在AUT出现问题时能够尝试进行分析甚至调优,提高AUT的性能
二、小练习
1、什么是并发点(集合点)?并发点的三个策略?
答:系统压力最大的情况——所有用户都集合到系统瓶颈的某个点上进行操作(从脚本的角度讲,这个点就是执行脚本的某一条或一段语句)
三个策略:
A、当全部虚拟用户的百分之XX到达集合点的时候,系统释放用户,继续向下执行
B、当全部的运行着的虚拟用户的百分之XX到达集合点的时候,系统释放用户,继续向下执行
C、当XX个虚拟用户到达集合点的时候,系统释放用户,继续向下执行
2、如果达到50%的用户并发,则如何设置?
答:第一种策略(XX=50)、第三种策略(一半用户)
3、简要介绍检查点的三个函数。
答:
1) web_find
2) web_reg_find
3) web_image_check
三、web_reg_find()函数
1、LR中,带有reg字样的函数,称为注册性函数,该类函数的特点就是要将函数写在相应请求之前。
2、web_reg_find函数注册一个请求,在下一个操作函数(如web_url)检索到的缓存中搜索一个文本字符串
1)返回值用0和1表示;
2)是否注册成功(web_reg_find是注册类型函数,它本身并不执行),不代表查找的内容是否存在;
3)可利用SaveCount进行判断:
web_reg_find(“Search=Body”,”SaveCount=n”,”Text=welcome”,LAST);
解释:
A、 search用来定义查找范围(可以缺省),SaveCount定义查找计数变量名称,可记录在缓存中查找内容出现的次数,可使用该值判断要查找的内容是否被找到
B、 上例是查找内容为welcome的信息,并将出现次数记录在变量n中
3、性能测试中,所有的数据包(客户端和服务器端的对话)分为两类:请求包和应答包;无论是请求包和应答包都分为2部分:header和body
1)header中是一些参数设置
2)body中是真正要传递的信息
4、LR函数(web_或者lr_开头的函数)中出现的变量称为LR变量,该类变量不需要在脚本初始位置定义,但是C语言的变量一定要在初始位置定义
5、strcmp(lr_eval_string("{count}"),"0")==0)解释:
1)strcmp函数的作用是比较2个字符串是否相等,如果2个字符串相等,则函数的返回值为0,即strcmp(a,b)==0
2)lr_eval_string函数的作用:
A、为C语言函数和LR变量起到桥梁的作用
B、可以取出LR的变量count的实际值,如3,
C、为何三层括号:
a、lr_eval_string函数后面必须接()
b、()里面是字符串,所以用“ ”
c、“ ”里面不是普通字符串,而是LR的变量,LR要求如果取LR变量值,则必须要用{ }
3)lr_output_message("%stimes",lr_eval_string("{count}"));解释:
A、%s是格式限定符,表示输出是该处输出字符串;如果是%d,则该出输出整型
B、输出的内容将由逗号后的内容代替
C、如果引号里有多个限定符,则依次按照逗号后的内容来代替,如lr_output_message("%stimes,%d",a,b),则输出时,由a替换%s,b替换%d
4)输出语句lr_output_message写在相应请求之后即可,不一定紧贴在对应的请求后面,只要值形成,随时可以输出
这里的练习均在buyandcheck中添加
四、web_find、web_reg_find、web_image_check函数的区别:
1、录制模式区别:web_find只能用在基于HTML模式录制的脚本中,web_reg_find没有此限制
2、位置的区别:web_reg_find是先注册(register)后查找,放在请求语句的前面;而web_find是查找前面的请求结果,使用时放在请求语句的后面
3、设置区别:Runtimesettings中的“enable image and textcheck”对web_find有效,对web_reg_find无效
4、查找方式区别:web_reg_find函数的参数SaveCount记录查找匹配的次数;web_find的机制是一旦查找匹配成功就立即返回,并不继续查找和记录匹配次数
5、查找范围区别:web_find是在返回的页面中进行内容查找,web_reg_find是在缓存中进行查找
6.效率区别:web_reg_find执行效率高于web_find
五、基准测试(单用户测试)
1、如果脚本录制过程中遇到页面报错,则放弃录制,从来再来,要保证录制过程绝对正确
2、录制完成的脚本一定要回放,如果正确,再进行下一步增强脚本,如果不正确要查找原因。
3、基准测试步骤:
1)脚本调试,运行通过
2)放入控制台
3)控制台的参数设置:
A、用户数为1
B、虚拟用户部署不需要设置(global schedule)
C、Runtime settings中的设置:
a- Runlogic中设置5次迭代(10次也可)
b- pacing(循环之间的间隔,一般情况下2-3s左右,因为在线测试过程中,如果用户循环提交请求,但是每次循环之间没有间隔,则过于严格,不符合实际的生产环境)循环之间的间隔,一般情况下设置随机的2-3秒
c- thinktime时间忽略,(原因:单用户对系统压力很小,所以是否存在思考时间对结果影响不大)
注意:
1、如果将Pacing、Think time值调长,则对AUT的压力减小。
2、如果测试过程中或者结束后发现脚本错误,则需要重新修改脚本,修改脚本后实现如下步骤:
1)修改后的脚本要编译
2)刷新到控制台:控制台中选中脚本(Design页),点击Scenario Groups框中倒数第三个图标(Details),refresh script
3)重新运行控制台即可(其他的参数不用再重复设置)
4、基准测试的第二种:
要求:运行脚本1分钟(singlebuy)
1)脚本调试,运行通过
2)放入控制台
3)控制台的参数设置:
A、用户数为1
B、Duration设置为1分钟(注意: 当Runtimesettings中的run logic和duration都设置时,duration优先级高; duration默认时,以settings中的run logic为准; 当Duration时间结束时,虚拟用户会运行完当前的action再退出)
C、鉴于上面一步,Run logic中可不设置
D、pacing设置随机的2-3秒(注意: 只要有迭代,就要设置pacing, 这样是为了真实模拟用户使用)
E、think time时间忽略
注意:这里测试过程时间会比duration时间长,为什么?
——因为测试时间=初始化+用户开始时间+duration(持续时间)+用户退出时间
注意:每次测试提交的数据,应该测试3次,选取其中的中间值,如测试的响应时间有3.5、4.5、6.5,则选取4.5。
六、参数化
1、在参数池中,备用数据设置(记事本中那个)时要注意:光标要停留在新的下一行(new line)。
2、如何实现qq购票2张?(singlebuy1)
答:Runtimesettings中设置2次迭代
3、如何实现运行脚本让jojo和qq各订一张票?(singlebuy2)
1)将包含参数池的init部分里的脚本内容(主要是login)移动到action中
2)参数池从jojo(第一行)开始取值
3)迭代2次,则第一次迭代(action的循环)时取第一行值jojo,第二次迭代时取第二行值
七、作业
1、基准测试:三个脚本,buy、search、scan的事务响应时间的最大值、最小值、平均值
2、注册30个用户(使用脚本),要有检查点(自己已完成,且正确,此此脚本只能运行一次,因为一个用户名只能注册一次: regis30)
分析:1)用控制台还是单脚本做测试数据比较合适?——控制台多用户(30个用户),压力大不容易成功,所以使用单脚本(单用户)循环