|
知识路径: > 测试技术的分类 > 应用负载压力测试 >
|
相关知识点:150个
|
|
|
|
|
录制业务流程时,测试工具生成一个由函数构成的Vuser脚本。函数中参数的值是录制期间使用的实际值。例如,假设在操作Web应用程序时录制了一个Vuser脚本。VuGen生成下列语句,在库的数据库中搜索标题“UNIX”,使用多个Vuser和迭代来重播该脚本时,如果不想重复使用相同的值“UNIX”,那么可以用参数来替换该常量值。
|
|
|
|
上例中可以用参数“Book_Title”来替换常量值“UNIX”,然后,生成的Vuser使用指定的数据源中的值来替换参数。该数据源可以是一个文件或者内部生成的变量。
|
|
|
|
|
. 提供了使用不同的值测试脚本的能力。例如,如果要在数据库中搜索几个标题,只须写一次提交函数,在函数中使用参数,而不是指示Vuser搜索一个特定的标题。重播期间,VuGen用不同的值替换该参数。
|
|
|
|
|
|
下面谈谈数据源的问题。可以选择一个文件作为参数值的源,一个常见的使用参数的方法是指示Vuser从外部文件中取值。可以执行下列步骤。
|
|
|
|
|
还可以从现有数据库中导入数据,用于参数化。可以用下列两种方法中的一种导入数据。
|
|
|
|
|
|
可以定义事务以度量服务器的性能。每个事务度量服务器响应指定的Vuser请求所用的时间。这些请求可以是简单任务(例如等待对单个查询的响应),也可以是复杂任务(例如提交多个查询和生成报告)。要度量事务,需要插入Vuser函数以标记任务的开始和结束。在脚本内,可以标记的事务不受数量限制,每个事务的名称都不同。在方案执行期间,主控台将度量执行每个事务所用的时间。场景运行后,可使用测试工具的图和报告来分析各个事务的服务器性能。
|
|
|
|
要在系统上模拟较重的用户负载,需要同步各个Vuser以便在同一时刻执行任务。通过创建集合点,可以确保多个Vuser同时执行操作。当某个Vuser到达该集合点时,主控台会将其保留,直到参与该集合的全部Vuser都到达。当满足集合条件时,主控台将释放Vuser。
|
|
|
可通过将集合点插入到Vuser脚本来指定会合位置。在Vuser执行脚本并遇到集合点时,脚本将暂停执行,Vuser将等待主控台允许继续执行命令。
|
|
|
|
这一小节我们主要解决动态数据所导致的问题,即利用测试工具的脚本函数如何关联动态且不可人工预知的值。
|
|
|
系统的输出值需要为后续操作提供输入,这些值只对当前会话有效。举例说明如下。
|
|
|
|
|
|
|
|
|
关联数据先是由服务器发给客户端,之后客户端又会将该数据返回服务器。例如SessionID,它是脚本中的一段代码,为录制的会话服务,但却不能用于回放的会话。
|
|
|
|
|
|
|
|
|
①创建两个虚拟用户。这两个用户的录制步骤保持一致。如果说捕捉的动态数据依赖于某个输入值,那么就改变这个输入值;如果独立于任何输入值,那么就采用相同的数据。
|
|
|
②对比脚本。利用Wdiff.exe工具对比,它遍历脚本的每一行,并且亮显不同点。.找到所捕捉值的左右边界标识符。
|
|
|
|
. 将函数web_reg_save_param加入脚本,在加入之前,必需要先捕捉到值。
|
|
|
. 在函数中加入参数名称、左边界标识符、右边界标识符及函数事件。
|
|
|
|
|
|
运行方案时,每台负载生成器计算机上的Vuser都使用该计算机的IP地址。也可以在负载生成器计算机上定义多个IP地址,以模拟用户使用不同计算机的真实情况。应用程序服务器使用IP地址来标识客户端。应用程序服务器经常缓存来自同一台计算机上的客户端信息。网络路由器则缓存源信息和目标信息,以提高处理能力。如果许多用户使用同一个IP地址,服务器和路由器都会进行优化处理。由于同一台负载生成器计算机上的Vuser具有相同的IP地址,服务器和路由器将进行优化处理,因而无法反映真实的情况。
|
|
|
测试工具的多IP地址功能可以使用许多IP地址来标识在一台计算机上运行的多个Vuser。这样,服务器和路由器认为Vuser来自不同的计算机,因此使测试环境更加真实。
|
|
|
在Windows平台上,每块网卡上可以模拟的最大IP地址数为35个,Solaris(2.5.1版)最多为255个,而Solaris(2.6或更高版本)最多则为8192个。
|
|
|
|
. 客户端服务器:DNS、Windows Sockets。
|
|
|
. 自定义:Java Vuser、Javascript Vuser、VB Vuser、VB Script Vuser。
|
|
|
. 电子商务:FTP、Palm、SOAP、Web(HTTP/HTML)协议、WinSock\WebDual协议。
|
|
|
. bom:Oracle NCA、Siebel-Web。
|
|
|
. 邮件服务:Internet Messaging(IMAP)、MS Exchange(MAPI)、POP3、SMTP。
|
|
|
|
. 无线:i-Mode、VoiceXML、WAP。
|
|
|
以下过程说明了如何向负载生成器中添加新的IP地址。
|
|
|
. 运行负载生成器上的“IP向导”添加指定数量的IP地址。为UNIX负载生成器计算机手动配置新的IP地址。
|
|
|
|
|
|
|
对Web站点的测试,从测试工具的角度来讲,给读者介绍下面几点经验。读者通过阅读本小节的内容应能达到触类旁通,将这些经验应用到其他的测试领域。
|
|
|
. 在执行客户端并发性能测试的过程中,需要同时监控数据库服务器、Web服务器以及网络资源等使用情况,以便对系统的性能做全面评估。
|
|
|
|
|
. 手工编写脚本需要注意既能够模拟负载压力,又符合脚本的后台处理方式。
|
|
|
. 设置数据池,实现变量替换常量。为了真实模拟负载,数据池是经常使用的有效手段。
|
|
|
|
单独的业务并发操作,有可能会忽略例如资源争用、锁冲突等问题,在Web站点负载压力测试方案中,一定要考虑将多种业务混合执行,并发性能测试。
|
|
|
|
我们知道在真实情况下,高峰期负载压力的到来是循序渐进的过程,同样的道理,高峰期的结束也有一个过程。在工具中我们使用虚拟用户数的递增与递减来模拟这种情况。
|
|
|
|
交易之间的时间间隔代表了负载程度的高低,为了模拟不同的负载,经常需要调整此时间间隔。
|
|
|
|
并发访问需求量不大的系统,每个不同的虚拟用户使用不同的IP地址访问服务器是非常有必要的。
|
|
|
|
这项设置与系统Web服务器、数据库服务器、中间件服务器等超时设置有关,建议工具的设置值大于等于系统服务器的设置值。
|
|
|
|
每个虚拟用户在并发时,串行循环执行的交易数建议设置为3~5个。
|
|
|
|
测试期间的报错是故障定位的主要依据,应该分清错误的来源,包括服务器端错误、客户端错误以及网络错误。
|
|
|
|
对某些动态值,每次执行它都在变化,如果不加处理,往往导致负载测试失败。
|
|
|
|
将负载生成器布置在不同的网段,有利于模拟来自不同用户群的负载。
|
|
|
|
压力测试的目的是测试系统能够支持的最大并发用户数。
|
|
|
|
负载生成器的资源使用超出范围,导致模拟客户端并发请求失败。
|
|
|
|
在脚本中设置并发集合点,可以将录制的完整操作过程分解为一个个小的并发交易。
|
|
|
|
工具参数的配置非常灵活且有效,在下面的章节中将详细论述。
|
|
|
|
下面介绍几个脚本调试的例子,读者可在此基础上进一步提高调试脚本的技术。
|
|
|
|
|
|
|
|
Winsock脚本调试的重点是在脚本中如何用变量来代替定值,即处理Winsock应用程序数据流。我们来看下面的示例脚本。可参见http://yuanhaisong.myip.org/sqa/webtest.htm。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
在测试工具中有很多配置参数,不同的配置有可能会导致测试失败,也有可能产生不同的测试结果。根据实际负载压力需求正确地配置参数,就可以保证达到真实地模拟负载,并得出正确的测试结果。测试实施过程中,配置测试工具参数的方法可以参考工具的用户手册,配置参数的技巧就要靠测试工程师的经验和技术积累了。下面举例说明配置参数。
|
|
|
. Form Field Comments(Yes/No):在脚本中是否给Form Field部分加注释;
|
|
|
. Anchors as Comments(Yes/No):在脚本中是否给Anchors部分加注释;
|
|
|
. Client Maps Comments(Yes/No):在脚本中是否给Client Maps部分加注释;
|
|
|
. Debug Comments(Yes/No):在脚本中是否给Debug部分加注释;
|
|
|
. Doc Title Verification(Yes/No):脚本录制过程中是否校验文档Title;
|
|
|
. Baud Rate Emulation(Yes/No):在脚本回放过程中是否模拟不同的带宽进行回放,如果需要,标明回放的带宽数值;
|
|
|
. Encode DBCS Characters(Yes/No):是否将DBCS字符编码;
|
|
|
. Cache(Yes/No):在脚本回放过程中,是否模拟缓存;
|
|
|
. Dynamic Redirect(Yes/No):在脚本回放过程中,是否支持动态重定向;
|
|
|
. Dynamic Cookies(Yes/No):在脚本回放过程中,是否支持动态Cookies;
|
|
|
. Process Subrequests(Yes/No):在脚本回放过程中,是否支持进程子请求;
|
|
|
. Persistent Connections(Yes/No):在脚本回放过程中,连接是否持久保持;
|
|
|
. Max Concurrent Connection:在脚本回放过程中,最大当前连接数,默认值为4;
|
|
|
. Max Connection Retries:在脚本回放过程中,最大当前连接重试数,默认值为4;
|
|
|
. Server Response Timeout:在脚本回放过程中,服务器响应超时限制,默认值为120;
|
|
|
. HTTP Version Detection:录制时采用的HTTP版本,默认值为Auto,既可以为1.0版本,也可为2.0版本,测试工具自动处理;
|
|
|
. ActiveData(Yes/No):在脚本回放过程中,是否支持动态数据;
|
|
|
. IPSpoofing(Yes/No):在脚本回放过程中,是否支持每个虚拟用户使用不同的IP实现并发;
|
|
|
. Streaming Media(Yes/No):是否支持流媒体;
|
|
|
. Hostnames as IP Addresses(Yes/No):是否支持使用IP地址标识主机;
|
|
|
. Strip All Cookies From Requests(Yes/No):在脚本回放过程中,请求中是否包括Cookies;
|
|
|
. Traffic Filters(Yes/No):在脚本回放过程中,是否需要流量过滤。
|
|
|
上述参数,例如“Strip All Cookies From Requests”,决定测试过程的成败,比如有些系统将Session ID,或者用户的登录信息放在Cookies中,如果不加载Cookies,那么自然导致测试失败。又如“Server Response Timeout”,此值如果设置不合适,可能会使负载压力测试过程报错,并且这个错误是由测试工具本身导致的。“Persistent Connections”这项参数根据我们的测试需求来确定,如果我们侧重测试系统并发用户数,那么就不应该选择这项参数,而是采用间断连接;如果我们侧重测试系统交易响应时间,那么选择这项指标会使系统响应发挥最好。“Baud Rate Emulation”帮助测试工程师实现在不同的网络带宽下实施负载压力测试等。
|
|
|