性能测试三部曲之工具篇(上)

        在上篇,我们了解了性能测试相关的一些基础内容,那么这篇开始,我们来看看性能测试的经典代表工具LoadRunner。本篇内容分为脚本生成,脚本增强处理以及场景运行三个大模块。对于工具的安装过程跟我们安装其他软件一样,所以在此不再赘述。
        在正式讲解工具使用之前,还请大家先了解LoadRunner组成及工作原理,这个对今后的工作以及解决相关问题是相当有帮助的。

1.LoadRunner组成及工作原理

LoadRunner组成图

从图中可以看见,LoadRunner由四个核心组件构成:
Vugen:Virtual User Generator,虚拟用户生成器是用来实现录制、生成、编辑、调试脚本的组件。在LoadRunner中,脚本就是虚拟用户。实际上,脚本可以看作是虚拟用户要完成的行为的模板。在Vugen中,只能模拟一个虚拟用户执行脚本。
Controller:是LR中,用来实现场景的设计、执行、集成监控、实时监控等功能的一个组件。在Controller中,可以模拟多个虚拟用户执行脚本。
Analysis:是用来收集、整理测试结果,然后提供简单的概要报告和图表,并且提供了一定的分析选项来帮助我们实现性能测试结果的分析。
Load Generator:负载生成器,该组件是用来实现脚本到虚拟用户(线程、进程)的转化过程。

LoadRunner工作图

2.LoadRunner的脚本生成

        LoadRunner脚本通常可以由两种方式生成:一种是利用工具本身的录制功能,但是这个功能对于现在的电脑不是非常友好。主要是浏览器的兼容问题,一般我们在Win7+IE9的环境进行录制,而Win10就比较麻烦了。另一种方法就是利用抓包工具,抓包然后手写脚本。这个对于一些有经验的测试人员来说可能来的更加直接。但是对新手不是特别友好,所以本文介绍了第三种生成办法--利用第三方工具进行录制,然后再生成脚本。

2.1LoadRunner自身录制

        由于工具本身录制过程较简单,所以通过几个图来帮助大家快速掌握。

第一步:选择项目的协议
第二步:填写项目地址及设定录制选项


第三步:选择录制方法

关于各种录制模式的对比:
HTML模式:又叫页面模式,主请求模式,在该模式下LoadRunner只会对主请求生成对应的请求函数。
代码特征:Mode=HTML
优点:生成的脚本简洁。
缺点:可能会遗漏某些ajax的请求。
URL模式:又叫http模式,请求模式,在该模式下LoadRunner会对所有的http请求都生成对应的请求函数。
代码特征:Mode=HTTP
优点:不会遗漏任何使用http协议的请求,包括ajax的请求。
缺点:生成的脚本臃肿。
在HTML模式下两种方法对比:
HTML下基于用户行为模式:生成的脚本中请求之间是存在上下文依赖的。该模式下LoadRunner的作用类似于浏览器,请求之间是强制建立依赖,即从第二个请求开始,所有的请求都是依赖于第一个请求的响应结果。
优点:对于业务系统中,本身就存在的上下依赖,不需要做额外的处理。
缺点:脚本的耦合度高,可编辑性差,对于非上下依赖,还是需要做关联处理。
HTML下基于URLs模式:生成的脚本中,请求是通过url地址来实现的,在脚本层面,请求之间不会存在任何的依赖性。
优点:脚本的可编辑性高。
缺点:不明显。


第四步:录制被测项目


第五步:脚本自动生成

2.2抓包手写

        通过前面录制脚本,我们思考下,为什么LoadRunner能够帮我们自动生成脚本呢?这其中的原理是什么?
其实,LoadRunner在生成脚本的过程中扮演的就是一个代理服务器的角色,它记录的从我们发出的请求到服务器响应的整个过程。然后再把这些信息(数据包)转化成它自己的脚本的过程。那么既然由于种种原因,LoadRunner不能扮演这个角色了,我们当然可以手动来帮助它完成,于是就有了后面两种办法。

        我们先来讲抓包手写。首先打开抓包工具:

第一步:打开被测网站与抓包工具开始操作


第二步:获取抓包信息


第三步:编写脚本

        手动编写脚本,需要一定的C语言基础(LoadRunner自带的类C语言),这里给讲解以下LoadRunner常用的几个请求函数。
