返回首页 | 金赞娱乐场

合作共赢、快速高效、优质的网站建设提供商

更多精品源码-尽在织梦模板-www.moke8.com

网站开发Loadrunner手动编写包括检查点、相关等元素的脚本实例

时间:2017-12-14 编辑:admin

一、:

本文合适初学者,包括许多细节,也作为自己的备忘。有不精确之处,欢迎纠正。

二、预备:

1、以虚拟机中的Linux体系作为效劳器,敞开bugfree效劳。

2、以fiddler作为抓包东西,辅佐脚本研制。

3、脚本流程:bugfree登录--创立bug--处理bug。

三、完结进程: 3.1 脚本主体

创立空白脚本后,结构如下图,压力测验中一般我们将登录独自放在vuser_init中。这儿为了整个流程更明晰,脚本悉数写在Action中。

值得注意的是,我们设置脚本迭代次数,只对Action部分收效,而vuser_init和vuser_end只会运转一次。

开端写脚本前,我们对fiddler先进行一些过滤设置。

在浏览器进行bugfree登录操作,fiddler抓取到成果,比较有用的信息是URL以及Heasdfsders项的恳求类型、参数列表。

如果参数中以及后文的检查点文本中含有中文,需求设置loasdfsdrunner支撑UTF-8编码格局,将含有UTF-8的项改为“Yes”:

在已知恳求类型为POST的前提下,履行Insert--new step--Submit Dasdfstasdfs。如果是GET恳求,则需求刺进Url函数。

写入Generasdfsl信息:

写入参数信息:

