分享

【竺】性能测试笔记3——总

 飞絮轻 2021-05-12

一、性能测试基础

    1、定义:基于协议模拟用户发出请求(业务的模拟),对服务器形成一定的负载,来测试服务器的性能指标是否满足要求。

    2、关注点:时间性能、空间性能

    3、与界面无关 

二、性能技术简介

     1、用户行为模拟:低成本具有可行性,模拟大量用户操作的一种技术,借助这种技术将被测试系统在测试阶段运行起来,一检测系统工作是否正常

            1>不同用户使用不同的数据

            2>多用户并发操作

            3>用户请求间的依赖关系及请求间的延时时间

    2、性能指标监控:通过上面技术模拟用户的行为,在系统运行中需要监控各项性能指标,并分析指标的正确性

            1>请求响应时间监控

            2>服务器处理能力监控

            3>服务器资源利用率监控

    3、性能调优:通过指标的监控发现系统存在的性能缺陷,利用分析工具,定位修正性能问题

三、性能测试分类

    1、性能测试(狭义)

            通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能要求,在特定的运行条件下验证系统的能力状态。这种方法是对系统性能已经有了解的前提,并对需求有明确的目标,并在已经确定的环境下进行的。

    2、负载测试

            通过在被测系统上不断加压,直到性能指标达到极限,例如“响应时间”超过预定指标或某种资源已经达到饱和状态。

    3、压力测试(强度测试)

            让系统在一定饱和状态下,例如cpu、内存在饱和使用情况下,系统能够处理的会话能力,以及系统是否会出现错误,即让系统处在很大强度的压力之下,看系统是否稳定,哪里会出问题。

    4、并发测试

            通过模拟用户并发访问,测试多用户并发访问同一个应用、同一个模块或者数据记录时,是否存在死锁或其他性能问题。即,多个用户同时(并发)对一个模块或操作进行加压。

    5、配置测试

            关注点是微调,通过对软硬件的不断调整,找出他们的最佳状态,使系统达到一个最强的状态。

    6、可靠性测试(稳定性测试)

            在系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。

四、性能指标

    1、举例:    

        并发用户数:同时进店剪发顾客数

        响应时间:从进店到完成剪头的总时间(等待+执行时间)

        单位时间事务数tps:Transaction per second,单位时间内完成事务的数量,事务:剪头

    2、响应时间

        =网络传输时间+服务器处理时间,不包含前端页面渲染时间,到浏览器收到请求后响应数据截止

    3、tps

        tps:每秒处理的事务数

        hps:每秒发送的请求数

        吞吐量:描述的是服务器的处理能力

    4、资源利用率

        在一定的负载情况下,服务器资源占用的情况

        CPU利用率:不允许超过70%-80%,队列长度

        内存利用率:80%以下,页交换频率(物理内存和虚拟内存交换频繁程度)

        带宽利用率:100Mbps = 12.5 Mb/s

                             1Byte = 8 bit

         如果资源利用率太小,造成资源浪费

    5、用户数

        并发用户数:在同一时间向服务器发送请求的用户数量

         与每秒的并发请求数不同,一定要确认需求的目的是并发用户数还是并发请求数。

五、性能测试流程

        需求分析-》测试计划-》测试方案-》用例设计-》测试执行-》定位分析问题

        1、需求分析

              测试对象:常用的、核心的、重要的、数据量、并发量大的业务

              确定性能指标:2/8原则,每小时的平均负载*4

                 测试场景:

                                单一场景:登录、注册、搜索、添加购物车、下单、支付

                             混合场景:用户使用场景、系统使用场景

            2、测试计划:

                                  测试目标

                                  测试人员组织

                                  压测进度安排

                                  压力机:配置、要求、数量

                                  风险

            3、测试方案:

                                    测试工具:loadrunner、jmeter

                                    测试环境:数据库、服务器、架构升级、有条件的情况下                                 尽量和生产环境一致

                                    测试策略:单一场景、混合场景

                                    监控工具:

                                            Linux:nmon、rpc、jvisuaIVm、Spotlight

                                            Windows:Spotlight、perfmon.exe(windows                                    自带,命令行输入)

            4、用例设计:

                                测试脚本形式:基于脚本的用例

                                场景设计:基于场景的用例

            5、测试执行:

                                脚本编写

                                场景监控执行

                                运行场景

                                监控场景

                                测试报告

               6、定位分析问题

                                     后端:代码、软件(数据库、应用服务器)、硬件

                                     前端

                                     网络

