事务的响应时间是我们平时经常关注的一项性能指标,除此之外,在结果概要信息图表中,您还会经常看到事务的最小值(Minimum)、平均值(Average)、最大值(Maximum)、标准偏差(Std. Deviation)和90%事务(90 Percent)等相关信息内容,这些数值代表什么?又是怎样得来的呢?
尽管我们都是性能测试的从业人员,可是作为测试人员通常都有一个对事物“怀疑”的心理,在这里就表现为LoadRunner给出的这个结果信息是否可信?以及相应的结果信息是如何得到的?
这确实是一个很好的问题,但是,如何去证明LoadRunner 11.0的结果信息是正确的呢?大家在平时做功能测试的时候,是如何证明被测试的功能模块是正确的呢?相信作为测试从业者,我们都会异口同声地说:“我们都会设计很多测试用例,用例包括两部分:输入和预期的输出,如果根据测试用例在被测试的功能模块输入相应的数据,实际执行结果和预期结果一致,那么就认为此功能模块是正确的,否则就是失败的。”回答得非常好,那么性能测试是不是可以效仿功能测试呢?回答是肯定的,为了验证性能测试的执行结果的正确性和各个结果信息的数据来源,我们也需要事先组织一些数据,然后根据这些数据的内容算出预期的结果,再通过LoadRunner 11.0去实现我们的想法,观察最后执行的结果是否和我们预期的一致,当然,如果一致就是正确的了,不一致,当然就证明两者之间有一个是错误的,结合我们预期的设定来讲,当然是LoadRunner 11.0是错误的。
这里我有一个想法就是,我们事先准备10个数字,即:1、2、3、4、5、6、7、8、9、10,从这组数字当中不难发现,最小的数值应该是1,最大的数值应该是10,这些数值的平均值为(1+2+3+4+5+6+7+8+9+10)/10=55/10=6.5,在这组数值里边90%的数值都会小于或等于9,只有1个数值大于9,即:数值10。
也许,聪明的读者朋友们已经想到了,我们是否可以借助LoadRunner 11.0的事务和思考时间来将我们的想法实现。“嗯,确实如此,我们的想法不谋而合”。
首先,我们可以在Virtual User Generator中编写一个脚本,即:
Action()
{
lr_start_transaction("思考时间测试事务");
lr_think_time(atoi(lr_eval_string("{thinktime}")));
lr_end_transaction("思考时间测试事务", LR_AUTO);
return 0;
}
其中,“thinktime.dat”参数化文件内容包括数值1到10,共计10个整数值,如图6-178所示。
图6-178 “thinktime.dat”参数化文件内容
然后,设置“thinktime”参数的“Select next row:”为“Unique”,“Update value on:”为“Once”。
接下来,启动“Controller”让我们来设定一个场景,我们在参数化的时候一共参数化了10条数据记录,在场景设计的时候,也取10个虚拟用户,如图6-179所示。
图6-179 “Controller”场景设计对话框
当然,如果您关心在负载的时候,每个虚拟用户分别取到了哪些值,可以将测试执行日志打开,根据需要,这里我们单击图6-180红色区域所示按钮,则出现“Run-Time Settings”对话框,如图6-181所示。然后,选择“Log”页,请您根据自己的情况,选中日志的扩展情况,这里我们选中“Parameter substitution”选项。
图6-180 场景设计对话框 图6-181 “Run-Time Settings”对话框
而后,单击“Run”页,如图6-182所示,再单击图6-183的“Start Scenario”按钮,则开始执行场景。
图6-182 场景设计对话框
图6-183 场景执行对话框
您可以单击“Results>Analyze Results”菜单项或者单击工具条对应的功能按钮,如图6-184所示,就可以将执行完成后的结果调出来。
图6-184 场景执行对话框
测试结果出来后,首先,映入眼帘的是“Analysis Summary”图表信息,但是您是不是被“Transaction Summary”的数据惊呆了呢?参见图6-185所示,为什么图中所有的数值均为“0”呢?相信有很多朋友对这个结果也感到莫名其妙,再回头看看我们的脚本,脚本中使用了思考时间,即“lr_think_time()”函数,而在“Analysis”应用中在默认的情况下,是忽略思考时间的,所以就出现了这样的一个结果。那么如何使响应时间中包括思考时间呢?非常简单,您可以单击属性“Filter”,默认情况下该属性值为“do not Include Think Time”,单击该属性值后面的按钮,如图6-186所示。
图6-185 结果分析应用界面
图6-186 结果分析应用界面
单击按钮后,则出现图6-187所示界面,单击“Think Time”过滤条件,在“Values”列选中“Include Think Time”复选框。
设定好过滤条件后,单击“Analysis Summary Filter”对话框的“OK”按钮,此时您会发现结果信息的内容发生了改变,先前为“0”的数值项现在已经有了数值,如图6-188所示方框部分内容。
图6-188 事务概要信息内容
有很多朋友,可能非常关心每一个虚拟用户的取值问题。可能还有很多用户仍有这样的疑问,根据我们参数化的数据(即:1到10,共10个整型数值)正常来讲的话,平均值应该为6.5,最小值应该为1.0,而最大值应该为10.0,但是从图6-188我们可以看到,相应的数值都是有一定的偏差,那这又是为什么呢?下面,我就逐一给您来解答这两个问题。
关于每个虚拟用户取值问题,您可以有两种手段获得。第一种方法,查看虚拟用户执行日志,这里我是将执行结果存放到了本书配套光盘的“脚本\思考时间样例\Res_10VU_ Thinktime0”目录,在这个目录如果根据前面我们设定的执行时,启用日志,则会有一个名叫“log”的目录,这个目录就存放每个虚拟用户执行的日志信息,如图6-189所示。
图6-189 执行日志目录及文件信息
让我们任意打开一个日志文件来看一下文件的内容,比如在这里我们打开名称为“thinktime_1.log”的日志文件,文件内容请参见图6-190。细心的同志也许已经发现的一个问题,就是从图6-190和图6-188的“思考时间测试事务”,我们可以看到日志文件的思考时间是1.0129秒,而结果概要信息最小的事务时间显示为1.013秒。那么为什么不正好是1秒呢?这是因为LoadRunner模拟思考时间使用的是近似模拟,从数值上我们可以看到,而且在统计数据的时候是精确到毫秒级,所以您就在日志文件中看到了1.0129,而统计数据的时候发现将数据进行了四舍五入变成了1.013了。
图6-190 “thinktime_1.log”日志文件内容
您可以单击图6-191中方框区域,即“思考时间测试事务”链接,查看执行过程中我们设置的事务情况。
图6-192就是平均响应时间在测试执行过程中变化的趋势图表。
您可以单击图6-193的“Raw Data”页,而后再单击图6-194的“Click to retrieve raw data”链接,在出现图6-195后,请您选择要查看详细的数据信息时间段信息,默认是整个执行过程时间,在这里我们要查看整个过程的相关数据信息,所以直接单击“OK”按钮。
图6-191 结果分析概要事务相关信息
图6-192 “Average Transaction Response Time”图表
图6-193 “Average Transaction Response Time”图表的“Raw Data”页
图6-194 “Average Transaction Response Time”图表的“Click to retrieve raw data”链接
图6-195 “Raw Data”时间段选择对话框
这时所有虚拟用户执行过程中事务相关信息展现在我们面前,如图6-196所示,您可以从这些数据中看到每个虚拟用户在什么时间执行了那些事务以及执行事务所耗费的时间等相关信息。这里,结合脚本事务主要包括4个:vuser_init_Transaction、Action_Transaction、vuser_end_Transaction和思考时间测试事务。
图6-196 “Raw Data”表格关于事务的相关信息
您可以对事务进行过滤,单击事务名称下拉框进行选择,如图6-197所示。
图6-197 “Raw Data”事务过滤下拉列表
这里我们仅针对“思考时间测试事务”这个事务进行过滤,如图6-198所示。
图6-198 “Raw Data”中“思考时间测试事务”相关数据信息
为了让大家更清晰地看到相关的数据,这里我们将这部分数据单独截取出来,如图6-199所示。
图6-199 “思考时间测试事务”相关数据信息
为了便于对数据进行分析,您可以将数据输出到Excel文件中,参见图6-200。
单击“输出到Excel文件”的工具条按钮,将弹出“文件保存路径选择”对话框,默认保存的文件名称为“Raw Data - Average Transaction Response Time.xls”,选择要存储的路径后,单击“保存”按钮,如图6-201所示。
图6-200 “Raw Data”工具条信息 图6-201 “Select Raw Data Filename and path”对话框
文件保存完成后,您可以打开该Excel文件,如图6-202所示。
图6-202 “Raw Data - Average Transaction Response Time.xls”文件内容信息
您可以对事务的相关数据进行筛选,选中文件的第一行,然后单击“筛选”按钮,如图6-203所示。
图6-203 “Raw Data - Average Transaction Response Time.xls”文件内容信息
单击“Transaction_Name”列,选择“思考时间测试事务”,单击“确定”按钮,如图6-204所示,则可以将所有“思考时间测试事务”的相关数据信息过滤出来,如图6-205所示。
图6-204 过滤对话框
图6-205 “思考时间测试事务”数据信息
为了将原始数据和分析数据进行比较,这里我们新建一个sheet页,名称叫做“数据分析”,并将这些数据复制到新的sheet页,如图6-206所示,而后将最小值、最大值和平均值记录在该sheet页。
图6-206 “思考时间测试事务”数据分析
以上是我们用Excel计算出来的,接下来,将这些数据和结果概要信息进行比对,即:比对图6-206和图6-207关于“思考时间测试事务”的最小值、平均值和最大值,您也许已经发现了最小值和最大值是完全一致的,而平均时间是有差异的,由于Excel文件中的平均值没有进行四舍五入,所以比结果概要信息中的数据是多的,经过四舍五入后它们就完全一致了。
图6-207 “Analysis Summary”信息
也许有的读者还非常关心“Std.Deviation”和“90 Percent”是怎么来的呢?首先,我先解释一下“Std.Deviation”和“90 Percent”代表什么意思:“Std.Deviation”是标准偏差,它代表着事务数据间差异大小程度,这个数值越小越好。
这里我们用标准偏差S来表示、平均值用表示、每个具体的数据值用X1表示,用N来表示数据的个数。
接下来,我们把具体的数值放入公式中,为了方便我们计算,这里分步来计算。
第一步:[(1.013-6.511)2+(2.016-6.511)2+(3.013-6.511)2+(4.016-6.511)2+(6.016-6.511)2+ (6.014-6.511)2+(6.999-6.511)2+(7.999-6.511)2+(9.016-6.511)2+(10.016-6.511)2]/10=8.2399385,这里我们保留小数点后4为,则为8.2399。
第二步:将8.2399开平方后,得到S为2.8705,保留小数点3位,S=2.871。
接下来我们同图6-207中的“思考时间测试事务”的标准偏差进行对比,发现两者是一致的,当然我们手工进行计算似乎有点过于繁琐,有没有什么简易的方法就可以计算出标准偏差呢?这里我非常兴奋地告诉您:“有”!Excel提供了非常丰富的函数,我们可以利用“STDEVP”函数,如图6-208所示。该函数给出的整个样本总体的标准偏差,标准偏差反映相对于平均值的离散程度,该值越小越好。
接下来,让我们看一下“90 Percent”是怎么得来的,它是指90%“思考时间测试事务”中最大的值,这里因为一共有10条记录,排序后则9.015是这90%里边最大值,所以“90 Percent”即为该值,如图6-209所示。
图6-208 Excel标准偏差函数的应用 图6-209 “思考时间测试事务”的数据信息
当然,您也可以通过添加“Transaction Response Time (Percentile)”图表来查看,如图6-210所示。
因为这里我们的事务需要包含思考时间,所以,需要单击图6-210中的“Filter & Open”按钮,将弹出图6-211所示对话框,您需要选择“Include Think Time”,即包含思考时间,然后再单击“OK”按钮,则会出现图6-212所示界面,您如果想了解90%“思考时间测试事务”,可以顺着横坐标90位置往上找和图表曲线的交点,该点即为“90 Percent”的值。
图6-210 添加图表信息对话框信息 图6-211 “Graph Settings”对话框
图6-212 “Transaction Response Time (Percentile)”信息