点击断定后生成脚本。创立bug和处理bug与此相似,生成脚本如下:

 web_submit_dasdfstasdfs("创立缺点", 
 "Action=http://192.168.232.132/bugfree/info/edit?type=bug asdfsction=opened product_id=1", 
 "Method=POST", 
 "TasdfsrgetFrasdfsme=", 
 "Referer=", 
 "Mode=HTTP", 
 ITEMDATA, 
 "Nasdfsme=BugInfoView[deleted_file_id]", "Vasdfslue=", ENDITEM, 
 "Nasdfsme=BugInfoView[lock_version]", "Vasdfslue=", ENDITEM, 
 "Nasdfsme=BugInfoView[product_id]", "Vasdfslue=1", ENDITEM, 
 "Nasdfsme=isPasdfsgeDirty", "Vasdfslue=1", ENDITEM, 
 "Nasdfsme=templasdfsteTitle", "Vasdfslue=", ENDITEM, 
 "Nasdfsme=BugInfoView[title]", "Vasdfslue=mutest20170927{title}", ENDITEM, 
 "Nasdfsme=lasdfsyer1_module", "Vasdfslue=0", ENDITEM, 
 "Nasdfsme=BugInfoView[productmodule_id]", "Vasdfslue=0", ENDITEM, 
 "Nasdfsme=BugInfoView[asdfsssign_to_nasdfsme]", "Vasdfslue=体系管理员", ENDITEM, 
 "Nasdfsme=BugInfoView[masdfsil_to]", "Vasdfslue=", ENDITEM, 
 "Nasdfsme=BugInfoView[severity]", "Vasdfslue=1", ENDITEM, 
 "Nasdfsme=BugInfoView[priority]", "Vasdfslue=1", ENDITEM, 
 "Nasdfsme=Custom[BugType]", "Vasdfslue=代码过错", ENDITEM, 
 "Nasdfsme=Custom[HowFound]", "Vasdfslue=代码检查", ENDITEM, 
 "Nasdfsme=Custom[BugOS]", "Vasdfslue=Linux", ENDITEM, 
 "Nasdfsme=Custom[BugBrowser]", "Vasdfslue=Chrome", ENDITEM, 
 "Nasdfsme=Custom[OpenedBuild]", "Vasdfslue=Mu", ENDITEM, 
 "Nasdfsme=Custom[ResolvedBuild]", "Vasdfslue=", ENDITEM, 
 "Nasdfsme=Custom[BugSubStasdfstus]", "Vasdfslue=", ENDITEM, 
 "Nasdfsme=Custom[BugMasdfschine]", "Vasdfslue=", ENDITEM, 
 "Nasdfsme=Custom[BugKeyword]", "Vasdfslue=", ENDITEM, 
 "Nasdfsme=BugInfoView[relasdfsted_bug]", "Vasdfslue=", ENDITEM, 
 "Nasdfsme=BugInfoView[relasdfsted_casdfsse]", "Vasdfslue=", ENDITEM, 
 "Nasdfsme=BugInfoView[relasdfsted_result]", "Vasdfslue=", ENDITEM, 
 "Nasdfsme=asdfsttasdfschment_file[]", "Vasdfslue=", ENDITEM, 
 "Nasdfsme=BugInfoView[asdfsction_note]", "Vasdfslue=", ENDITEM, 
 "Nasdfsme=BugInfoView[repeasdfst_step]", "Vasdfslue= br / ", ENDITEM, 
 LAST);
 web_submit_dasdfstasdfs("处理缺点",
 "Action=http://192.168.232.132/bugfree/bug/1/resolved",
 "Method=POST",
 "TasdfsrgetFrasdfsme=",
 "Referer=",
 "Mode=HTTP",
 ITEMDATA,
 "Nasdfsme=BugInfoView[deleted_file_id]", "Vasdfslue=", ENDITEM,
 "Nasdfsme=BugInfoView[lock_version]", "Vasdfslue=1", ENDITEM,
 "Nasdfsme=BugInfoView[product_id]", "Vasdfslue=1", ENDITEM,
 "Nasdfsme=isPasdfsgeDirty", "Vasdfslue=1", ENDITEM,
 "Nasdfsme=templasdfsteTitle", "Vasdfslue=", ENDITEM,
 "Nasdfsme=BugInfoView[title]", "Vasdfslue=mutest20170927{title}", ENDITEM,
 "Nasdfsme=lasdfsyer1_module", "Vasdfslue=0", ENDITEM,
 "Nasdfsme=BugInfoView[productmodule_id]", "Vasdfslue=0", ENDITEM,
 "Nasdfsme=BugInfoView[asdfsssign_to_nasdfsme]", "Vasdfslue=体系管理员", ENDITEM,
 "Nasdfsme=BugInfoView[masdfsil_to]", "Vasdfslue=", ENDITEM,
 "Nasdfsme=BugInfoView[severity]", "Vasdfslue=1", ENDITEM,
 "Nasdfsme=BugInfoView[priority]", "Vasdfslue=1", ENDITEM,
 "Nasdfsme=Custom[BugType]", "Vasdfslue=代码过错", ENDITEM,
 "Nasdfsme=Custom[HowFound]", "Vasdfslue=代码检查", ENDITEM,
 "Nasdfsme=Custom[BugOS]", "Vasdfslue=悉数", ENDITEM,
 "Nasdfsme=Custom[BugBrowser]", "Vasdfslue=Chrome", ENDITEM,
 "Nasdfsme=Custom[OpenedBuild]", "Vasdfslue=Mu", ENDITEM,
 "Nasdfsme=Custom[ResolvedBuild]", "Vasdfslue=Mu", ENDITEM,
 "Nasdfsme=BugInfoView[solution]", "Vasdfslue=By Design", ENDITEM,
 "Nasdfsme=BugInfoView[duplicasdfste_id]", "Vasdfslue=", ENDITEM,
 "Nasdfsme=Custom[BugSubStasdfstus]", "Vasdfslue=Hold", ENDITEM,
 "Nasdfsme=Custom[BugMasdfschine]", "Vasdfslue=", ENDITEM,
 "Nasdfsme=Custom[BugKeyword]", "Vasdfslue=", ENDITEM,
 "Nasdfsme=BugInfoView[relasdfsted_bug]", "Vasdfslue=", ENDITEM,
 "Nasdfsme=BugInfoView[relasdfsted_casdfsse]", "Vasdfslue=", ENDITEM,
 "Nasdfsme=BugInfoView[relasdfsted_result]", "Vasdfslue=", ENDITEM,
 "Nasdfsme=asdfsttasdfschment_file[]", "Vasdfslue=", ENDITEM,
 "Nasdfsme=BugInfoView[asdfsction_note]", "Vasdfslue=", ENDITEM,
 "Nasdfsme=BugInfoView[repeasdfst_step]", "Vasdfslue= br / ", ENDITEM, 
 LAST);

至此,脚本主体完结。但这样的脚本很显然是不符合压测要求的:

1、如果对登录独自压测,由于登录是查询型恳求,与修正型恳求不同,我们在数据库中无从校验其成功率。所以设置登录检查点函数是必要的。

2、如果登录用户名不允许多IP一起登录,那么对用户名进行参数化是必要的。参数化的实质是应对数据库对参数值进行的唯一性校验。

3、调查脚本,处理Bug进程,其Bug ID是固定的,那么履行压测时,我们就一向在对同一个Bug进行处理缺点操作,这显然是不合理的。我们需求将Bug ID和上一步创立Bug的Bug ID相关起来。这样,才干确保每次处理缺点都是针对上一步刚刚创立的处于未处理状况的Bug。

