Tools

Recording Options

接下来我们挨个看一下里面的东东以及区别

General(通常的)

  Script,不用修改,是脚本的语言,我们一般都是基于 C 语言的

  Protocols:指的是协议,我们选的就是 HTTP 协议

  Recording

    HTML-based script(初学者用这个)——会把请求汇总,脚本会简介一些

    URL-based script(做熟了之后用这个)——每一个 URL 是一个单独请求,请求会有很多,详细

  HTML-based script 内的 Tree 视图只有一个请求:

  脚本如下:

Action()
{ web_url("www.baidu.com",
"URL=http://www.baidu.com/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t6.inf",
"Mode=HTML",
LAST); web_url("百度首页",
"URL=https://www.baidu.com/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t7.inf",
"Mode=HTML",
LAST); web_url("s",
"URL=https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=besttest&rn=&oq=&rsv_pq=c34d645c0000bb68&rsv_t=0711mCQaaJ6hz3rDFU%2F%2B9IPRvD6ZKJcDhsyfKpcU8ELD5ZdB041RJFCccAA&rqlang=cn",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=https://www.baidu.com/",
"Snapshot=t10.inf",
"Mode=HTML",
LAST); web_url("s_2",
"URL=https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=besttest&rn=&oq=&rsv_pq=c34d645c0000bb68&rsv_t=0711mCQaaJ6hz3rDFU%2F%2B9IPRvD6ZKJcDhsyfKpcU8ELD5ZdB041RJFCccAA&rqlang=cn",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=https://www.baidu.com/",
"Snapshot=t11.inf",
"Mode=HTML",
EXTRARES,
"Url=/aladdin/tpl/right_toplist1/refresh.png", "Referer=https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=besttest&rn=&oq=&rsv_pq=c34d645c0000bb68&rsv_t=0711mCQaaJ6hz3rDFU%2F%2B9IPRvD6ZKJcDhsyfKpcU8ELD5ZdB041RJFCccAA&rqlang=cn", ENDITEM,
LAST); return ;
}

HTML-based script

HTML-based script 内部也有可选的:

  这里注意不要选择 web_link 做脚本,要用web_url,也就是选第二个,为什么呢?

    web_link会有个什么过程呢,比如我们在淘宝内点商品的"详情",是显示点击"详情",再 link 到"详情"的 url 地址上。如果 link 的对象是个乱码,大概率找不到

    web_url 是直接点击"详情"url ,链接过去,也就是相当于效率更高,少了中间的跳转过程。

  URL-based scripts 内的 Tree 视图,详细点

  脚本内,图片之类的也会作为一个请求