六、工具介绍Loadrunner

              1、安装

                             操作系统:xp、win7/win2003/win2008

                                               windows :家庭版— 无管理员权限

                                                                 专业版

                                                                 旗舰版

                                               支持浏览器:IE 8/9

                            安装

              2、组成

                    脚本生成器VuGen    

                    压力调度和监控系统Controller

                    结果分析工具Analysis 

            3、使用预览

                    1>用户行为录制:选择协议、录制用户交互、编辑脚本

                    2>生成场景负载:设计场景、监控

                    3>获得性能测试数据:定位性能瓶颈、生成测试报告

            4、VuGen脚本录制流程:

                录制脚本-》修改脚本-》创建场景-》执行场景-》配置服务器端监控环境-》添加服务器地址和计时器-》监控结果数据统计显示

                            1、新建脚本选择网络协议:

                                         1、 如何选择协议:

                                                                  1、自带协议探测工具Protocol Advisor

                                                                  2、询问开发

                                                                  3、根据以往项目经验

                                         2、单协议脚本

                                         3、多协议脚本

                                         4、最近采用的

                            2、录制前准备:

                                        1、选择被测系统的类型:浏览器、非浏览器

                                        2、录制时采用的浏览器:IE,如果是64位,一定要选择program                                               files(x86)下的ie浏览器

                                        3、被测服务器地址

                                        4、其他选项默认

                            3、开始录制

                                        1、general-Recording-html-based script将与打开一个网页                                                (HTML)有关的所有请求“封装”为一个步骤,还可分为接                                                  口有关的步骤

                                        2、url-based script 将每一个不同url的请求封装为步骤

                            4、停止录制

                            5、脚本查看模式

首先启用自带的web类型网站

loadrunner-samples-web-start webserver-右下角绿色图标

4、脚本的组成

    init、action、end三部分

    init、end只能存在一个,只会执行一次,而action可分成多个部分,运行多次

5、查看脚本生成结果

    View-test results

