网站服务器进行负载测试的关键要素主要包括以下几点。
1. 在协议层面,通常以HTTP或HTTPS为主流,若采用其他协议,需对其封装和解封装方式进行深入分析。
2. 为确保测试压力的有效性,压力源必须稳定可靠。通常采用机器人模拟真实用户行为,其逻辑可根据具体业务需求进行定制开发。
3. 在特定压力条件下,需对服务器性能指标(如CPU、内存、IO、网络流量)进行细致观测,以判断是否存在内存泄漏或CPU利用率过高等问题。
4. 压力测试应持续进行,在此过程中需收集服务器性能数据,包括每秒事务数(TPS)及机器负载情况等,从而分析服务器瓶颈并针对性地进行优化。
5. 目前,大部分服务器均运行于Linux系统,测试人员需熟练掌握相关Linux命令,以便更有效地进行测试。
若您认为上述步骤较为繁琐,可选择WeTest服务器压力测试平台,该平台提供高并发、实时性能报表及专家级性能优化建议。目前,我们专注于网站压力测试,您只需填写被测URL,压力源、数据统计等繁琐工作将由我们负责。
以下是如何使用LoadRunner进行网站压力测试的简要步骤:
1. 创建虚拟用户生成器(VuGen)脚本,包括选择协议、录制脚本、编辑脚本及检查脚本错误。
2. 通过中央控制器(Controller)调度虚拟用户,创建测试场景(Scenario),配置脚本、虚拟用户数量、调度方案,若进行多机测试,还需配置IP代理。
3. 运行脚本,分析测试结果。
4. 安装LoadRunner中文版,LoadRunner支持Windows和Unix版本,根据测试环境选择相应版本进行安装。
5. 使用LoadRunner进行负载/压力测试,录制基本的用户脚本,并设置系统通讯协议。
6. 在URL中输入要测试的Web站点地址,将录制的脚本放入相应部分,如“Action”。
7. 设置录制脚本选项,启动录制过程,避免使用浏览器的“后退”功能。
8. 完善测试脚本,如插入事务、结合点、注解、参数化输入等。
9. 插入事务,为衡量服务器性能,定义数据查询操作等事务,并在脚本中插入事务的开始点和结束点。
10. 插入集合点,衡量加重负载下服务器的性能,通过在提交数据操作前加入集合点,实现多用户同时提交数据的目标。
设置集合点旨在评估服务器在高负荷状态下的性能表现。在测试方案中,可能规定系统需承受1000人同步上传数据。在LoadRunner中,通过在数据提交操作前加入集合点,一旦虚拟用户达到数据提交的集合点,LoadRunner将核实同时到达集合点的用户数量,若不足1000人,LoadRunner将指示已到达集合点的用户等待,待集合点用户数量达到1000人时,LoadRunner将命令这1000人同步提交数据,以此满足测试方案的要求。
注意:集合点通常与事务协同运用。集合点仅能插入至Action部分,vuser_init和vuser_end中不允许插入集合点。具体操作如下:在需插入集合点之前,通过菜单或工具栏进行操作,输入集合点名称。注意:集合点名称应具有意义,清晰表明该集合点完成的动作。
12、添加注释。
注释功能无需赘述,但建议在录制过程中添加注释。具体操作如下:在需添加注释之前,通过菜单或工具栏进行操作。
13、参数化输入。
若用户在录制脚本过程中填写了一些数据,如增加数据库记录,这些操作均被记录在脚本中。当多个虚拟用户运行脚本时,都会提交相同的记录,这不符合实际运行情况,且可能引发冲突。为更真实地模拟实际环境,需要各种类型的输入。参数化输入是一种有效的方法。
使用参数表示用户脚本的优点:
①缩短脚本长度。
②可使用不同数值测试脚本。例如,若要搜索不同名称的图书,只需编写一次提交函数。在回放过程中,可以使用不同的参数值,而不仅限于特定名称。
参数化包括以下两项任务:
①在脚本中使用参数替换常量值。
②设置参数属性及数据源。
参数化仅适用于函数中的参数。不能用于非函数参数的字符串。另外,并非所有函数都可进行参数化。
参数化输入讲解,以下通过实例进行说明。
在本例中,对用户登录名进行参数化:
首先查看如下脚本,通过脚本录制找到用户登录部分,如图
14、参数名可随意取名,建议取通俗易懂的名字,以下重点介绍参数类型。
●DateTime:简单,在需输入日期/时间的地方,使用DateTime类型进行替代。属性设置简单,选择一种格式即可。当然,也可自定义格式。
.●GroupName:目前不知在何处使用,但设置简单。在实际运行中,LoadRunner使用虚拟用户所在的VuserGroup进行替代。但在VuGen中运行时,GroupName将为None
.●LoadGeneratorName:在实际运行中,LoadRunner使用虚拟用户所在的LoadGenerator的机器名进行替代。
.●IterationNumber:在实际运行中,LoadRunner使用测试脚本当前循环次数进行替代。
.●RandomNumber:随机数。简单。在属性设置中可设置生成随机数的范围
.●UniqueNumber:唯一数。在属性设置中可设置第一个数及递增数值的大小。
注意:使用该参数类型时,需注意可接受的最大数值。例如:某个文本框能接受的最大数为99。当使用该参数类型时,设置第一个数为1,递增数值为1,但100个虚拟用户同时运行时,第100个虚拟用户输入的将是100,这样脚本运行将会出错。
注意:此处所说的递增是指各个用户取第一个值的递增数值,每个用户相邻两次循环之间的差值为1。举例说明:假设起始数为1,递增数值为5,则第一个用户第一次循环取值1,第二次循环取值2;第二个用户第一次循环取值为6,第二次为7;依次类推。
●VuserID:设置简单。在实际运行中,LoadRunner使用虚拟用户ID进行替代,该ID由Controller控制。但在VuGen中运行时,VuserID将为–1。
File:在属性设置中编辑文件,添加内容,也可从现有数据库中提取数据(以下将介绍)
●UserDefinedFunction:从用户开发的dll文件提取数据。就目前而言,我认为这种方式没有必要。VuGen支持C语言语法,在VuGen中重新编写类似的函数应该不难。
以上例子中,使用随机数进行参数化。点击“Properties…..”按钮,进入属性设置窗口,添加随机数取值范围为(1-50),选择一种数据格式。在“属性”中有以下几个选项:
◆EachOccurrence:在运行时,每次遇到该参数,都会取一个新的值
◆Eachiteration:运行时,在每次循环中都取相同的值
◆Once:运行时,在每次循环中,该参数只取一次值
这里使用随机数,选择EachOccurrence非常合适。
接下来,我们介绍使用数据库中的用户名进行登录用户名的参数化。
选中登录名,点击鼠标右键,弹出对话框,选择“替换为新参数”,弹出对话框,此时参数名输入:name,参数类型选择File,如图
15、注意:参数的文件名不要使用con.dat、pm.dat或lpt*.dat等系统设备名。
接下来,我们将连接数据库,从数据表中选择用户名。点击“数据向导”按钮,显示如图
16、输入连接字符串,点击“创建”按钮,选择事先配置好的ODBC连接。在SQL语句中输入select查询语句,出现如图窗口
17、提醒:在参数数据显示区,最多只能看到100行,若数据超过100行,只能点击“编辑”按钮,进入记事本查看。
“选择下一行”有以下几种选择:
●Sequential:按照顺序一行行读取。每个虚拟用户都会按照相同的顺序读取
●Random:在每次循环中随机读取一个,但在循环中保持不变
在每次迭代中随机选取一个,但循环过程中保持其选择不变
●Exclusive:独一无二的数值。请注意:使用此类需确保数据表拥有充足的数据量。例如,在Controller中配置20个模拟用户进行5轮循环,那么编号为1的模拟用户将选取前5个数值,编号为2的模拟用户将选取第6至第10个数值,依此类推。因此,数据表中至少需包含100个数据,否则在Controller运行过程中可能会出现错误提示。
“按顺序”指的是从列表中选择某一列数据,从左至右依次为1、2、3等,通常应用于存在关联性的数据。在此,我们选择Sequential即可。完成设置后,关闭即可。
4.3 单机执行测试脚本
完成上述步骤后,脚本即可启动。启动脚本可通过菜单或工具栏进行操作。
执行“执行”命令后,VuGen首先编译脚本,检查是否存在语法等错误。若存在错误,VuGen将给出错误提示。双击错误提示,VuGen可定位到错误所在的行。为验证脚本的正确性,还可以进行脚本的调试,例如在脚本中设置断点等,操作方式与VC中类似,相信大家不会感到陌生。若编译无误,脚本将开始执行。随后,将显示运行结果。