一.相关概念:
1.性能测试,是指在一定的软件、硬件及网络条件下,通过自动化的测试工具模拟 多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试,从而发现 系统的性能瓶颈。2.并发用户,一般分为2种情况:
一种是绝对并发,即所有的用户在同一时刻做同一件事情或者操作,这种操作一般指做同一类型的业务。
另外一种并发是相对并发。这种并发与前一种并发的区别是,尽管多个用户对系统发出了请求或者进行了操作,但是这些请求或者操作可以是相同的,也可以是 不同的。
3.点击率
:单位时间用户向WEB服务器提交的HTTP请求数(TPS)。
4.事务(Transaction):从客户端发起请求开始,到客户端接收到从服务器端返回的响应结束的过程。事务可能由一个请求,或一系列请求组成。
5.事务响应时间指的是从客户端发起请求开始,到客户端接收到从服务器端返回的响应结束,这个过程所耗费的时间,响应时间的单位一般为“秒”或者“毫秒。
6.吞吐量(TPS)就是指软件系统在每单位时间内能处理多少个事务/请求的能力。
7.集合点指可以配置多个 Vuser 同时执行操作的位置。
8.思考时间指请求间的停顿时间。(一般在虚拟用户脚本中用函数lr_think_time()来模拟用户处理过程).
9.90%的响应时间,是指在一次完整的测试过程中,所有事务的请求时间,按从小到 大顺序排序,90%的事物所消耗的时间范围。
10.资源利用率指的是对不同系统资源(内存、CPU、网络、I/O的利用率等 Resource utilization)的使用程度.
二.性能测试策略
1.负载测试指在一定的软件、硬件及网络条件下,通过运行一种或多种业务在不 同虚拟用户数量情况下,测试系统的性能指标是否在用户的要求范围内,用于 确定系统所能承受的最大有效用户数以及不同用户数下的系统响应时间及服务 器的资源利用率。
2.压力测试
在一定的软件、硬件及网络条件下,通过模拟大量的虚拟用户向服务 器产生负载,使服务器的资源处于极限状态下并长时间连续运行,以测试服务 器在高负载情况下是否能够稳定工作。
3.配置测试:在不同的软件、硬件和网络条件下,通过运行一种或多种业务在一 定的虚拟用户数量情况下,获得不同配置的性能指标,用于选择最佳的设备及 参数配置。
4.
并发测试:通过模拟多个用户并发访问一个应用或一个应用的某个功能,同一 个存储过程,或接口以及其他并发操作,测试程序是否支持多用户访问,是否 存在死锁,线程同步的问题。
5.疲劳测试:软件可靠性是软件系统在规定的时间内以及规定的环境条件下,完成 规定功能的能力。
二.性能测试工具架构:
LoadRunner提供了4大主要模块,分别是:
Virtual User Generator( 脚本生成器) —— 用于录制性能测试脚本 Vugen
LoadRunner Controller (压力调度和监控系统) —— 用于创建、运行和监控场景
LoadRunner Analysis (结果分析工具) —— 用于分析性能测试结果
Load Generator (负载生成器) —— 生产虚拟用户,并向服务器发起请求
三.LoadRunner测试流程:
1.规划测试
确定测试要求,如并发用户数量、典型业务场景流 程;测试计划;设计用例;……
2.创建Vuser脚本
使用Virtual User Generator录制、编辑和完善测试脚本。
3.定义场景
使用LoadRunner Controller 设置测试场景。
4.运行场景
使用LoadRunner Controller 驱动、管理并监控场景的运行。
5.分析结果
使用LoadRunner Analysis 生成报告和图表并评估性能。
四.loadrunner的具体操作流程:
1.录制脚本;
2.脚本保存以及回放;
3.手工关联(用web_reg_save_param函数手动建立关联);
4.参数化;
5.插入事务,集合点,检查点;
(脚本优化的六个要素:1、是否做参数化
2、是否做关联
3、是否添加事务
4.是否添加检查点
5、是否添加集合点
6、调整思考时间 )
6.场景设置:
(1)脚本添加和run time setting设置;
(2)设置虚拟用户数和运行环境;
(3)集合点策略;
(4)LG连接和SLA的设置;
(5)windows资源的监控;
(6)场景运行和常见问题分析;
7.结果分析:
(1)测试结果需要关注的图表
1、Running Vuser
2、Hits per Second
3、Throughput
4、Average Transaction Response Time
5、Total Transactions per Second
6、Transaction Response Time(Percentile)
7、Http Responses per Second
(2)测试结果需要合并的图表:
1、Runner Vuser & Hits per Second & HttP Respone per Second
随着用户数的变化而变化,且两者的曲率大概一致。
2、Runner Vuser & Total Transactions per Second
随着用户数的变化而变化。
3、Throughput是网络吞吐量,如果测试是在生产环境上进行,要查看吞吐量是不是接近生产环境上的带宽,如果达到生产环境上带宽的80%以上,则表明带宽存在瓶颈。
8.报告的生成:
Analysis可以生成HTML或Microsoft Word两种方式的测试报告:
(1)生成HTML报告:
1.点击菜单Reports--HTML Report。
2.为HTML报告选择文件名和保存路径,点击【保存】按钮。
Analysis将创建报告,并将其显示在web浏览器中。
(2)生成Microsoft Word报告:
1.点击菜单Reports--New Report打开右图所示的窗口。
2.设置General、Format、Conten选项卡内容后,点击Generate按钮,即可生成Microsoft Word形式的测试报告。
性能测试怎么做的?
1.做性能需求分析,挑选了用户使用最频繁的功能来做性能测试,比如:登陆,搜索,提交订单,确定性能指标,比如: 事务通过率为100%,90%的事务响应时间不超过5秒,并发用户为1000人,CPU和内存的使用率为70%以下(*)
2.性能测试计划,明确测试时间(通常在功能稳定后,如第一轮测试后进行)和测试环境和测试工具的选择
3.编写性能测试用例
4.搭建性能测试环境,准备好性能测试数据(*)
5.通过性能测试用例,编写性能测试脚本
6.性能测试脚本进行调优,设置检查点、参数化、关联、集合点、事务,调整思考时间,删除冗余的脚本等(*)
7.设计性能测试场景,使用nmon工具监控服务器,运行测试场景(*)
8.分析性能测试结果,如果有问题(性能瓶颈),收集相关的日志和图片提单给开发修改(*)
9.开发修改好后,回归性能测试(*)
10.编写性能测试报告(*)
怎样分析性能测试结果?
1.首先查看结果概况,查看有没有大面积失败的事务,有没有大量Error的个数,虚拟用户数有没有正常加载,点击率和HTTP响应曲率是否一致,如果都正常,表明测试结果可信,可以继续分析其他性能指标,比如,确认响应时间,事务通过率,CPU等指标是否满足需求;如果测试结果不可信,要分析异常的原因,修改后重新测试。
2、如果某指标不符合要求,比如某事务的平均响应时间不达标,则在平均事务响应图上选中该事务,右键,选中”Web Page Diagnostics for xxxx”,进入该事务的网页细分图,选中”Time To First Buffer(Over Time)”,查看事务所消耗的时间主要在网路传输还是服务器.
简述使用Loadrunner的步骤
新建脚本 -- 选择协议 — 脚本录制设置 — 录制脚本—调试脚本 — 场景设计和运行 — 结果分析。
如何确定系统能够承载的最大用户数?
参考答案:通过负载测试,不断增加用户数,随着用户数的增加,各项性能指标也会相应产生变化,当出现了性能拐点,比如,当用户数达到某个数量级时,响应时间突然增长,那么这个拐点处对应的用户数就是系统能承载的最大用户数。
你们系统哪些地方(哪些功能)做了性能测试?
参考答案:我们选用了用户使用最频繁的功能来做性能测试,比如:登陆,搜索,提交订单。
你们性能测试做的是前台还是后台?
B/S的项目:我们这个项目做的是后台服务器的性能,浏览器端不做性能测试;
APP的项目:手机端和服务器端的性能都做,手机端我们是时用monkey工具(或者 AppPerformace)来做,服务器端,我们是用Jmeter来做的
如果性能测试脚本出现错误,会从哪些方面分析呢?
参考答案:通过检查回放日志,定位出错的位置,然后做响应的修改。回放脚本时脚本出错,一般有两种原因,第一、语法出错,比如,不小心多打了个符合;第二、关联的左右边界没设置对,导致关联失败;如果在运行场景的时候,提示脚本出错,一般就是参数化列表最后一行没有回车,或者,回车大于一个,或者,参数值不够用。
如何实现200用户的并发?
参考答案:先在脚本对应的请求前面添加集合点,再在controller中将集合点的释放策略设置为等到200人到达集合点的时候在释放。
什么情况下要做关联,关联是怎么做的?
当脚本需要使用服务器返回来的值,就用关联。
(手工关联的步骤--可以这样回答:录制两个脚本,对比找到需要关联的值,在返回该值的函数前插入关联函数,用关联函数名替换脚本中的所有动态值)
性能测试指标有哪些?
1.事物响应时间
2.CPU和内存的使用率
3.网络
4.吞吐量
5.并发用户(绝对并发和相对并发)
Loadrunner设置进程和线程的区别:
进程(process):
进程是操作系统分配可调度系统内存资源,CPU时间碎片等资源的基本单位,为正在运行的应用程序提供运行环境。
线程(Thread)
线程是程序内部有并发性的顺序代码流,是CPU调度资源的最小单元。
(进程是包含线程的)
1.按进程运行Vuser:
controller将使用驱动程序mdrv运行Vuser.如果按照进程方式运行每个Vuser,则对于每个Vuser实例都将启动一个mdrv进程。如果是多个Vuser,则会出现多个进程。多个进程会占用大量内存和其他系统资源,这就限制了负载生成器运行胡Vuser的数量。
2.按线程运行Vuser以及设置10个Vuser,其只会调用一个驱动mdrv,而每个vuser都按线程运行,这些线程Vuser将共享父进程的内存段。这样就节省了大量内存空间,从而可以在负载生成器上运行更多的Vuser.