Action()
{
web_url("www.baidu.com",
"URL=http://www.baidu.com/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t16.inf",
"Mode=HTTP",
LAST); web_url("百度首页",
"URL=https://www.baidu.com/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t17.inf",
"Mode=HTTP",
LAST); web_concurrent_start(NULL); web_url("baidu_jgylogo3.gif",
"URL=https://www.baidu.com/img/baidu_jgylogo3.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=https://www.baidu.com/",
"Snapshot=t18.inf",
LAST); web_url("baidu_jgylogo3.gif_2",
"URL=https://www.baidu.com/img/baidu_jgylogo3.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=https://www.baidu.com/",
"Snapshot=t19.inf",
LAST); web_url("bd_logo1.png",
"URL=https://www.baidu.com/img/bd_logo1.png?qua=high",
"Resource=1",
"RecContentType=image/png",
"Referer=https://www.baidu.com/",
"Snapshot=t20.inf",
LAST); web_url("bd_logo1.png_2",
"URL=https://www.baidu.com/img/bd_logo1.png",
"Resource=1",
"RecContentType=image/png",
"Referer=https://www.baidu.com/",
"Snapshot=t21.inf",
LAST); web_concurrent_end(NULL); web_url("bd_logo1.png_3",
"URL=https://www.baidu.com/img/bd_logo1.png?qua=high",
"Resource=1",
"RecContentType=image/png",
"Referer=https://www.baidu.com/",
"Snapshot=t22.inf",
LAST); web_custom_request("wup.browser.qq.com_5",
"URL=https://wup.browser.qq.com/",
"Method=POST",
"Resource=0",
"RecContentType=application/multipart-formdata",
"Referer=",
"Snapshot=t23.inf",
"Mode=HTTP",
"EncType=",
"BodyBinary=\\x00\\x00\\x01&\\x10\\x02,<LV\\x0Bqbcloudctrlf\tsetStatus}\\x00\\x01\\x00\\xFB\\x08\\x00\\x01\\x06\\x04info\\x18\\x00\\x01\\x06\rQB.StatusInfo\\x1D\\x00\\x01\\x00\\xDB\n\\x06 06af66d5bcf977fdbca23e395e73c51e\\x16 06af66d5bcf977fdbca23e395e73c51e \\x129\\x00\\x02\n\\x01Z:\\x10O)\\x00\\x01\n\\x0C\\x1C,0\\x0BA'\\x11]\\x00\\x0Cf\\x00p\\x01\\x0B\\x0B\n\\x01Z:\\x10O)\\x00\\x01\n\\x0C\\x1C,0\\x0BA'\\x11]\\x00\\x0Cf\\x00p\\x01\\x0B\\x0BF\\x071.0.0.0\\\\f\\x00p\t"
"\\x86\\x056.1.1怈\\xA0\\x12\\xB0\t\\xC6\\x00苕\\x00\\xFC\\x0F\\xFC\\x10\\xF6\\x11\\x00\\xF0\\x12\\xFF\\xF0\\x13\\xFF\\xF0\\x14\\xFF\\xF6\\x15\\x00\\xFC\\x16\\xFC\\x17\\xFC\\x18\\xFC\\x19\\xF6\\x1A\\x00\\xF6\\x1B\\x00\\xFC\\x1C\\xFC\\x1D\\xFC\\x1E\\xFC\\x1F\\xF6 \\x0E6.1.7601.17514\\x0B寴\\x0C\\xA8\\x0C",
LAST); web_url("bd_logo1.png_4",
"URL=https://www.baidu.com/img/bd_logo1.png",
"Resource=1",
"RecContentType=image/png",
"Referer=https://www.baidu.com/",
"Snapshot=t24.inf",
LAST); web_custom_request("wup.browser.qq.com_6",
"URL=https://wup.browser.qq.com/",
"Method=POST",
"Resource=0",
"RecContentType=application/multipart-formdata",
"Referer=",
"Snapshot=t25.inf",
"Mode=HTTP",
"EncType=",
"BodyBinary=\\x00\\x00\\x01&\\x10\\x02,<LV\\x0Bqbcloudctrlf\tsetStatus}\\x00\\x01\\x00\\xFB\\x08\\x00\\x01\\x06\\x04info\\x18\\x00\\x01\\x06\rQB.StatusInfo\\x1D\\x00\\x01\\x00\\xDB\n\\x06 06af66d5bcf977fdbca23e395e73c51e\\x16 06af66d5bcf977fdbca23e395e73c51e \\x129\\x00\\x02\n\\x01Z:\\x10O)\\x00\\x01\n\\x0C\\x1C,0\\x0BA'\\x11]\\x00\\x0Cf\\x00p\\x01\\x0B\\x0B\n\\x01Z:\\x10O)\\x00\\x01\n\\x0C\\x1C,0\\x0BA'\\x11]\\x00\\x0Cf\\x00p\\x01\\x0B\\x0BF\\x071.0.0.0\\\\f\\x00p\t"
"\\x86\\x056.1.1怈\\xA0\\x12\\xB0\t\\xC6\\x00苕\\x00\\xFC\\x0F\\xFC\\x10\\xF6\\x11\\x00\\xF0\\x12\\xFF\\xF0\\x13\\xFF\\xF0\\x14\\xFF\\xF6\\x15\\x00\\xFC\\x16\\xFC\\x17\\xFC\\x18\\xFC\\x19\\xF6\\x1A\\x00\\xF6\\x1B\\x00\\xFC\\x1C\\xFC\\x1D\\xFC\\x1E\\xFC\\x1F\\xF6 \\x0E6.1.7601.17514\\x0B寴\\x0C\\xA8\\x0C",
LAST); lr_think_time(); web_url("s",
"URL=https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=besttest&rn=&oq=&rsv_pq=c98662740000cd91&rsv_t=bdadbVHsYjtsVORU8UBw9%2F95s5P5XfStOtdF%2BBGRtJVUEwNj1gxvd3Jqe1A&rqlang=cn",
"Resource=0",
"RecContentType=text/html",
"Referer=https://www.baidu.com/",
"Snapshot=t26.inf",
"Mode=HTTP",
LAST); web_url("s_2",
"URL=https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=besttest&rn=&oq=&rsv_pq=c98662740000cd91&rsv_t=bdadbVHsYjtsVORU8UBw9%2F95s5P5XfStOtdF%2BBGRtJVUEwNj1gxvd3Jqe1A&rqlang=cn",
"Resource=0",
"RecContentType=text/html",
"Referer=https://www.baidu.com/",
"Snapshot=t27.inf",
"Mode=HTTP",
LAST); web_url("bd_logo1.png_5",
"URL=https://www.baidu.com/img/bd_logo1.png",
"Resource=1",
"RecContentType=image/png",
"Referer=https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=besttest&rn=&oq=&rsv_pq=c98662740000cd91&rsv_t=bdadbVHsYjtsVORU8UBw9%2F95s5P5XfStOtdF%2BBGRtJVUEwNj1gxvd3Jqe1A&rqlang=cn",
"Snapshot=t28.inf",
LAST); return ;
}