6、录制脚本选项

    Start Record-options-Recording-html based(将与打开网页HTML有关的所有请求封装为一个步骤)/url based(将每一个不同的url的请求封装为步骤

    -html based-user action页面形式的数据/url接口形式的数据

7、解决乱码

     Start Record-options-Recording-Advanced-support charset-utf-8

8、Controller创建场景

     Tools-》Create Controller Scenario-》一般使用手动场景Manual scenario-》Numeber of vuser设置虚拟用户数量-》Load generator压力机,localhost本机跑的-》

Group Name脚本名称-》Result 结果存放文件夹

    Controller界面-》Design-》Run-》Start Scenario运行完-》Results-》

    Analyze Results进入第三个分析组件

9、脚本回放设置Vuser-Run time setting

1>设置action迭代次数

Run logic 设置脚本迭代次数,设置的是action,可在replay log里查看运行次数

2>设置迭代时间 

Pacing设置脚本运行时间间隔,1、固定等待时间fixing,2、随机时间random 3、第一次迭代开始和第二次迭代开始时间间隔

3>启用日志

log 勾选启用日志

4>Think time思考时间  

5>Preference-Check启用图片和文本检查     

6>Miscellaneous-以进程/线程方式运行虚拟用户                 

进程方式:独享一块内存,比较稳定,大约占用4M以上

                 内存资源浪费,可模拟的虚拟用户少

线程方式:线程之间共享一块捏u才能,可以模拟的虚拟用户多,大约占用1M~2M,

                  线程之间容易发生资源竞争,出现线程阻塞,不稳定

10、常用函数

LoadRunner自带函数

与编程语言相关的函数

自己编写的函数

    web_url直接请求一个网页,

    web_link通过单击文本链接请求打开一个网页

    web_image通过单击图片链接请求打开一个网页

    web_submit_form代表在请求打开一个网页时需要一定的数据上传到服务器

1>web_url()打开网页

        Action()

        {

                //web_url函数

                web_url("open","URL=http://192.168.152.130:8080/webtours/",LAST);

                 return 0;

        }

        2、运行

        3、检查结果,View-Test Results-Action Summary-Url open

2>web_submit_data();

        作用:模拟浏览器发出get/post请求

        步骤名称:访问首页

        请求地址:http://localhost:1080/WebTours/

        通过抓包工具知道是get/post方式、data数据

        Insert-》New Step列出所有函数-》web submit data函数-》选择Post/Get-》Action-》切换到Data-》添加在fiddler抓到的数据

3>web_custom_request()

        作用:模拟浏览器发出HTTP支持的任何方式的请求

11、变量

1>init、action、end中定义的变量是局部变量

gloabal.h中定义的变量是全局变量

全局变量用于:整个过程中固定不变的,例如URL地址、KEY、其他

2>loadrunner中变量声名必须放在函数的最前面

3>eg打印

int a = 10;

lr_output_message("%d",a);    //打印

return 0;

4>eg释放,避免内存泄露

定义在global.h里,全局变量

char *p = (char*)malloc(1024*sizeof(char)); //堆栈划了内存

free(p);

5>添加注释

选中代码---》Edit---》Advanced---》Comment Selection(ctrl+alt+c)

6>引入脚本

File--->Add File to Script--->aaa.h

#include  "aaa.h"    声明头文件

7>F1,帮助文档

8>获取主机姓名

char * my_host;

my_host = lr_get_host_name();

lr_output_message("%s",my_host);

9>思考时间

lr_think_time();

10>

lr_whoami()

11>

lr_get_attrib_string

12>快速定位到回放日志的地方

代码右键---》Go to replay log

13>F10,调试,一步步执行

14>F9,断点,

15>编码转换

lr_convert_string_encoding()

12、与编程语言相关的函数

1>strcpy与strcat

 

2>strcmp函数 

比较两个字符串

3>atoi函数解析

4>sprinf   拼接字符串

5>time

6>文件操作

13、与协议相关的函数

1>web_link与web_url(get)

2>web_submit_form与web_submit_data(POST)、web_submit_form中的hidden自动发送

3>web_custom_request(OPTION、POST、GET各种方法,什么请求都能做)

4>web_add_header

5>web_get_int_property

12、错误机制分析

1>错误继续执行,容易一竿子打死

Run-time Settings--->Miscellaneous--->勾选Contine on error

2>lr_continue_on_error函数

13>日志函数解析

Ir_output_message(包括行号,会网络传播给controller)、lr_log_message(写在本地)、lr_message、lr_error_message区别

日志函数使用时注意:

1>在日志调试的时候使用,真正运行的时候尽量少用

2>在对时间敏感操作中间尽量不要加日志函数(IO是影响响应时间的)

14、参数化

1>脚本开发遇到的问题

被业务场景所迫:所有用户都输入相同的数据,不能体现出真实的业务环境

被系统体系所迫:存在缓存,不能体现出真正的性能

被系统业务约束所迫:有些系统禁止一个用户多次登录系统,也就严重到无法测试的地步

参数话机制就可以解决上述问题

1>设置参数化

想要参数化的对象-》右键-》Replace with a parameter填写参数名称和类型

工具栏设置参数值

注意:参数化文件中的测试数据最后一行应保留一个空行

2>读取参数化

lr_output_message("获取到的值为:%s",lr_eval_string("{username}"));

3>设置迭代次数

Vuser-》Run Time Settings-》Run Logic

4>运行Run

5>查看Replaylog回放log

log里的每次迭代结尾后的输出结果

6>查看测试结果

View-》Test Results

12、设置参数列表详解

1>First data设置从哪行开始读

2>两个参数可以存在一张表里,不同列

3>参数化列表:File(文档)、Date(日期)

13、参数列表九种策略取值(取值顺序+何时更新)

1>A1+B1-》sequential+each iteration-》每次迭代顺序取值,只有发生迭代才会取值

2>A1+B2-》sequential+each occurrence-》每次取值的时候顺序取值,与迭代无关

3>A1+B3-》sequential+once-》顺序取值,一旦取到值后不再发生不变化,永远拿的一个值

4>A2+B1-》Random+each iteration-》每次迭代随机取值,只有发生迭代才会随机取值

5>A2+B2-》Random+each occurrence-》每次输出参数的值,值发生改变(值是随机读取,与迭代无关)

6>A2+B3-》Random+once-》一旦。。。。,就永远拿的一个值

7>A3+B1-》Unique+each iteration-》每次迭代唯一取值,当超过值的范围时

When out of values:

        Abort User停止运行

        Continue in a cyclic manner循环取值

        Continue with last value取最后一个值

Allocale Vuser in the Controller:

        Automatically allocate block size:块的大小,数据个数除以虚拟用户数,eg10个数据,5个用户,块的大小为2,

超过值,优先个数满足:数据数/迭代次数

 Continue in a cyclic manner循环取值,循环取的最后一个数

Continue with last value循环取值,循环取的最后一个数

8>A3+B2-》Unique+each occurrence-》每次取唯一值,每次出现时,或者每次输出参数值时

与块的大小、迭代次数有关

9>A3+B3-》Unique+Once-》唯一取值,只取一次,不再更新

14、从数据库中获取参数

Parameter List---》Query Wizard

15、事务

1>什么是事务

2>添加事务:lr_start_transaction、lr_end_transaction解析

Insert Start Transaction图标(Ctrl+T)

Insert End Transaction图标(Ctrl+D)

3>事务的4个状态

Pass、Fail、Auto、Stop

4>子事务的概念

Ir_start_sub_transaction

5>对事务的探讨

通过事务获得了响应时间,就够了吗

6>注意

事务中不要插入日志函数

不要插入集合点函数

尽量不要插入思考时间

Insert-》Start Transaction-》代码-》End Transaction-》运行-》查看log里该事务所耗的时间

一般录制流程:

Vuser界面:录制脚本-》Tools-Create Controller Scenario-设置虚拟用户数-创建负载-》

Controller-Design界面:设置虚拟用户数-设置迭代间隔时长-迭代周期

Controller-Run界面:Window Resources----Add Measurements---Add Monitored Server Machines----输入localhost本机的监控----OK----得到计数器列表-----OK

Start Scenario

Results-Analysis Results

Reports-New Reports

16、基础设置

1>如果ie没有启动-打开ie浏览器-设置-高级-启用第三方浏览器扩展

                                                         -安全-是否启用保护模式

2>如果脚本没有生成---》协议是否对    

                                ---》检查录制选项---》Recording Options---》Port Mapping-换换捕获等级

3>Tools---》General Options---》Display---》Show run-time viewer during rej   开启、关闭回放界面,一般关闭

4>Run-Time Settings---》Log-Extended log---》Parameter substitution开启日志

5>Recording Options---》Advanced---》Support charset---》UTF-8修改编码,录制就不会有乱码了

6>Recording Option--->Advanced---》Recording schemes---》None-Resources--->zip根据数据类型分离录制

7>Run-time Settings--->Brower Emulation--->Simulate brower cache---Cache URLs requiring content---》是否缓存

8>Run-time Settings--->Download Filters--->Exclude addresses in list--->Add屏蔽url地址

9>Run-time Settings---》Miscellaneous->Continuue on error错误继续执行

10>lr_output_message("this is action");//输出

11>lr_output_message("参数的取值是:%s",lr_eval_string("{output}"));

参数准换成变量lr_eval_string()

变量转换成参数lr_save_sring()

12>快速创建登录名称和密码的方式

excel下拉一百条记录-》使用UltraEdit改格式-》切成列块模式-》将空白列替换成逗号-》把列模式关掉-》列头加标题,uesrname,password-》复制粘贴到loadrunner

17、关联

1>关联的定义

从服务器的响应中保存节点,左边界,右边界

2>参数化和关联的区别的阐述

3>什么时候需要关联

    服务器返回的动态变化且对业务有影响的

4>web_reg_save_param

5>web_reg_save_param_ex

6>保存xml响应的参数

web_reg_save_param_xpath

18、集合点

1>集合点概念

只能在action里添加,也不要添加到事务里

2>生成集合点

insert-》Rendezvous

19、检查点

1>web_reg_find()

web_find("Text Check","What=Welcome",LAST);//非注册检查点,要打开Preferences-->勾选Enable Image and  text check

2>尽量使用注册检查点

检查的字符串尽量不要是中文,避免不必要的麻烦

运行时设置中的检查点选项对注册函数无效

通过检查点得到的警示:一定要在业务层面上判断是否成功,不能单单从协议层面判断

20、脚本调试的步骤

1>脚本开发原则:简单、正确、高效

2>脚本编译通过,不报错(Vugen)

3>单用户循环一次,不报错(Vugen)

4>单用户循环多次,不报错(Vugen)

5>多用户循环一次,不报错(Controller)

6>多用户循环多次,不报错(Controller)

7>对关键性的业务添加业务正确性判断

21、Control场景

1>Schedule by:

Scenario:可以设置虚拟用户个数

Group:指定了虚拟用户个数

2>Run Mode:

Real-world schedule:模拟真实世界,适用于长时间稳定性测试,实现高峰低谷波动

Basic schedule:让系统承受大压力,一般使用

3>运行时设置

3.1、与VuGen中的不同,各自有各自的,不要认为是同一个

3.2、Think time默认设置的不同

3.3、系统日志,真正运行的时候就设置成仅仅当错误时才发送,提高效率

3.4、事务的设置,尽量不设置事务

3.5、带宽的设置,一般不设置带宽,除非有要求

3.6、如何结束

            3.6.1本次迭代完

            3.6.2本轮action完

            3.6.3立即结束

3.7、Miscellaneous

            以进程方运行     1个虚拟用户 1个mmdrv.exe进程

            以线程方式运行  50个虚拟用户 1个mmdrv.exe进程

22、负载生成器(Controller)

1>负载生成器连接

A:Start-》Load Generators创建连接

B:检查连接的电脑,开启LoadRunnner Agent Services后台服务,检查任务管理器里-magentservice.exe服务,是否生成负载生成器

2>负载生成器要保证自己不要成为瓶颈

负载机器的软硬件配置

脚本的复杂程度

23、IP Spoofer欺骗(Controller)

1>为什么需要做

1>打开ip欺骗

    Scenario--->Enable IP Spoofer

2>使用ip

    Load Generators---添加ip,该ip下绑定多个ip

3>Loadrunner --->打开IP Wizard--->添加ip

24、集合点(Vuser)

实现更严格的并发,当达到一定条件时,释放

Ir_rendezvous("myRende");

25、自定义数据采集

lr_user_data_point()

24、Analyze

1>Graphy--->Add New Item--->Add New Graph--->Average Trans平均事务不准确,关掉重新打开

2>拐点

3>右键-->Merge Graphs---

24、并发用户数的计算

1>平均的并发用户数:C=nL/T

2>并发用户数峰值:C' 约等于C+3*根号C

n:login session数量

L:login session平均长度

T:时间长度

3>二八定律

22、性能测试方案

来源:Loadrunner软件性能测试视频教程(57节课全)掌握好就拿高薪!_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多