web_custom_request
语法格式:
int web_custom_request(const char *RequestName,<Listof Attriutes>,[EXTRARS,<List of Resource Attriutes>,]LAST);
返回值:成功返回时LR_PASS(0),失败返回时LR_FAIL(1)。
参数说明:
RequestName:步骤名称
List of Attriutes:
URL:被测地址(要加载的页面地址)
Method:页面提交方式,POST或者GET
TargetFrame:包含当前链接或者资源的frame名称
EncType:编码类型
RecContentType:响应消息的内容类型
Referer:被当前页引用的页面
Body:请求消息体
Raw Body:以指向数据的指针形式表示的请求消息体
ResourceByteLimit:资源大小限制
Snapshot:以.inf为扩展名的快照名称
Mode:录制模式
EXTRARS:分隔符,表明下面的是一个资源属性表
List of Resource Attriutes:资源属性表
LAST:属性列表结束标识符
说明:
该函数创建一个HTTP的客户请求,它支持HTTP的所有请求方法。默认情况下,只有当其他web请求函数不能被解释时,LR才会利用此函数创建请求,且该函数通常会与其他函数配合使用,比如:先利用web_add_header函数添加请求头,然后再利用该函数发送请求。以及一般开发webservice脚本的时候,也使用的比较多。

web_submit_data
函数格式:
int web_submit_data(const char *StepName,<List of Attriutes>,ITEMDATA,<List of data>,[EXTRARS,<List of Resource Attriutes>,]LAST);
返回值:成功返回时LR_PASS(0),失败返回时LR_FAIL(1)。
说明:该函数处理无状态或者上下文无关的表达的请求,生成表达GET或者POST的请求,这些请求与Form自动生成的请求是一样的。不管是URL_based录制模式还是HTML_based录制,只有在选择URLs only选项后,才会使用该函数。

web_submit_form
函数格式:int web_submit_form(const char *StepName,<List of Attriutes>,<List of Hidden Fields>,ITEMDATA,<List of data Fileds>,[EXTRARS,<List of Resource Attriutes>,]LAST);
返回值:成功返回时LR_PASS(0),失败返回时LR_FAIL(1)。

        当我们写过几个脚本后就会发现,很多时候我们在实际工作中处理脚本的时候,只需要改动请求地址和下面参数就行了,之前写过的脚本都是可以重复利用的,然后我们处理起来就像使用Jmeter差不多,效率也会很高。

2.3“万能录制大法”

        前面我们说过,既然可以使用第三方工具来抓包,那么我们能不能有种办法可以让LoadRunner把我们抓的包自动识别成它的格式,然后自己生成脚本呢?其实,办法当然有,还是利用了LoadRunner的脚本生成原理来解决。下面,我们来看具体是怎么实现的吧。

        首先,我们要利用第三方工具--Wireshark来帮忙。Wireshark是个很强大的工具,测试人员常用它来做抓包和网络分析。


Wireshark界面图

Wireshark的基本使用流程
第一步:选择网卡
第二步:开始操作被测系统
第三步:过滤
第四步:分析数据包(在这里,我们选择保存封包,导入LoadRunner)
附:Wireshark的过滤规则
过滤源ip、目的ip

在wireshark的过滤规则框Filter中输入过滤条件。如查找目的地址为192.168.101.8的包,ip.dst==192.168.101.8;查找源地址为ip.src==1.1.1.1
端口过滤
如过滤80端口,在Filter中输入,tcp.port==80,这条规则是把源端口和目的端口为80的都过滤出来。使用tcp.dstport==80只过滤目的端口为80的,tcp.srcport==80只过滤源端口为80的包
协议过滤
比较简单,直接在Filter框中直接输入协议名即可。
http模式过滤
如过滤get包,http.request.method=="GET",过滤post包,http.request.method=="POST"。
连接符and的使用
过滤两种条件时,使用and连接,如过滤ip为192.168.101.8并且为http协议的,ip.src==192.168.101.8 and http。

”万能录制方法“操作步骤
第一步:跟之前抓包手写无差异,打开抓包工具然后操作被测系统;
第二步:操作完成后,停止抓包,然后按照过滤规则过滤,一般我们使用过滤源IP+目的IP的组合方式即可。
第三步:将过滤完成后的封包保存,注意:保存为*.pcap格式,只有这个格式才能够被LoadRunner11识别。
第四步:导入LoadRunner,生成脚本。注意:LoadRunner11要使用该功能,需要打4个补丁包,将LoadRunner11升级到11.04版本。按补丁顺序一个个来,不可跳跃。

选择协议


准备解析生成脚本


选项填写

        点击完成后,脚本自动生成。是不是很方便?
        本篇主要讲解了脚本的生成,那么下篇我们详细介绍脚本增强技术,请关注《性能测试三部曲之工具篇(中)》。

©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容