URL-based script

  URL-based script,依照默认的无需修改

Data Formate Extension(不需要管的东西)

Network

  Port Mapping(代理录制的设置)

要代理录制的话,首先 Program to record 内要选:wplus_init_websocket.exe,这个是 loadrunner 的代理录制器

代理录制的原理:请求发到代理服务器,代理服务器再把请求发给服务器;服务器返回结果先给代理服务器,代理服务器再给客户端

其次才是设置 Option 内的:

  Capture level:默认选 Socket level and WinNet level data

  但是这里有可能会出现重复请求,因为是选的俩东西,可能会给你显示多次,cut 掉就完了

  Edit Entry

  Target Server:最好填 ip 不要填域名

     Port:是啥写啥,http 默认 80,https 默认 443

  Server ID :协议类型,http/https……

  Service Type:默认 TCP

  Record Type:Proxy,转发即可

  Connection Type:Plain

  Traffic Forwarding:端口跟浏览器内设置的一致

HTTP Properties(HTTP参数)

  Advanced  勾选 UTF-8 ,解决的是脚本的乱码,解决请求乱码,不能解决 Response 乱码

General Options

  回放视图展示,可以帮助定位问题

回放可看到 Runtime-viewer

注释脚本

  ctrl+alt+c  注释脚本

  ctrl+alt+c  取消注释脚本

Review log

  回放的 review log 成功不代表业务成功,这里只是会对状态码进行校验,所以这里要注意一下,那么业务成功与否可以结合回访视图内的状态进行观察,是否成功

  日志内绿色为成功的,

  蓝色为参数的值,关联出的值以及事务

  红色的为错误信息

Runtime-Settings

General

Run Logic

主要用来设置迭代次数,控制每个Action中脚本执行次数。

思考:若Run Logic中配置迭代次数为4,压测时Global Schedule中设置运行时长为5分钟,则迭代次数怎么弄?5分钟就停了吗?

解答问题的关键在于弄明白controller和迭代各自是控制哪里的,脚本运行时的执行顺序。如下是上述思考题的解答思路。

一般跑压测的时候,Runlogic都设置为1,若脚本中本身没有循环,那就只有controller中一层时间循环,时间一结束脚本就停止运行。

Pacing

  设置action迭代的等待时间

Log

  打印出的回放日志级别,在 Review Log 内显示,压测过程中可以把日志关闭

  但是初学者在调试脚本的情况下,最好把日志打开,便于分析问题。并且要知道参数的值以及关联值,要勾选

Think Time

  思考时间一般不加,路指出的脚本内也要删除,思考时间会增大 tps

Miscellaneous

附加说明:

1)lr默认50个线程为1个进程,压测进程进程名是mmdrv

2)进程比线程处理速度快

3)线程模式,节约资源

4)ip欺骗一定是用进程模式,一个进程模拟一个ip

Network

Speed Simulation

  2G时代用,现在基本不用了

Browser

  Browser Simulation

Internet Protocol

Proxy

Preferences

HTTPS证书

  访问 https 协议的接口,会提示 ssl 错误:[GENERAL_MSG_CAT_SSL_ERROR] connect to host ……

  解决方案:

  1、    web_set_sockets_option("SSL_VERSION",
        "TLS");  #把这行写到请求最前(解决 80% 问题)

  并且,在virtual user generator 内,vuser->run-time settings->preferences->advanced里勾上WININET replay instead of Sockets。

  2、安装相关证书

缺少证书的解决方案:

1. 得到web网页的.cer证书
2. 借助openssl转换证书的格式为perm
3. loadrunner配置
 
具体:
 
1. Google浏览器中先得到web网页的.cer证书

这边选择的格式需要记住,后续需要转换。
选择要保存的路径和文件名,完成.cer证书的导出。
 
 
2. openssl 转换证书格式
LR只支持.perm格式的证书,需要借助openssl。

① 下载openssl

官网的openssl貌似是win32的,win64不兼容
http://www.start64.com/index.php/64-bit-software/64bit-security/884-openssl-for-windows-x64-version

有时间也可以自己编译折腾一下(需要安装Perl、VS10、openssl),可以根据以下的教程来做:http://blog.csdn.net/houjixin/article/details/25806151

② 转换
打开cmd,运行openssl

中间打了马赛克的就是转换前后证书路径文件,一定要加上路径。
 
  • 路径不对会如下报错:

  • 转换的命令和cer文件的编译格式有关系,如果不对,会报如下错误:

以下是openssl命令的格式:

3. Loadrunner设置证书

https的端口号就固定的443。

设置完成,进行回放,完成!
 

