1.什么是负载测试?什么是性能测试?
负载测试是通过改变系统负载方式、增加负载等来发现系统中所存在的性能问题。负载测试是一种测试方法,可以为性能测试、压力测试所采用。负载测试的加载方式也有很多种,可以根据测试需要来选择。
性能测试是为获取或验证系统性能指标而进行测试。多数情况下,性能测试会在不同负载情况下进行。
压力测试通常是在高负载情况下来对系统的稳定性进行测试,更有效地发现系统稳定性的隐患和系统在负载峰值的条件下功能隐患等。
2.性能测试包含了哪些测试(至少举出3种)
压力测试、负载测试、并发测试、可靠测试、失效恢复测试。
3.简述性能测试的步骤
Step 1. Identify the Test Environment
Step 2. Identify Performance Acceptance Criteria
Step 3. Plan and Design Tests
Step 4. Configure the Test Environment
Step 5. Implement the Test Design
Step 6. Execute the Test
Step 7. Analyze Results, Report, and Retest
4.简述使用Loadrunner的步骤
脚本录制设置—录制脚本—调试脚本—场景设置—结果分析
5.什么时候可以开始执行性能测试?
在产品相对比较文档,功能测试完成后。灵活性比较强。
6.LoadRunner由哪些部件组成?
virtual user generator
contorller
analysis
7.你使用LoadRunner的哪个部件来录制脚本?
virtual user generator
8.LoadRunner的哪个部件可以模拟多用户并发下回放脚本?
contorller
9.什么是集合点?设置集合点有什么意义?Loadrunner中设置集合点的函数是哪个?
集合点:设置多个用户到达某个用户数量点集合,同时触发一个事务,以达到模拟真实环境下同时多个用户操作,同时模拟负载,实现性能测试的最终目的
LR_rendezvous(“集合点名称”)
10.什么是场景?场景的重要性有哪些?如何设置场景?
场景:模拟真实环境中,用户运行状况。
1.通过场景来模拟实际用户的操作,性能测试结果才具有代表性。
2.在运行过程中也需要关注场景性能测试值,测试过程是否正常。
1.选择场景中需要的脚本
2.选择为目标场景,还是指定的手工场景
3.设置用户数、设置产生负载的设备
4.设置执行策略
11.请解释一下如何录制web脚本?
LR通过转发请求,来捕获数据包,来形成脚本
12.为什么要创建参数?如何创建参数?
参数:在环境变化时必须时脚本具有环境变化的能力,就需要参数化(客户端发送到服务器端)
1.确定要参数话的数据
2.设定规则形式来取值
13.什么是关联?请解释一下自动关联和手动关联的不同。
关联:很多构架用sessionid等方法标识不同任务和数据,应用在每次运行时方式发送数据不完全相同,
需要利用的机制对录制的脚本进行处理,这种机制叫做关联(服务端发送到客户端)
14.你如何找出哪里需要关联?请给一些你所在项目的实例。
用户登陆,
客户端发送请求后,服务端验证正确性后,发送给客户端sessionid,是某种规则产生。
15.你在哪里设置自动关联选项?
两地方可以设置
1.设置允许录制时进行自动关联,可以自定义规则
2.录制完成后,vuser-scan action for correlations
16.哪个函数是用来截取虚拟用户脚本中的动态值?(手工关联)
17.你在VUGen中何时选择关闭日志?何时选择标准和扩展日志?
Run-time,log,
当调试脚本时,可以只输出错误日志,当在场景找你管加载脚本时,日志自动变为不可用。
Standard Log Option:选择标准日志时,就会在脚本执行过程中,生成函数的标准日志并且输出信息,供调试用。大型负载测试场景不用启用这个选项。
扩展日志包括警告和其他信息。大型负载测试不要启用该选项。用扩展日志选项,可以指定哪些附加信息需要加到扩展日志中
18.你如何调试LoadRunner脚本?
VuGen有两个选项帮助调试Vuser脚本。Run Step by Step 命令和断点(breakpoints)。Option对话框中的调试设置(Debug setting)项,可以确定在场景执行过程中执行轨迹范围。 调试信息写在output窗口。可以用
lr_set_debug_messag函数在脚本中手工设置信息类型。如果我们只想接收到一小段脚本的调式信息。
19.你在LR中如何编写自定义函数?请给出一些你在以前进行的项目中编写的函数。
在创建用户自定义函数前我们需要和创建DLL(external libary)。把库放在VuGen bin 目录下。一旦加了库,把自定义函数分配做一个参数。该函数应该具有一下格式:__declspec (dllexport) char* <function name>(char*, char*)。
milan
2010-1-22 19:30:10
20. 在运行设置下你能更改那些设置?
21. 你在不同的环境下如何设置迭代?
22. 你如何在负载测试模式下执行功能测试?
23.什么是逐步递增?你如何来设置?
Ramp up这个选项用于逐渐增加服务器的虚拟用户数或负载量。设置一个初始值而且可以在两个迭代之间设置一个值等待。设置Ramp up,请到‘Scenario Scheduling Options’。
24.以线程方式运行的虚拟用户有哪些优点?
VuGen提供了用多线程的便利。这使得在每个生成器上可以跑更多的虚拟用户。如果是以进程的方式跑虚拟用户,为每个用户加载相同的驱动程序到内存中,因此占用了大量的内存。这就限制了在单个生成器上能跑的虚拟用户数。如果按进程运行,给定的所有虚拟用户数(比如100)只是加载一个驱动程序实例到内存里。每个进程共用父驱动程序的内存,因此在每个生成器上可以跑更多的虚拟用户。
25.当你需要在出错时停止执行脚本,你怎么做?
lr_abort函数放弃虚拟用户脚本的执行。说明虚拟用户停止Action的执行,直接执行vuser_end 然后结束执行。在出现错误情况下想手工放弃脚本的执行,这个函数是有用的。用这个函数停止脚本时,Vuser被指定为“Stopped”状态。为了这个函数起作用,开始时候就不能选择Run-Time Settings中的Continue on error选项
。
26.响应时间和吞吐量之间的关系是什么?
吞吐量图显示的是虚拟用户每秒钟从服务器接收到的字节数。当和响应时间比较时,可以发现随着吞吐量的降低,响应时间也降低,同样的,吞吐量的峰值和最大响应时间差不多在同时出现。
27.说明一下如何在LR中配置系统计数器?
通过Web资源监视器,利用这些监控器可以分析web服务器的吞吐量、点击率、每秒http响应数以及每秒下载的页面数。
28. 你如何识别性能瓶颈?
29. 如果web服务器、数据库以及网络都正常,问题会出在哪里?
30. 如何发现web服务器的相关问题?
31. 如何发现数据库的相关问题?
32. 解释所有web录制配置?
33. 解释一下覆盖图和关联图的区别?
34. 你如何设计负载?标准是什么?
35. Vuser_init中包括什么内容?
36. Vuser_end中包括什么内容?
37.什么是think time?think_time有什么用?
思考时间是真实用户在action之间等待的时间。例如:当一个用户从服务器接收到数据时,用户可能需要在响
应之前等待几分钟回顾数据,这种推迟被称为思考时间。
38.标准日志和扩展日志的区别是什么?
Standard Log Option:选择标准日志时,就会在脚本执行过程中,生成函数的标准日志并且输出信息,供调试
用。大型负载测试场景不用启用这个选项。
扩展日志包括警告和其他信息。大型负载测试不要启用该选项。用扩展日志选项,可以指定哪些附加信息需要
加到扩展日志中
39.解释以下函数及他们的不同之处。
Lr_debug_message
lr_debug_message 函数在指定的消息级别
// 处于活动状态时发送一条调试消息。如果指定的
// 消息级别未处于活动状态,则不发出消息。
Lr_output_message
要发送不是特定错误消息的特殊通知,
Lr_error_message
函数将错误消息发送到
// 输出窗口和 Vuser 日志文件
Lrd_stmt lrd_exec 函数执行 lrd_stmt 设置的 SQL 语句。
Lrd_fetch 函数从结果集中提取后续若干行
result set.
函数准备用于
// 通过光标输出字符串(通常为 SQL 语句)
// 的下一结果集。对于 CtLib,它发出 ct_result
// 命令,并且在 ODBC 中它运行用于当前数据库
40.什么是吞吐量?
单位时间内系统处理客户端的请求数。
41.场景设置有哪几种方法?
目标场景,手工场景
42.lr_save_string函数是如何使用的?
Lr_save_sting函数用于把一个字符串保存到参数中。如lr_save_string("abcdefh","paramsstr");执行后将把字符串“abcdefh”保存单参数paramsstr中,然后脚本直接通过“{paramsstr}”来使用参数paramsstr了。
43:lr_eval_string函数是如何使用的?
lr_save_string("abcdefh","paramsstr");
lr_output_message("paramsstr=%s",lr_eval_string("{paramsstr}"));
lr_output_message("%s",lr_eval_string("paramsstr={paramsstr}"));
二个lr_output_message语句执行后都将输出“paramsstr=abcdefh”
44:lr_user_data_point函数是如何使用的?
lr_user_data_point函数用来记录一条自定义的Vuser运行数据,并将其输出到测试结果中,最后通过分析工具Analysis分析数据采集情况。
for (i=0;i<100;i++) {
measure_cpu( );
cpu_val=cpu_check();
lr_user_data_point("cpu", cpu_val);
sleep(1);
}
上面的脚本在Controller中执行完毕之后,就可以在Analysis中查看分析结果了。
45:Unique 与 Sequential区别?
Unique为唯一值方式,为每个Vuser的参数分配一个唯一的值,与Sequentia相比,Unique强调Vuser取值的差异性,即每个Vuser取到的参数值都不一样的。
46:那些情况下要用到关联?
(1)服务器每次对登录用户分配不同的的辨别码Session id
(2)录制了删除记录的过程,但是回放脚本的时候记录已经不存在
(3)录制了业务处理过程比如(订单审核,订单提交)但回放脚本的时候服务器返回表单中不存在对应的记录。
47:Loadrunner中如何输出系统当前的日期时间?
typedef long time_t;
Action()
{
time_t t;
// Get system time and display as number and string
lr_message ("Time in seconds since 1/1/70: %ld\n", time(&t));
lr_message ("Formatted time and date: %s", ctime(&t));
}
48:web_reg_save_param函数的用法?
int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);