LoadRunner实战测试解析:记录一次性能测试过程

news2024/12/21 23:44:29

环境准备

PC: Windows7/XP

LoadRunner11: 与win10及以上版本不兼容

Nmon: 性能监控工具,部署到被测服务器

LoadRunner破解安装

下载地址:https://pan.baidu.com/s/1WJjcFWhrkWW-GgYwXdEniQ
提取码:f4zc

破解方法
  • 正常安装LoadRunner11,安装完成后,不要打开;

  • 用LR8.0中的mlr5lprg.dll、lm70.dll覆盖LR11安装目录下“bin”文件夹中的对应文件;(文件在上面地址下载的文件中)

  • 运行deletelicense.exe;

  • 然后使用老的注册码就可以使用了;

    global-100: AEAMAUIK-YAFEKEKJJKEEA-BCJGI
    web-10000: AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGB

备注: global-100:最高100并发的license,web-10000:最高10000并发的license。

Nmon安装

下载地址:https://sourceforge.net/projects/nmon/

根据自己的系统下载对应的包,解压到服务器即可。

nmon_analyser工具:
https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power+Systems/page/nmon_analyser
下载后直接解压出模板(nmon analyser v51_2.xlsm),用于最后制图。

测试指标准备

交易响应时间

用户从客户端发起一个请求,到客户端接收到从服务器返回结果的响应结束,整体过程所耗费的时间;
响应时间=网络传输时间+服务器处理延迟时间+数据库服务器处理延迟时间,简单交易小于1.5s,一般交易小于3s,复杂交易小于5s。

业务处理能力(TPS)

每秒处理交易笔数
以82原则计算交易峰值负载:
3000人测试人员,每日提交缺陷10个,任务领取5个,任务列表20,执行列表20次,上传图片5次,上传视频5次,下载测试报告5次,导入用例3次。
日交易总量为:300073=219000,
日交易量 = 交易总量合计(219000) * 80% =T T =175200
日交易时间 = 营业时间8小时
20% =1.6
TPS目标计算为: T /1.6 / 3600 = 30.41笔/秒

并发用户

系统需求的最大使用人数

系统处理正确性

在负载情况下,交易错误率。错误率=(失败交易数/交易总数)*100%。

备注: 不同系统对错误率的要求不同,但一般不超出千分之五。稳定性较好的系统,其错误率应该由超时引起,即为超时率。

业务处理稳定性

系统在标准压力(系统的预期日常压力)情况下,能够稳定运行。
备注: 一般来说,对于正常工作日(5X8小时)运行的系统,至少应该能保证系统稳定运行10小时以上。对于7X24运行的系统,至少应该能够保证系统稳定运行48小时以上。

系统资源

CPU<=80%
内存使用率无明显上升趋势
磁盘繁忙率<=80%

测试数据准备

测试数据使用接近真实生产环境的测试数据,多用户与多数据。数据库中要有铺底数据,测试系统在正常大量存量数据下的表现。

场景设计

基准测试场景

以1名虚拟运行100次,迭代循环分别运行每个交易脚本,检验脚本的业务正确性,获取性能基线。

单交易负载测试场景

以多个虚拟用户分别运行每个脚本,设定并发用户数序列,收集系统在不同负载级别下的性能表现,检查系统在整体上应付不同用户负载的可伸展性。检验每个业务在负载下的表现,初步暴露并隔离性能缺陷。

负载均衡与可靠性测试

验证系统(包括应用、网关服务器、文件服务器及数据库服务器)在可靠性,涉及(容错性,失效恢复能力,扩展性等)。
容错性测试方法,依据测试模型发起系统处理能力50%的压力,对单点应用(或数据库)分别进行停服务(正常停止和KILL)、宕机等异常操作后,系统仍可以提供正常业务处理。

混合交易负载测试场景

按业务模型中确认的比例分配虚拟用户,将多个交易脚本组合在一起运行,根据基准及单交易测试结果设定操作延时,设定负载序列,并发用户数为最大,检查系统在当前业务负载模式下的可用服务水平,是否符合需求

稳定性测试场景

按业务模型中确认的比例分配虚拟用户,将多个交易脚本组合在一起运行,根据基准及单交易测试结果设定操作延时,设定负载序列,并发用户数为最大并发数的80%,设置场景运行时间为48小时,检查系统在当前业务负载模式下的可用服务水平,是否符合需求

测试范围选取(业务选取)

对于我们测试性能需要选择哪些交易,我们一般参照以下原则:

已上线系统:

  • 测试交易要覆盖各个渠道;
  • 一般系统:选取日均交易量TOP20、TOP10的交易;
  • 选取生产上曾经出现或者容易出现问题的交易;
  • 选取生产上占用资源较高的交易;
  • 选取业务逻辑复杂的交易;
  • 选取交易路径较长的交易;
  • 选取处理时间较长的交易;
  • 选取特殊需求的交易(测试并发、测试登陆)。

未上线系统:

  • 测试交易覆盖各渠道;

  • 选取预期交易量大的交易;

  • 选取预期交易量增长迅速的交易;

  • 选取占用资源较高的交易;

  • 选取交易路径较长的交易;

  • 选取处理时间长交易;

  • 选取业务逻辑复杂的交易;

  • 选取频繁调用数据库的交易;

编写脚本

LoadRunner三大组件:

  • 脚本编辑器:录制和编写性能测试脚本。
  • 控制台:设置脚本测试场景并进行测试。
  • 结果分析器:分析测试结果

编写脚本

params传参方式:

Action()
{
    //设置变量字节大小
    web_set_max_html_param_len ("24470000");
     
    //根据左右边界截取整个返回值,存在变量result中
    web_reg_save_param("message", //变量名称
        "LB=\"message",           //左边界
        "RB=\"}",                 //右边界
        "Search=Body",
    LAST);
 
    lr_start_transaction("login"); //事务开始
 
    lr_think_time(44);              //等待时间
 
    web_submit_data("signin_2",    //请求名称
        "Action=http://127.0.0.1:8080/user/login", //接口地址
        "Method=POST", //接口请求方式
        "RecContentType=text/html", //返回类型
        "Referer=http://127.0.0.1:8080/user/login", //返回地址
        "Snapshot=t2.inf", //脚本唯一标识
        "Mode=HTML", 
        ITEMDATA, //请求参数
        "Name=data", "Value={\"device\":.0.1\"}", ENDITEM, 
        LAST);

    lr_end_transaction("login",LR_AUTO);//事务结束
 
    //很多时候返回值有中文,需要转码,转码后的值存在了msg中
    lr_convert_string_encoding(lr_eval_string("{message}"),"utf-8",NULL,"msg");
    //对比返回结构
    result = strcmp(lr_eval_string("{msg}"),lr_eval_string("\":\"登录成功!")); 
 
    if(result == 0){
        //打印返回值
       lr_log_message("转换编码后---------%s",lr_eval_string("{msg}")); 
       return 0;
    }
    else{ 
        lr_log_message("%s",lr_eval_string("登录失败"));
        //打印返回值
        lr_log_message("转换编码后---------%s",lr_eval_string("{msg}")); 
        return -1;
    }
        
}

JSON传参方式:

Action()
{
    //设置变量字节大小
    web_set_max_html_param_len ("24470000");
     
    //根据左右边界截取整个返回值,存在变量result中
    web_reg_save_param("message", //变量名称
        "LB=\"message",           //左边界
        "RB=\"}",                 //右边界
        "Search=Body",
    LAST);
 
    lr_start_transaction("login"); //事务开始
 
    lr_think_time(44);              //等待时间

    //添加请求头
    web_add_auto_header(“Content-Type", “application/json",);
 
    web_custom_request("signin_2",    //请求名称
        “URL=http://127.0.0.1:8080/user/login", //接口地址
        "Method=POST", //接口请求方式
        "RecContentType=application/json", //返回类型
        "Referer=http://127.0.0.1:8080/user/login", //返回地址
        "Snapshot=t2.inf", //脚本唯一标识
        "Mode=HTML",
        “Body={\"device\":.0.1\"}", 
        LAST);

    lr_end_transaction("login",LR_AUTO);//事务结束
 
    //很多时候返回值有中文,需要转码,转码后的值存在了msg中
    lr_convert_string_encoding(lr_eval_string("{message}"),"utf-8",NULL,"msg");
    //对比返回结构
    result = strcmp(lr_eval_string("{msg}"),lr_eval_string("\":\"登录成功!")); 
 
    if(result == 0){
        //打印返回值
       lr_log_message("转换编码后---------%s",lr_eval_string("{msg}")); 
       return 0;
    }
    else{ 
        lr_log_message("%s",lr_eval_string("登录失败"));
        //打印返回值
        lr_log_message("转换编码后---------%s",lr_eval_string("{msg}")); 
        return -1;
    }
         
}

设置场景

在LoadRunner控制台,添加需要测试的脚本,设置每个脚本的Vuser数量。
在这里插入图片描述

用户加载方式

Initialize:初始化虚拟用户,同时初始化、间隔初始化、运行前初始化。
Start Vusers:启动虚拟用户,同时启动、间隔启动。
Duration:运行时间,运行至结束、选择固定时间。
Stop Vusers:停止虚拟用户,同时结束、间隔结束。
在这里插入图片描述

Run-Time Setting设置

主要是脚本运行设置,包括:循环方式、请求间隔、日志、等待时间、代理等。
在这里插入图片描述

Run Logic: 运行逻辑,设置每个模块的重复次数。
在这里插入图片描述

Pacing: 每个请求的间隔时间,根据业务需求和实际脚本TPS设置。
在这里插入图片描述

Log: 日志记录,取消日志记录,记录日志会消耗LoadRunner的PC机大量存储。
在这里插入图片描述

Think Time: 脚本中的等待时间,需要忽略脚本中的等待时间,否则无法达到预期的系统压力。
在这里插入图片描述

Miscellaneous: 其他选项,Error Handing,选择错误后继续,防止报错后,测试停止。
在这里插入图片描述

Browser Emulation: 浏览器模拟,取消勾选下载非HTML资源。
在这里插入图片描述

Preferences: 偏好设置,勾选Enable Image and text check,增加检查点。
在这里插入图片描述

服务器监控

LoadRunner自带事务相关监控及结果,服务器监控使用nmon工具进行监控,在压测期间启动nmon进行服务器各项资源监控。

nmon使用方法
./nmon -s10 -c60 -f -m /test/

参数说明

-s10 每 10 秒采集一次数据。
-c60 采集 60 次,即为采集十分钟的数据。
-f 生成的数据文件名中包含文件创建的时间。
-m 生成的数据文件的存放目录。
这样就会生成一个 nmon 文件,并每十秒更新一次,直到十分钟后。
生成的文件名如: _090824_1306.nmon ,“” 是这台主机的主机名。

将生成的文件导入到nmon_analyser工具,生成服务器资源监控结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2183658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Spark的汽车行业大数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

NetApp 混合闪存 FAS 统一存储平台

挑战 简化内部和公有云中的数据管理 各种规模的企业在精简其存储运维方面正面临越来越大的挑战。他们存储和备份的数据量不断增长&#xff0c;而预算却在缩减。他们需要一个既能满足内部环境要求&#xff0c;又能结合公有云战略的解决方案。 解决方案 兼顾容量与性能的存储&…

设计模式-策略模式-200

优点&#xff1a;用来消除 if-else、switch 等多重判断的代码&#xff0c;消除 if-else、switch 多重判断 可以有效应对代码的复杂性。 缺点&#xff1a;会增加类的数量&#xff0c;有的时候没必要为了消除几个if-else而增加很多类&#xff0c;尤其是那些类型又长又臭的 原始代…

scratch棒球运动 2024年9月中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析

目录 scratch棒球运动 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、 推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、…

进程--信号量

信号量是什么 资源的竞争 资源竞争 : 当多个进程同时访问共享资源时&#xff0c;会产生资源竞争&#xff0c;最终最导致数据混乱临界资源 : 不允许同时有多个进程访问的资源&#xff0c;包括硬件资源(CPU、内存、存储器以及其他外围设备)与软件资源(共享代码段、共享数据结构…

SpringCloudEureka实战:搭建EurekaServer

1、依赖引入 <dependencies><!-- 注册中心 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency> </dependencies> <de…

66.对cplusplus网的strtok函数的详细解释(补第56篇的翻译)

56.【C语言】字符函数和字符串函数(strtok函数) 点我跳转 目录 56.【C语言】字符函数和字符串函数(strtok函数) 点我跳转 1.原文 2. 翻译 1.原文 原文链接: cplusplus的介绍 点我跳转 2. 翻译 函数 strtok char * strtok ( char * str, const char * delimiters ); Spli…

如何构建一个生产级的AI平台(3)?

书接上回&#xff0c;继续往下讲,本节会说一下模型的路由和网关 模型的路由和网关 随着应用程序复杂性的增加和涉及的模型越来越多&#xff0c; 出现了两种类型的工具来帮助使用多个模型&#xff1a;路由和网关 1. 路由 应用程序可以使用不同的模型来响应不同类型的查询。 …

平衡二叉搜索树删除的实现

前言 上期讲了平衡二叉搜索树的插入&#xff0c;这一期我们来讲讲删除。同时&#xff0c;二叉搜索树的简介不会出现在本篇博客之中&#xff0c;如有需要可以查看上一篇博客《平衡二叉搜索树插入的实现》。 平衡二叉搜索树插入的实现-CSDN博客文章浏览阅读659次&#xff0c;点赞…

三、I/O控制器

1.主要功能 接受和识别CPU发出的命令(要有控制寄存器) 向CPU报告设备的状态(要有状态寄存器) 数据交换(要有数据寄存器&#xff0c;暂存输入/输出的数据) 地址识别(由I/0逻辑实现) 2.组成 CPU与控制器之间的接口(实现控制器与CPU之间的通信) I/0逻辑(负责识别CPU发出的命…

鸿蒙NEXT开发-ArkUI(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

自定义注解加 AOP 实现服务接口鉴权以及内部认证

注解 何谓注解&#xff1f; 在Java中&#xff0c;注解&#xff08;Annotation&#xff09;是一种特殊的语法&#xff0c;用符号开头&#xff0c;是 Java5 开始引入的新特性&#xff0c;可以看作是一种特殊的注释&#xff0c;主要用于修饰类、方法或者变量&#xff0c;提供某些信…

中英翻译神器!轻松搞定跨文化沟通

大家好&#xff01;今天咱们来聊聊那些你生活中不可或缺的翻译小助手&#xff1b;不论你是个英语小白&#xff0c;还是希望更快地了解外国文献、掌握外媒信息&#xff0c;或者是从事需要大量翻译工作的小伙伴&#xff0c;总有一款翻译工具能帮你省时省力&#xff0c;让你的生活…

DBCP数据库连接池以及在Tomcat中配置JNDI数据源

前言 数据库连接 数据库连接是指在计算机系统中建立起应用程序与数据库之间的连接通道&#xff0c;用于进行数据的读取和写入操作。通过数据库连接&#xff0c;应用程序可以与数据库进行交互&#xff0c;执行各种数据库操作&#xff0c;如查询数据、插入数据、更新数据和删除数…

算法题总结(四)——螺旋矩阵

螺旋矩阵 59、螺旋矩阵二 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输…

2.点位管理开发(续)及设计思路——帝可得后台管理系统

目录 前言一、页面原型二、修改1、页面展示2、新增 3 、总结思路 前言 提示&#xff1a;本篇继续点位管理的改造 一、页面原型 页面展示新增 二、修改 1、页面展示 页面修改&#xff1a;修改标签换行、顺序顺序、地址过长时换行问题&#xff1b; <el-table v-loading…

七,MyBatis-Plus 扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用)

七&#xff0c;MyBatis-Plus 扩展功能&#xff1a;乐观锁&#xff0c;代码生成器&#xff0c;执行SQL分析打印&#xff08;实操详细使用&#xff09; 文章目录 七&#xff0c;MyBatis-Plus 扩展功能&#xff1a;乐观锁&#xff0c;代码生成器&#xff0c;执行SQL分析打印&#…

愿祖国富强!肌肉水凝胶的奥秘,自协调与光驱动,运动模式大揭秘

大家好&#xff0c;在这个国庆佳节&#xff0c;我们一同感受科技的魅力。今天来了解一种特殊的肌肉样水凝胶&#xff0c;它通过自协调形状变化和摩擦调节&#xff0c;能在光的引导下实现多样运动。这一成果为软机器人发展带来新契机——《Light-steered locomotion of muscle-l…

基于ScriptableObject设计游戏数据表

前言 本篇文章是针对之前对于ScriptableObject概念讲解的实际应用之一&#xff0c;在游戏开发中&#xff0c;我们可以使用该类来设计编辑器时的可读写数据表或者运行时的只读数据表。本文将针对运行时的只读数据表的应用进行探索&#xff0c;并且结合自定义的本地持久化存储方式…

一级建造师备考攻略及一建各科老师推荐(各科四大金刚)

吐血整理:真正的实战派一建名师推荐! 考过的同学一定都知道推荐的老师YYDS! 一级建造师各科老师推荐: 《法规》名师:王欣、王竹梅、陈印、关涛 其他老师:房超、蔡恒、刘丹、武海峰、陈洁、安国庆、桂林 《管理》名师:宿吉南、龙炎飞、李向国、朱俊文 其他老师:缴广才、陈晨…