LoadRunner内部介绍以及常见问题的更多相关文章

  1. 阿里云(四)Linux 实例常用内核网络参数介绍与常见问题处理

    Linux 实例常用内核网络参数介绍与常见问题处理 https://help.aliyun.com/knowledge_detail/41334.html

  2. LoadRunner 使用介绍

    功能介绍 安装流程 LoadRunner是一款测试系统行为和性能的负债测试工具,通过模拟上千万用户实施并发复杂以实时性能监控的方式来确认和查找问题.它是一款付费商业软件,开发商为HP,个人开发者可以使 ...

  3. redis介绍及常见问题总结

    1.redis c语言编写的一个开源软件,使用字典结构存储数据,支持多种类型数据类型 数据类型:字符串,字典,列表,集合,有序集合 2.redis特点 速度快:c语言实现的,所有数据都存储在计算机内存 ...

  4. LoadRunner简单介绍----性能自动化测试工具

    在做性能测试中,我认为技术可以说是武功心法,工具则是一把利剑,有一把好的利剑可以帮助自己更好的完成性能测试工作.在这里简单介绍一下LoadRunner,带大家一起来认识一下这把尚方宝剑. 一.性能测试 ...

  5. EasyUI介绍及常见问题

    JQuery Easy UI介绍 1.JQuery Easy UI环境搭建和调试: https://jingyan.baidu.com/article/67508eb4342f9f9cca1ce426 ...

  6. Linux实例常用内核网络参数介绍与常见问题处理---重要

    文章转载自:https://help.aliyun.com/knowledge_detail/41334.html 本文主要介绍如下几点内容,您可以根据实际需要选择. 查看和修改Linux实例内核参数 ...

  7. CentOS安装Oracle数据库详细介绍及常见问题汇总

    一.安装前准备 1.软件硬件要求 操作系统:CentOS 6.4(32bit)Oracle数据库版本:Oracle 10g(10201_database_linux32.zip)最小内存:1G(检查命 ...

  8. java虚拟机内部介绍

    一.介绍 java 的内存管理和垃圾回收在某种程度是同一个问题来着.对于java程序员来说,在虚拟机自动内存管理机制的帮助下,不在需要为每一个new操作去写配对的delete/free代码,不容易出现 ...

  9. Linux 实例常用内核网络参数介绍与常见问题处理

    本文总结了常见的 Linux 内核参数及相关问题.修改内核参数前,您需要: 从实际需要出发,最好有相关数据的支撑,不建议随意调整内核参数. 了解参数的具体作用,且注意同类型或版本环境的内核参数可能有所 ...

随机推荐

  1. StringUtils详细介绍

    StringUtils详细介绍 public static void TestStr(){ #null 和 "" 操作~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  2. 乘法“*”和点乘“.*”&除法“/”和点除“./”区别

    reference:https://blog.csdn.net/xiaotao_1/article/details/79026406 一,*和.*的联系和区别.  1,在进行数值运行和数值乘矩阵,这两 ...

  3. Centos7搭建软路由

    Xenserver环境: 一:环境准备 内网:192.168.2.100 外网:x.x.x.x 1.1:登陆XenCenter 1.2:进入Xenserver中的Networking选项 1.3:点选 ...

  4. Java基础-变量常量

    变量 内存中的一小块区域,需要变量名来访问 变量的命名: 变量类型 变量名=变量值 例:String stuName= "wangwei"; java中的所有标点符号都是英文的 变 ...

  5. mybatis 异常 There is no getter for property named 'bizId' in 'class java.lang.Long'

    mybatis 异常 There is no getter for property named 'bizId' in 'class java.lang.Long' 当使用mybatis进行传参的时候 ...

  6. 关于makefile的生成原理以及make相关命令的使用

    一.生成configure过程中各文件之间的关系图 二.详细介绍 autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是con ...

  7. Flask源码阅读-第三篇(flask\_compat.py)

    源码 # -*- coding: utf-8 -*-""" flask._compat ~~~~~~~~~~~~~ Some py2/py3 compatibility ...

  8. javascript性能优化之避免重复工作

    javascript最重要也最根本的性能优化标准之一是避免工作,避免工作又包括两点,第一,不做不必要的工作,第二,不做重复的已经完成的工作.第一部分可以通过代码重构完成,第二部分不做重复的工作有时候难 ...

  9. mod_fcgid: HTTP request length 136136 (so far) exceeds MaxRequestLen (131072)

    原来是fastcgi模式下的设置问题,需要在配置文件.htaccess或者直接在apache的配置文件http.conf 中指明,如下: 查看官方说明有这么一句:Default: FcgidMaxRe ...

  10. __new__() 与__init__()的区别

    __new__作用于__init__之前.前者可以决定是否调用后者,或者说可以决定调用那个类的__init__方法. 首先要知道在面向对象编程中,实例化基本遵循创建实例对象,初始化实例对象,最后返回实 ...