接下来,对脚本进行改善:

3.2 参数化

参数化设置的意图是应对数据库对参数值的唯一性校验。其设置方法如下:

3.1.1 参数化设置

翻开Pasdfsrasdfsmeter List,点击左下角的【New】,创立新的参数。

生成之后,右键选中待替换内容,挑选【Use Existing Pasdfsrasdfsmeter】:

或许,也能够直接选中待参数化内容,右键后挑选【Replasdfsce with asdfs Pasdfsrasdfsmeter】,一次性进行创立参数和替换。

3.2.2 Mysql数据库数据获取

设置参数化之后,面对的问题就是很多数据从何而来。运用存储进程在数据库中创立很多数据,然后参数化文件读取这些数据,是个不错的挑选。

Next

Next

Next

Next

Next

Next

Next,写入sql句子

数据已导入:

参数类型即Pasdfsrasdfsmeter type还可挑选其他类型,常用的如Dasdfste/Time,Rondom Nunmber等,遇到实践场景后弥补。

3.3 检查点设置

以登录为例,只需我们提交了恳求,即便不能成功登录,效劳器回来给我们的状况码依然是200,而loasdfsdrunner判别恳求是否成功的根据就是回来的状况码,所以在未加检查点之前,我们无从判别登录事务是否成功。当然,非查询类恳求,能够去数据库进行校验。

因而我们需求参加检查点来进行事务是否真实成功的校验。检查点的思维是,在恳求呼应内容中,查找特别字段,例如登录恳求呼应中的“欢迎”、“退出”等等字段。下面以Bug登录为例,进行检查点详细解析。

首要,我们去剖析登录恳求中,检查点需求设置的文本内容。

HTTP/1.1 302 Found
Dasdfste: Sun, 10 Dec 2017 10:07:38 GMT
Server: Apasdfsche/2.4.7 (Unix) OpenSSL/1.0.1f PHP/5.5.9 mod_perl/2.0.8-dev Perl/v5.16.3
X-Powered-By: PHP/5.5.9
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Casdfsche-Control: no-store, no-casdfsche, must-revasdfslidasdfste, post-check=0, pre-check=0
Prasdfsgmasdfs: no-casdfsche
Set-Cookie: PHPSESSID=asdfs3dtasdfs30c68sb9l7fc9t4asdfsncp03; pasdfsth=/
Set-Cookie: lasdfsnguasdfsge=deleted; expires=Thu, 01-Jasdfsn-1970 00:00:01 GMT; Masdfsx-Age=0; pasdfsth=/
Set-Cookie: lasdfsnguasdfsge=bece46be16477e1asdfsb82f9d40asdfs53074cb0asdfs54e105s%3A5%3A%11zh_cn%11%3B; expires=Tue, 09-Jasdfsn-2018 10:07:39 GMT; Masdfsx-Age=2592000; pasdfsth=/
Locasdfstion: http://192.168.232.128/bugfree/index.php
Content-Length: 0
Keep-Alive: timeout=5, masdfsx=100
Connection: Keep-Alive
Content-Type: text/html

在呼应内容中,形似没有特别字段。只要“302”值得注意,这个状况码标明恳求发作重定向,目标已暂时移动。那么,也只要登录成功之后,才干进行跳转主页的重定向。为了验证该定论,我做一次失利登录。第2次失利登录与第一次成功登录比较,缺少了后续跳转主页等恳求。

再调查其呼应内容,状况码是200。至此,我们能够选定登录检查点函数的检查文本为“302”。

HTTP/1.1 200 OK
Dasdfste: Sun, 10 Dec 2017 22:07:03 GMT
Server: Apasdfsche/2.4.7 (Unix) OpenSSL/1.0.1f PHP/5.5.9 mod_perl/2.0.8-dev Perl/v5.16.3
X-Powered-By: PHP/5.5.9
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Casdfsche-Control: no-store, no-casdfsche, must-revasdfslidasdfste, post-check=0, pre-check=0
Prasdfsgmasdfs: no-casdfsche
Content-Length: 4039
Keep-Alive: timeout=5, masdfsx=100
Connection: Keep-Alive
Content-Type: text/html

履行Insert--new step--web_reg_find,reg标明注册型函数,这类函数作用于其下文第一个函数。

生成脚本如下:

web_reg_find("Fasdfsil=NotFound",
 "Seasdfsrch=All",
 "SasdfsveCount=count",
 "Text=302",
 LAST);
 web_submit_dasdfstasdfs("login",
 "Action=http://192.168.232.128/bugfree/index.php/site/login",
 "Method=POST",
 "TasdfsrgetFrasdfsme=",
 "Referer=",
 "Mode=HTTP",
 ITEMDATA,
 "Nasdfsme=LoginForm[usernasdfsme]", "Vasdfslue=asdfsdmin", ENDITEM, 
 "Nasdfsme=LoginForm[pasdfsssword]", "Vasdfslue=123456", ENDITEM, 
 "Nasdfsme=LoginForm[lasdfsnguasdfsge]", "Vasdfslue=zh_cn", ENDITEM,
 "Nasdfsme=LoginForm[rememberMe]", "Vasdfslue=0", ENDITEM, 
 LAST);

运转脚本:

Action.c(10): Registered web_reg_find successful for "Text=302" (count=2) [MsgId: MMSG-26364]
Action.c(10): web_submit_dasdfstasdfs("login") wasdfss successful, 76514 body bytes, 1898 heasdfsder bytes, 14 chunking overheasdfsd bytes [MsgId: MMSG-26385]

回到脚本中,修正暗码为“1234567”,运转脚本进行反向验证:

Action.c(10): Error -26366: "Text=302" not found for web_reg_find [MsgId: MERR-26366]
Action.c(10): web_submit_dasdfstasdfs("login") highest severity level wasdfss "ERROR", 4041 body bytes, 465 heasdfsder bytes [MsgId: MMSG-26388]

至此,检查点设置成功。检查点特别文本内容的断定需求一点点自己的剖析。

3.3 相关设置

一、为什么要设置相关,常见场景有以下两个:

1、登录恳求中,含有formhasdfssh、sessionid等特别参数,这些参数的值每次恳求将发作更新,而脚本中如果将其固定,下次恳求依然提交前次运用的参数值,恳求将会失利。

2、创立缺点生成Bug ID,处理缺点恳求依靠该Bug ID,恳求参数中Bug ID的值需求跟着创立缺点生成的Bug ID同步更新。

下面以Bugfree处理缺点为例,叙述怎么设置相关:

首要,在【创立缺点】恳求的呼应中查找“57730”,该ID是我新创立的。

截取其间一段包括“57730”的字段:

locasdfstion='/bugfree/index.php/bug/57730'; /

履行Insert--new step--web_reg_sasdfsve_pasdfsrasdfsm,其间BugID是参数名,具有必定含义即可,后续恳求需求引证该参数名。

生成脚本如下:

web_reg_sasdfsve_pasdfsrasdfsm("BugID",
 "LB=locasdfstion='/bugfree/index.php/bug/",
 "RB='; /",
 "Seasdfsrch=All",
 LAST);

为了检查相关参数捕捉状况,敞开扩展日志:

运转脚本,调查Replasdfsy Log,相关参数捕捉成功:

Action.c(23): Registering web_reg_sasdfsve_pasdfsrasdfsm wasdfss successful [MsgId: MMSG-26390]
Action.c(29): Notify: Sasdfsving Pasdfsrasdfsmeter "BugID = 57732".

相关参数捕捉完毕,接下来很简单,传递捕获的参数到后续恳求中,将详细值替换成引证值即可:

再次运转脚本:

Action.c(23): Registering web_reg_sasdfsve_pasdfsrasdfsm wasdfss successful [MsgId: MMSG-26390]
Action.c(29): Notify: Sasdfsving Pasdfsrasdfsmeter "BugID = 57734".
Action.c(29): web_submit_dasdfstasdfs("创立缺点") wasdfss successful, 28553 body bytes, 412 heasdfsder bytes, 25 chunking overheasdfsd bytes [MsgId: MMSG-26385]
Action.c(65): Notify: Pasdfsrasdfsmeter Substitution: pasdfsrasdfsmeter "BugID" = "57734"
Action.c(65): web_submit_dasdfstasdfs("处理缺点") wasdfss successful, 30589 body bytes, 412 heasdfsder bytes, 25 chunking overheasdfsd bytes [MsgId: MMSG-26385]

相关根本使用到此为止,后续弥补杂乱的相关使用,例如相关数组。

3.4 脚本调试

脚本调试应遵从分步调试准则,能够选用【断点设置】和【单步盯梢】。更简洁的挑选就是运用注释,比方,先将【创立缺点】、【处理缺点】注释,独自铺开【登录】,对其进行调试,由上至下顺次进行。

经过View--Test result可检查Html格局视图,便于排查脚本中的过错。例如下图,标明UTF-8未设置,导致中文参数值不被辨认:


浏览:

网站建设

流程

    网站建设流程