Loadrunner技术交流脚本的录制主讲人颢.docx
《Loadrunner技术交流脚本的录制主讲人颢.docx》由会员分享,可在线阅读,更多相关《Loadrunner技术交流脚本的录制主讲人颢.docx(17页珍藏版)》请在冰豆网上搜索。
Loadrunner技术交流脚本的录制主讲人颢
颢子(1111)(22854705)13:
57:
41其实在进行测试脚本录制之前还有很多的工作要做首先要先确定典型交易选取典型交易的原则主要有以下几种方法1经常使用的操作2对数据库交互比较多的3操作路径复杂的4程序调用方法对系统性能影响大的。
颢子(1111)(22854705)13:
59:
25典型交易确定后进行模拟真实的生产环境进行典型交易的配比然后是需要和业务人员进行确认包括操作的确认数据的确认包括一些操作人员的权限确认颢子(1111)(22854705)13:
59:
45当然数据的准备可以和录制脚本同时进行颢子(1111)(22854705)14:
01:
21下面我简单说一下脚本的录制在整个测试工作中脚本的录制执行只是一个很小的环节在我看来测试的前期准备其实是整个测试的重中之重它关系到整个测试结果颢子(1111)(22854705)14:
03:
01下面我已b/s结构举例当然在不同的前台展现也会有不同的测试方法现在比较流行的有.netaspjspjsfphp等颢子(1111)(22854705)14:
04:
46在录制脚本前我们要首先了解脚本一般由3部分组成vuser_init,Action,vuser_end颢子(1111)(22854705)14:
05:
32一般我们把登陆部分放到“vuser_init”部分,把需要测试的内容部分放到“Action”部分执行;但是如果是模拟多个用户登陆系统,则要把登陆部分放到Action部分来实现颢子(1111)(22854705)14:
08:
52vuser_init和vuser_end都只能存在一个,不能再分割,而Action还可以分成无数多个部分一个脚本中可以有多个action当然我们已可以把多个操作放到一个action中颢子(1111)(22854705)14:
16:
53以web协议为例一般有两种录制的选择html及url脚本中采用HTML页面的形式来表示,这种方式的Script脚本容易维护,容易理解url颢子(1111)(22854705)14:
17:
53url录制的脚本看上比较乱它把每个图片每个连接都作为脚本的一部分录制下来颢子(1111)(22854705)14:
20:
04在点击StartRecord后我们就可以录制脚本了这时候你可以发现录制的ie中的端口变为7777颢子(1111)(22854705)14:
21:
48这个时候lr就作为了一个中转站把前台和后台进行的交互把数据抓下来并生成脚本颢子(1111)(22854705)14:
25:
56但是我觉得脚本很难用这种方式讲没有图片和事例不用的应用可能要有不同的设置颢子(1111)(22854705)14:
26:
04不同的
颢子(1111)(22854705)14:
30:
28
在点击StartRecord后我们就可以按照要录制的典型交易进行录制一般在init中我们录制登录因为init在脚本执行过程中只执行一遍action可以循环执行
非洲黑驴(137655521)14:
31:
49
一般我们录一下脚本会很长
非洲黑驴(137655521)14:
32:
09
那如果今天没录完,第二天怎么才能接上上一天的脚本继续录呢
颢子(1111)(22854705)14:
32:
21
可以啊
非洲黑驴(137655521)14:
32:
35
咋录啊
颢子(1111)(22854705)14:
34:
44
在进行录制脚本的时候
颢子(1111)(22854705)14:
35:
09
把recordtheapplicationstarup那个选项去掉
非洲黑驴(137655521)14:
35:
44
哦,那就是说还得把昨天走的全走一次,到要录的时候再点击开始,是吗?
颢子(1111)(22854705)14:
35:
49
然后按照我们平时录制时一样进行操作
颢子(1111)(22854705)14:
36:
02
对
Empire@上海(181491600)14:
36:
33
能不能回放到上次哪里然后接着路
Empire@上海(181491600)14:
36:
43
不是手工走到那里
颢子(1111)(22854705)14:
37:
07
在执行到要录地方点击record就可以继续录制了
非洲黑驴(137655521)14:
37:
12
能回放到那里吗?
省得再走一遍了
Empire@上海(181491600)14:
37:
22
可以
非洲黑驴(137655521)14:
37:
32
咋回放呢?
?
?
?
?
?
?
颢子(1111)(22854705)14:
37:
33
不能回放的
Empire@上海(181491600)14:
37:
40
嘿嘿我只知道功能自动化可以
非洲黑驴(137655521)14:
37:
51
LR不行吗?
Empire@上海(181491600)14:
37:
58
不可以么
Empire@上海(181491600)14:
38:
22
QTP
颢子(1111)(22854705)14:
38:
24
因为你回放只是建立了一个web上的通信
Empire@上海(181491600)14:
38:
28
ROBOT都可以阿
颢子(1111)(22854705)14:
38:
58
回放时可以但是不能够回放到你要的那个页面继续进行录制
Empire@上海(181491600)14:
39:
13
明白了
非洲黑驴(137655521)14:
39:
14
LR应该enhancement
非洲黑驴(137655521)14:
39:
21
嗯啊,明白了
以今天的名义(23294949)14:
39:
40
脚本的回放和录制是两个完全不同的操作,不能混合进行
非洲黑驴(137655521)14:
39:
58
回放的作用是什么?
?
?
非洲黑驴(137655521)14:
40:
10
是为了查找脚本的错误行吗
颢子(1111)(22854705)14:
40:
51
因为你回放的时候你所看到的只是镜像文件回放的时候你的ie没有把端口改为7777也就是lr没有作为中转站它无法继续抓取协议包
以今天的名义(23294949)14:
41:
20
可以这么说,目的是为了验证脚本能不能完全按照手工操作的步骤和结果进行执行
颢子(1111)(22854705)14:
41:
37
回放首先我们是要验证脚本的正确性
非洲黑驴(137655521)14:
42:
09
回放只能看executionlog的结果,不能看别的吧
Empire@上海(181491600)14:
42:
27
回放只是真实的回放网络通信的内容而没有相关的执行界面
库库熊(397491767)14:
42:
29
但是有的时候录制脚本是正确的但是回放的时候出现问题。
这个和网络有关系吗?
颢子(1111)(22854705)14:
42:
30
然后我们要通过回放查看执行的交易是否已经正确执行因为有的时候我们回放后在报告中我们看到全是pass
颢子(1111)(22854705)14:
42:
46
但是实际上并没有正确的执行完成
Empire@上海(181491600)14:
42:
55
哦
非洲黑驴(137655521)14:
43:
14
没正确完成?
那回放还有用吗?
颢子(1111)(22854705)14:
43:
26
lr一般会把500404等错误进行解析
以今天的名义(23294949)14:
43:
36可以看到界面的非洲黑驴(137655521)14:
43:
45有404这样的错误,也会pass吗?
非洲黑驴(137655521)14:
43:
56如何看到界面啊?
静虚(45457283)14:
44:
39脚本的pass与事务的pass是两个不同的概念!
非洲黑驴(137655521)14:
45:
10我都晕了颢子(1111)(22854705)14:
45:
31也就是说当一个用户登录进行一个查找但是他是非法用户所以点击查找后页面会返回一个没有权限的错误页面但是lr认为正确返回伊伊(95506563)14:
45:
53为什么回放的时候已经把那个thinktime设置很长时间了,为何我们还是不能很清晰地看到它的每个步骤?
非洲黑驴(137655521)14:
45:
59这个不是可以设置rule的吗?
颢子(1111)(22854705)14:
46:
05
所以我们可以在脚本中建立检查点对关键字进行检索保证正确执行
Empire@上海(181491600)14:
46:
31
嗯
伊伊(95506563)14:
47:
00
是设置rule的值?
?
颢子(1111)(22854705)14:
47:
03
因为runtimeseting中需要对thinktime进行设置
颢子(1111)(22854705)14:
47:
09
也就是在
sunnyshinexm(641612117)14:
47:
15
这样看来,LR也可以当作功能测试工具用喽
颢子(1111)(22854705)14:
47:
33
runtimeseting中你可能选择了忽略思考时间
非洲黑驴(137655521)14:
47:
56
rule的值是想把正常的错误界面屏蔽掉,不作为错误来对待
颢子(1111)(22854705)14:
48:
14
实际上qtp和lr是两种不同的录制理念
非洲黑驴(137655521)14:
48:
19
对了,我怎么把上一天录的脚和今天录的合到一起呀?
?
?
?
?
?
?
?
?
?
?
?
?
?
颢子(1111)(22854705)14:
48:
39
一个是根据前台的插件进行录制的一个是根据协议进行录制的
非洲黑驴(137655521)14:
48:
59
对了,我怎么把上一天录的脚和今天录的合到一起呀?
?
?
?
?
?
?
?
?
?
?
?
?
?
颢子(1111)(22854705)14:
49:
08
如果想把两个脚本合在一起很容易直接拷贝到一个脚本中就好了
颢子(1111)(22854705)14:
49:
33
当然你要确定好被插入的脚本及被插入的位置
非洲黑驴(137655521)14:
49:
51
那action得改一下编号吧,例如action1action2
颢子(1111)(22854705)14:
50:
13
这个就是我刚刚说的在一个脚本中可以有多个action
非洲黑驴(137655521)14:
50:
19
按action合并不行吗
非洲黑驴(137655521)14:
50:
48
嗯,我把第二天的action改个序号,只要不和第一天的冲突,然后考过去,这样做行不?
颢子(1111)(22854705)14:
51:
15
你可以把所有的录制脚本(交易)放到一个action中也可以分别放到不同的action中
颢子(1111)(22854705)14:
51:
23
可以得
非洲黑驴(137655521)14:
51:
41放一个action中我不知道往哪放啊颢子(1111)(22854705)14:
52:
17你要学会看脚本对脚本的分析及理解是非常有用的非洲黑驴(137655521)14:
52:
30好的非洲黑驴(137655521)14:
52:
49继续吧号子老师Empire@上海(181491600)14:
53:
00试试就知道可以不了非洲黑驴(137655521)14:
53:
17嗯颢子(1111)(22854705)14:
53:
35把一个脚本考到另一个脚本有个问题要注意非洲黑驴(137655521)14:
54:
04去头去尾
颢子(1111)(22854705)14:
55:
34有的人习惯用tree方式对脚本进行修改及插入检查点Empire@上海(181491600)14:
56:
08什么叫tree方式?
颢子(1111)(22854705)14:
56:
16但是当你把你那段脚本以拷贝的方式考到另一脚本中时你就无法使用tree的方式了非洲黑驴(137655521)14:
56:
53我不用tree方式的,这个可以避免了颢子(1111)(22854705)14:
57:
19因为在录制脚本是lr不但要抓住通信协议中的数据还要在脚本中记录镜像图片
以今天的名义(23294949)14:
57:
27你不是说你的脚本很长吗,不用tree多麻烦啊非洲黑驴(137655521)14:
57:
29为啥不让使用TREE方式了呢颢子(1111)(22854705)14:
57:
39web_submit_data("logon.jsf","Action=http:
//128.32.100.26/TLS/logon.jsf","Method=POST","TargetFrame=","RecContentType=text/html","Referer=http:
//128.32.100.26/TLS/logon.jsf","Snapshot=t84.inf","Mode=HTML",非洲黑驴(137655521)14:
57:
59哦,TREE是解决脚本长的问题的呀颢子(1111)(22854705)14:
58:
00例如以上的脚本Snapshot=t84.inf就是个快照文件非洲黑驴(137655521)14:
59:
13为什么都有些"Method=POST","Snapshot=t84.inf",之类的,到底有什么用啊颢子(1111)(22854705)14:
59:
34如果你拷脚本那么你的快照就会丢失当然也会有解决快照的方法就是把快照文件也移到相应文件夹下以今天的名义(23294949)14:
59:
38不是,tree视图能够很方便的找到你要找的那个步骤,而在脚本里找就很麻烦了
颢子(1111)(22854705)15:
00:
24
Snapshot=t84.inf是个快照你把它删除了也不会影响测试执行
非洲黑驴(137655521)15:
00:
56
哦
颢子(1111)(22854705)15:
01:
13
Method=POST是指页面传输的方法post
颢子(1111)(22854705)15:
01:
27
就是你向服务器进行请求
非洲黑驴(137655521)15:
01:
37
嗯
颢子(1111)(22854705)15:
01:
51
Method=POST你是不能删除的
颢子(1111)(22854705)15:
01:
56
好我们继续
非洲黑驴(137655521)15:
02:
29嗯,我知道,这是表单方式非洲黑驴(137655521)15:
02:
32继续非洲黑驴(137655521)15:
02:
35谢谢颢子(1111)(22854705)15:
02:
52在我们执行完录制脚本后并不是脚本就一定能够执行因为在脚本中我们有很多需要关联的数值非洲黑驴(137655521)15:
03:
12号子,讲讲关联行不?
?
非洲黑驴(137655521)15:
03:
22先给大体说下是干什么的行不?
?
?
?
?
?
颢子(1111)(22854705)15:
03:
26在脚本中一般常用的关联有session_idtask_id还有内存地址等等非洲黑驴(137655521)15:
03:
33我强烈要求讲讲关联
静虚(45457283)15:
03:
49大家先听颢子老师讲,然后在自己动手操作一下,这样映像深一些。
再把动手后的疑问提出来,由颢子老师再解答。
如果这样本身对工具不熟悉,听一句问一句,即影响了大家听课,也妨碍了讲课的连贯性,自己的收获还不大!
非洲黑驴(137655521)15:
04:
16好吧非洲黑驴(137655521)15:
04:
44可是不知道啥是关联,往下我还能听懂不
Empire@上海(181491600)15:
05:
45
就相当于各个表中相关联的属性
非洲黑驴(137655521)15:
06:
02
啊,明白了,谢谢
颢子(1111)(22854705)15:
12:
37
所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)资料,转变成是摘取自服务器所送的、动态的、每次都不一样的资料。
举一个常见的例子,刚刚提到有些比较聪明的服务器,这些服务器在每个浏览器第一次跟它要资料时,都会在资料中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要资料的是不是同一个浏览器。
一般称这个辨识码为SessionID。
颢子(1111)(22854705)15:
13:
08
对于每个新的交易,服务器都会产生新的SessionID给浏览器。
颢子(1111)(22854705)15:
13:
55
因为VuGen脚本还是用旧的SessionID向服务器请求,服务器会发现这个SessionID是失效的或是它根本不认识这个SessionID,当然就不会传送正确的网页资料给VuGen了。
颢子(1111)(22854705)15:
15:
25
在录制完脚本后我们要对脚本进行关联当然现在lr可以自动关联在这里我不建议大家使用自动关联
颢子(1111)(22854705)(2006-10-3115:
16:
45)
因为LR有一些关联规则,但是也不是关联就全是对的或者可靠的。
颢子(1111)(22854705)15:
18:
38
些关联其实很简单主要是我们要找到需要关联的地方
颢子(1111)(22854705)15:
19:
09
我们常见的task_idsession_id等是比较容易找出来的但对于
颢子(1111)(22854705)15:
20:
02
很多关联中套用关联我们需要认真地查找
颢子(1111)(22854705)15:
21:
49
关联会用到下列的函数:
web_reg_save_param:
这是最新版,也是最常用来做关联的函数。
语法:
web_reg_save_param(“ParameterName”,,LAST);
颢子(1111)(22854705)15:
24:
59在进行完关联后我们可以再回放脚本查看回放后是否正确执行最好使用另一个用户进行登录回放颢子(1111)(22854705)15:
25:
30在脚本中还有一个重点是参数化非洲黑驴(137655521)15:
28:
35颢子(1111)(22854705)15:
29:
53突然有事不能讲了让义老师继续吧对不起大家了颢子(1111)(22854705)15:
30:
05我要去开会了
以今天的名义(23294949)15:
35:
59参数化是指将脚本执行中一些需要变化的值作为参数,并提供给参数相应的值以今天的名义(23294949)15:
37:
28最简单的例子就是登录的用户名,在录制时我们输入一个用户名,脚本中这个用户名就写死了,如果不做参数化的话,是无法换一个用户登录的以今天的名义(23294949)15:
39:
33我们可以在脚本中选中这个用户名,点右键菜单中的replacewithaparameter以今天的名义(23294949)15:
41:
01输入parametername如userName,parametertype一般选择文件方式以今天的名义(23294949)15:
43:
15这时候点ok,用户名就被参数化了。
所有的参数都可以在ParamList中找到,我们可以在这里面修改参数的属性和值非洲黑驴(137655521)15:
47:
34下面是解答问题的时间了吗?
以今天的名义(23294949)15:
47:
40在ParamList选择一个参数,点击EditwithNotepad,显示的文本就是这个参数值的列表。
比如我们要用100个不同的用户执行脚本,那么把这100个用户名放到这个文本里,每个用户名一行,注意最后一行后面一定要有一个回车。
保存后关闭,这100个用户名就可以使用了非洲黑驴(137655521)15:
47:
47义老老师?
非洲黑驴(137655521)15:
47:
57哦,对不起,问早了以今天的名义(23294949)15:
48:
29呵呵,打字慢了一点非洲黑驴(137655521)15:
48:
51休息一下,
伊伊(95506563)15:
49:
11以今天的名义(23294949)15:
49:
13如果参数化这块你们有基本的了解,那就可以直接提问了库库熊(397491767)15:
50:
18为什么我参数化之后脚本出错的,就是通不过。
伊伊(95506563)15:
50:
27我想让系统自动去建立100个用户,该如何设置以今天的名义(23294949)15:
50:
34参数化说简单也简单,只是把要用的值放到参数里去,关键是参数的使用策略非洲黑驴(137655521)15:
50:
57我问一下:
如果参数化用的是数据库中的数据,那数据库中有10条记录非洲黑驴(137655521)15:
51:
38而我选择sequential方式伊伊(95506563)15:
52:
00义老师,能不能帮忙指点一下?
非洲黑驴(137655521)15:
52:
01那如果用到第11个时,取不到数据了,那会不会出错以今天的名义(23294949)15:
52:
10伊伊你录新建用户脚本时肯定要输入新建用户的用户信息,录制完成后把用户信息参数化一下就可以了非洲黑驴(137655521)15:
53:
02但如果想加1000个用户,那我在file里要写1000个参数吗?
?
累了点Empire@上海(181491600)15:
53:
34robot里面的datapool可以自动产生我只知道Empire@上海(181491600)15:
53:
57编个小程序自动产生应该也可以阿以今天的名义(23294949)15:
54:
20那要看建用户的要求了,如果用户名或用户id是定好的,必须把这1000个参数都放到参数列表里非洲黑驴(137655521)15:
54:
20可不可以把参数弄成公式的形式伊伊(95506563)15:
54:
47好的,知道了,谢谢义老师非洲黑驴(137655521)15:
55:
12我咋还没明白呢以今天的名义(23294949)15:
55:
19不客气以今天的名义(23294949)15:
55:
52你说公式的形式是什么意思,我没太明白非洲黑驴(137655521)15:
56:
09义老师,那按sequential方式取参数的话,数据库里的数据必须够多才行吧?
?
?
?
以今天的名义(23294949)15:
56:
31不一定,可以循环使用非洲黑驴(137655521)15:
56:
35公司形式不说了,我也只是想的非洲黑驴(137655521)15:
56:
41哦,明白了