(之前校招过程中整理的~ 欢迎各位大神补充~ 有不对的欢迎批评指正~~~)
1.什么是负载测试?什么是性能测试?
负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试。(eg:访问一个页面的响应时间规定不超过1秒,负载测试就是测试在响应时间为1秒时,系统所能承受的最大并发访问用户的数量。)
压力测试通常是在高负载情况下来对系统的稳定性进行测试,更有效地发现系统稳定性的隐患和系统在负载峰值的条件下功能隐患等。
性能测试:指在一定的约束条件下(指定的软件、硬件网络环境等),确定系统所能承受的最大负载压力。
2.性能测试包含了哪些测试?
负载测试、压力测试、大数据量测试、疲劳强度测试等等。
3.简述性能测试的步骤。
①分析产品结构,明确性能测试的需求,包括并发、极限、配置和指标等方面的性能要求,必要时基于Load测试的相同策略需同时考虑稳定性测试的需求。
②分析应用场景和用户数据,细分用户行为和相关的数据流,确定测试点或测试接口,列示系统接口的可能瓶颈,一般是先主干接口再支线接口,并完成初步的测试用例设计。
③依据性能测试需求和确定的测试点进行测试组网设计,并明确不同组网方案的重要程度或优先级作为取舍评估的依据,必要时在前期产品设计中提出支持性能测试的可测试设计方案和对测试工具的需求。
④完成性能测试用例设计、分类选择和依据用户行为分析设计测试规程,并准备好测试用例将要用到的测试数据。
⑤确定采用的测试工具。
⑥进行初验测试,以主干接口的可用性为主,根据测试结果分析性能瓶颈,通过迭代保证基本的指标等测试的环境。
⑦迭代进行全面的性能测试,完成计划中的性能测试用例的执行。
⑧完成性能测试皮评估报告。
4.简述使用Loadrunner的步骤。
制定性能测试计划 —— 开发测试脚本 —— 设计测试场景 —— 监控测试场景 —— 分析测试结果。
1. 用户确定需要进行性能测试的业务和交易,通过用户操作和Vuser Generator的录制功能来记录并生产虚拟用户脚本。
2. 手工修改虚拟用户脚本,确定脚本能够回放成功。
3. 在Controller中对场景进行配置后,就可以启动测试了。在测试过程中,Controller控制Load Generator对被测试系统的加压方式和行为。
4. Controller同时负责搜集被测系统各个环节的性能数据。各个Load Generator会记录最终用户响应时间和脚本执行的日志。
5. 压力运行结束以后,Load Generator将数据传到Controller中,由Controller对测试结果进行汇总。
6. 测试人员借助数据分析工具Analysis对性能数据进行分析,进而确定瓶颈和调优方法。
7. 针对性地对系统进行调优,重复进行压力测试,确定性能是否有所提高。
LoadRunner部件:
Virtual User Generator: 捕捉终端用户事务处理过程,自动生成可以被Virtual user识别的性能测试脚本;
Controller :组织,驱动,管理和监视负载测试。
Load Generators: 执行vitual user创建负载;
Analysis: 帮助用户观看、剖析比较性能测试结果;
Launcher: 提供访问LoadRunner所有部件的唯一接口。
5.什么时候可以开始执行性能测试?
功能测试通过(一般需要执行性能测试的系统,都是用户量比较大、业务使用比较频繁、比较重要的功能模块)。
6.Loadrunner有哪些部分组成?
主要有三部分组成。
脚本生成器(Virtual User Generator):录制调试脚本用的。
场景控制器(
Controller
):用脚本生成场景、执行场景,并在场景执行时进行监控。
结果分析器(
Analysis
):场景结束后将监控的指标整理成图表展现给用户。
Virtual User Generator来录制脚本。
Controller
可以模拟多用户并发下回放脚本。
7.什么是集合点?设置集合点有什么意义?Loadrunner中设置集合点的函数是哪个?
在性能测试过程中,需要模拟大量用户在同一时刻,访问系统并同时操作某一任务,可以通过配置集合点来实现,多个用户同时进行某操作;
集合点可以在服务器上创建密集的用户负载,使LoadRunner能够测试服务器在负载状态下的性能。
设置集合点函数:lr_rendezvous("Meeting"); // Meeting是集合点名称
8.什么是场景?场景的重要性有哪些?如何设置场景?
场景用来模拟用户实际业务操作。
Loadrunner 中场景有手工场景和面向目标的场景。
设置场景:选择场景类型、设置运行时设置、模拟用户数、加减压方式、持续时间、配置负载生成。
①选择场景中需要的脚本。
②选择为目标场景,还是手工场景。
③设置用户数、设置产生负载的设备。
④设置执行策略。
9.Loadrunner如何录制Web脚本?
LR通过转发请求,来捕获数据包,来形成脚本
解释:1.基于浏览器的应用程序推荐使用HTML-based Script, 脚本中采用
HTML页面的形式来表示,这种方式的Script脚本容易维护,容易理解,使用该选项中的advance中的第一个选项,如果单纯的HTML方式,是不允许使用关联的。
2.不是基于浏览器的应用程序推荐使用URL-based Script,脚本中的表示采用基于URL 的方式,不是很好阅读。
解释:1.是否记录录制过程中的ThinkTime,如果记录,还可以设置最大值,一般我不记录这个值。
2.通知Vugen去重新设置每个action之间的Http context,缺省是需要的。
3.完整记录录制过程的log,
4.保存一个本地的snapshot,可以加速显示
5.把html的title放到web_reg_find函数里面
6.支持的字符集标准
7.Http header的录制,我们采用缺省即可,不需要用web_add_header去录制非标准的header信息。
对录制的content的内容进行filter,不作为resource处理的。
解释:这个就是我前面提到的关联,系统已经预先设置好了一些常见的关联rules。
10. 为什么要创建参数?如何创建参数?
参数:在环境变化时必须使脚本具有环境变化的能力,就需要参数化(客户端发送到服务器端)
①.确定要参数话的数据
②.设定规则形式来取值
11.什么是关联?自动关联和手动关联?
关联:很多构架用sessionid等方法标识不同任务和数据,应用在每次运行时方式发送数据不完全相同,需要利用的机制对录制的脚本进行处理,这种机制叫做关联(服务端发送到客户端)
一般的关联步骤:
1.从服务器返回的数据中选取需要进行关联的数据。
2.将该数据存入脚本的一个参数中
3.将脚本中需要使用该数据的地方用参数来替换。
Tip:对于web来说,一般会用一个hidden 的 field存放。所以在可以服务器返回的记录查找该字段值。
关联的目的:
1.简化或优化代码
例如,如果依次执行一系列的相关查询,您的代码可能会变得很长。为了减少代码的大小,可以嵌套查询,但这样会失去准确性,而代码会变得复杂而难以理解。通过关联语句,不需要嵌套就可以链接查询。
2.用于动态数据
许多应用程序和网站当前日期和时间标识会话。如果尝试重播脚本,该操作将会失败,应为当前时间与录制时间不同(LR自带的WEB演示程序)。通过关联数据可以保存动态数据,并在整个方案过程中使用这些数据。
关联的两种方法:
方法一:自动关联
1.Tools -Recording Options。
2.设置完成后录制登陆 - 退出过程。
3.利用LR自带的自动关联进行关联。
方法二:手动关联
1:录制测试脚本,录制二遍
2:使用WinDiff工具找出两次脚本的不同,判断是否需要进行关联(Tools下的 Compare with Vuser进行2个相同操作的脚本对比)
3:确定插入关联的位置
4:在VIEW TREE中使用web_reg_save_param函数手动建立关联(web_reg_save_param()函数主要根据需要做关联的动态数据前面和后面的固定字符串来识别、提取动态数据,所以在做关联时,需要找出动态数据的左、右边界字符串)
5:将脚本中有用到关联的数据,用参数代替
6:验证关联的正确性
常见的需要关联的场景
1.登录操作。
2.先查后修改,先差后删除。
3.并发控制:防止2个用户同时修改或同时删除一条记录。(用户登陆;客户端发送请求后,服务端验证正确性后,发送给客户端sessionid,是某种规则产生。)