Loadrunner学习脚本编写系列 1Word下载.docx

上传人:b****5 文档编号:21482809 上传时间:2023-01-30 格式:DOCX 页数:22 大小:62.25KB
下载 相关 举报
Loadrunner学习脚本编写系列 1Word下载.docx_第1页
第1页 / 共22页
Loadrunner学习脚本编写系列 1Word下载.docx_第2页
第2页 / 共22页
Loadrunner学习脚本编写系列 1Word下载.docx_第3页
第3页 / 共22页
Loadrunner学习脚本编写系列 1Word下载.docx_第4页
第4页 / 共22页
Loadrunner学习脚本编写系列 1Word下载.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

Loadrunner学习脚本编写系列 1Word下载.docx

《Loadrunner学习脚本编写系列 1Word下载.docx》由会员分享,可在线阅读,更多相关《Loadrunner学习脚本编写系列 1Word下载.docx(22页珍藏版)》请在冰豆网上搜索。

Loadrunner学习脚本编写系列 1Word下载.docx

D9?

!

~-Y%g7Y#Z

改进脚本的方法:

1)为每一个GUI的screen添加事务语句来获得事务时间。

51Testing软件测试网u_a0`

E5m-Ep5O_`_a

_h

@_E_Xh%Q_H_S144971 

2)添加显示数据来帮助调试。

Q)V_t)J+[_X/Y;

U144971 

3)添加验证点来验证是否期望的文本或者图片在每个脚本执行后显示。

51Testing软件测试网_|$oh_^'

_'

WQI

)dF+|rP0^144971 

4)通过插入新参数和动态获得整个文件的方式对硬编码的URL,用户id,用户密码和其他的变量数据进行参数化。

这样脚本中的参数就可以被动态的替换,以此来模拟运行时不同数据的使用。

51Testing软件测试网7F,Y2g7z_~/B+E_s

9G_r2[Mo__f_Q144971 

5)添加重试逻辑(retrylogic)来处理不可见的错误。

51Testing软件测试网6W"

c&

b_c_S_t(h

"

~L_h)e_W.M%c_r+x144971 

6)添加随机函数发生器变化脚本来模拟真实的负载。

z_W_v

I5},J_l_M144971 

7)添加if/else逻辑来检查结果,或者进行合适的操作,或者在合适的时候退出脚本。

51Testing软件测试网_w.L_@[x_X_T

+ko_{"

HW_s144971 

8)在一个screen中添加语句来捕获需要在其他命令中使用的数据。

当使用Microsoft.NET的webform技术的时候,需要避免习惯性的“脚本超时“错误。

_R6F,|.w'

w_N,g144971 

9)添加语句来调用外部库函数,以便保存和检索在内存VirtualTableServer中的数据。

%u4iR_i2I_Y@(__A144971 

10)处理XML.

_Q_E_T!

L9`_{"

c-D_K"

s144971 

11)添加语句来模仿客户端的Javascrīpt问题。

_S_VI+^_j_V_X8v;

B_w0q)r144971 

12)添加语句来管理超时。

13)从事务计时器中计算和减去无效的时间。

51Testing软件测试网

s)?

B){_J)M9B

D4u_Fr

14)输出日志。

15)添加集合点。

51Testing软件测试网_?

5jqd_M_`9]#g

_q_O!

\4k0e.R_x_O_K_[144971 

16)添加时间(Timing)。

_e_E3}_o_H14497151Testing软件测试网_B

m!

Y4s_K_o_s_t1@

脚本语言规则:

把cookie代码标注出来(因为脚本运行的时候他们被再次执行)。

*[&

Dx+j7[3c_l14497151Testing软件测试网1|_g_Y,q8[_J(g

7。

通过在VuGen中运行来调试和调整脚本(单个用户),同时运行时设置的日志能够显示如下信息:

9H0q+i

G*r,d_L_{1449

_G_WE,p_Q_144971 

辨别和解决脚本编辑错误。

51Testing软件测试网_P+q6h_|s0@_W6M1L

决定timing.L_T:

nE_K_O_X;

^;

Le1449

A$a3B@_m%d_tG1g4]_S144971 

设置初始运行设置的场景。

51Testing软件测试网Zw_z_Ev6}9c_l

8。

在控制器中使用fulltestRuntimeSettings来运行脚本。

脚本录制和产生:

51Testing软件测试网;

b_DQ

[.a5_-Q9v

_u/w_u_d#O*Il_N'

R9k144971建立一个新脚本的第一步是选择一个单协议或多协议。

51Testing软件测试网_ctr

O&

S+`$M_S_R.g_A

*一些协议可能在多协议模式下不能用。

*只有在多协议的GUI下你才能重新排列action

在使用Java协议之前,确保你在环境变量的路径下有JDK,否则你可能会遇到这个错误:

51Testing软件测试网v/x_L_k_{_p__4C

Error:

Failedtofindjavac.exeJavaCompilerinPathandJDKinstallationfolder 

inregistry.[MsgId:

MERR-22981]51Testing软件测试网'

R0bX7R_d1n$r_g"

F

FailedtogetJREversion.CheckthatyourPATHenvironmentvariablecontains\bindirectory.[MsgId:

MERR-22986]51Testing软件测试网H_w.C_y)}C4L*i$z

Dk#v_\1R"

O7J_@7i144971当选择Java协议的时候:

*只有选择了“RMIJava”才能录制。

51Testing软件测试网,F0c0{_r_u_X.W

7m!

j$w_f*V4|I_C)B144971 

*如果选择“Javauser”,“开始录制”图标或菜单是灰色的。

51Testing软件测试网_`8p_Z-B"

n_C&

zZ

_P_{"

jr_x_E144971当你打开一个新的脚本时,默认的脚本名称为“noname1”。

下一个新的脚本名称为“noname2”,以此类推。

X"

__@_K_]\_~144971注:

有顺序的录制多个动作(而不是录制一个动作,然后停止开始另一个动作)。

这样能使你识别出在你脚本中需要关联的序列码(在例如PeopleSoft的程序中)。

51Testing软件测试网v$q+{Z*S.m6h'

m_}3t

每次修改脚本后,脚本都需要重新编译。

_y_l_c,O:

lh144971脚本文件的调用:

_w_V6M_z_|_P.k_i_}0a144971 

VuGen是默认在你双击.usr后缀文件的时候被调用。

在这个文件里,Javascrīpt被指定为“Type=General-Js”。

(DQ;

N_a_L_E_S7{*C*d144971为了避免重新编译,我使用命令行的变量和值得组合这样的批处理文件来调用控制器。

例如:

_Y6n

L_]

X_}W14497

REMLoadRunfromLoadRunner8.0defaultinstallationlocation:

.o_t-|7I_J144971SETLR80=C:

\ProgramFiles\MercuryInteractive\MercuryLoadRunner\bin51Testing软件测试网_^'

k_x6S.a_Q

cd%LR80%51Testing软件测试网2l_x_R_b_l_ju-P_n

wlrun.exe-TestRunc:

\Temp\Scenario1.lrs-port8080

脚本文件Action51Testing软件测试网.q_P0Y!

S7D_[3K%Z_x

主机上的代理发送的到服务器的请求是由虚拟用户生成器创建的(VuGen.exe)action的回放实现的。

l_qr_zmF_k4T

6x

i_b'

}_x4U_g144971 

Loadrunner创建的脚本有三部分:

51Testing软件测试网1LB_a6F_H)L@2I-n

*vuser_init 

来初始化Vuser。

执行在这部分的虚拟用户的状态是"

Init"

51Testing软件测试网_b_ZL_o_?

+wJ:

D.[C

*Action用来重复多次迭代 

执行到这部分的虚拟用户的状态是"

Running"

_a_z_s2b5A0x144971

#m7X_m:

F/]144971 

*vuser_end 

退出虚拟用户。

Exiting"

`,R_D2f'

c/X_k144971如果你的脚本只需要执行一次,你仍然需要把这些脚本写到Action部分,因为在其他部分(vuser_init和vuser_end)有些命令是不合法的或者会忽略掉。

51Testing软件测试网t;

o_S$n;

|d&

J;

e$y_t

_WQ{_G_QB!

G#D144971VuGen允许脚本包含多个action。

所以我为每一个screen创建一个新的action。

_u$n_T2R_S!

a_X;

c_[_f_s14497

_f_x_d%S__"

@7[_?

(O144971注:

如果你想使用不同的用户登录,就不要把登录操作放到vuser_init中,而是放到action部分。

3v3F4L_D"

x2u14497151Testing软件测试网l_O3C1g9c"

N_\F

VuGen根据选择脚本协议的不同来添加不用的引用到“.h”头文件。

C的.h头文件

对于Web(HTTP/HTML)协议,51Testing软件测试网+OC7M_a_s

创建globals.h,包含内容:

#ifndef_GLOBALS_H

#define_GLOBALS_H

//--------------------------

//IncludeFiles

#include"

lrun.h"

web_api.h"

lrw_custom_body.h"

//recordedforweb_custom_requestfunctions.

//GlobalVariables

#endif//_GLOBALS_H

__Q_~_g!

Y144971对于COM/DCOM协议:

略51Testing软件测试网_g!

U5^_t_L

_p_t1S_k;

}144971C脚本语言的格式:

LoadRunner使用的没有进行微软扩展的ANSIC语法。

任意最小的action代码块如下:

_M_L&

K8u_N2H+I_k144971

#includeas_web.h//fromLoadRunner'

sincludefolder.

Action1()

{

/*commentblock

*/

//commentline

return0;

}51Testing软件测试网_k$W3P-O_qVr,

C脚本编译/类库

当VuGen编译脚本时,产生一个"

pre_cci.ci"

文件,这个文件包含了所有action的代码和包含文件。

这就是为什么会有语法错误“notwritingpre_cci.ci”的原因。

51Testing软件测试网2b-cN)p}

#E%a#Y_b1]!

~p144971控制器编译这些.ci文件为机器目标码。

51Testing软件测试网_K_W_Z,Y(z_M)~^_F

_Gpg_~_n144971VuGen在每一个脚本文件中自动创建一个lib文件夹,这个文件夹中包含了combined_lib.c文件。

该文件包含了所有引用文件。

来定义 

UNIX或者Windows的函数。

b_c_}_Yf2e_}#L_Z

#include"

globals.h"

LoadRunner'

的模版文件夹的其中一个。

51Testing软件测试网_X"

G*?

2F_p_P0b_S_r}

^_~;

lP%B2[14497#include"

vuser_init.c"

51Testing软件测试网2?

d!

@_z_FZ#z

Action.c"

51Testing软件测试网n'

s

b_Ur_u^_o_{_J"

P/yK

vuser_end.c"

51Testing软件测试网_c

f.H_z_w

+o3J_k_^(LL_F_k[_e144971 

警告:

当你使用类库中的函数却没有正确包含该类库的时候,你会收到一条错误信息:

Error--Unresolvedsymbol

_E(F_k1I_C_|_G_y144971C类库

LoadRunner 

使用

1994GNUCPre-Processoroptions 

1995LCC-win32RetargetableCCompiler/LinkerfromtheFreeSoftwareFoundationviaChrisFraserofAT&

TandDaveHansonofPrinceton.51Testing软件测试网_C}!

Q-]_/rD

附加的函数定义在

ANSIClibrary中。

51Testing软件测试网#m5G!

\2c;

h_RQSd

_cG_f_h:

Z"

o_o-l144971外部的没有返回整型数的C函数需要在脚本的开头进行显式声明。

例如,string函数中的stringtokenizer:

_T___d.t_H_q*gw144971externchar*strtok(char*token,constchar*delimiter);

A(kf4t)UJ144971Java语法:

略w_L_u0M!

T14497151Testing软件测试网_`__9H4|9

OK,先到这里,休息一下,下期接着翻译LR脚本相关知识.

loadrunner学习系列---脚本编写

(2)

8I_n,AA

Si_S%_144971 

今天接着翻译

Ov_d_t3Z7_:

w,s/j144971VUser_Init部分

这里是Vuser_init部分的一些例子:

3l;

f&

J_k)a_o)tHoE_b14497151Testing软件测试网3e7l;

~_^1

操作系统的UserID51Testing软件测试网4c.S*V2@_[_{_|_~

下面显示了使用advapi32.dll的GetUserNameA函数获得的操作系统的用户ID51Testing软件测试网_[_J_T$g1p`

charsUserID[1024];

//MaximumpossibleUserIDlength.

longlUserIDSize=sizeof(sUserID)-1;

intrc;

rc=lr_load_dll("

advapi32.dll"

);

if(rc!

=0){

lr_error_message("

lr_load_dllofadvapi32.dllfailed.Abortedforrc=%d"

rc);

lr_abort();

}else{

GetUserNameA(sUserID,&

lUserIDSize);

lr_message("

UserID='

%s'

sUserID);

}

所有的变量声明需要一块放到最上方。

在vuser_init部分创建的本地C变量(如int或char)对其他部分的脚本是不可见的。

所以使用lr_save_string函数来创建对所有脚本可用的全局参数。

例子:

char*itoa(intvalue,char*str,intradix);

vuser_init(){

intx=10;

charbuffer[10];

lr_save_string(itoa(x,buffer,10),"

pX"

);

lr_message("

intx=%s"

lr_eval_string("

{pX}"

));

}

运行时设置的附加属性(AdditionalAttribute)

8.0版本引进了一个非常有价值的特性:

在运行时设置中指定属性,这个属性可以对不同的虚拟用户组设置不同的值。

下面的代码是从运行时设置的附加属性中读取名为“usertype”的参数。

然后使用参数值来对应的设置全局的"

thinktime1"

变量。

intthinktime1=0;

51Testing软件测试网_o5L2|C_A_F!

@0P#p2x_U

vuser_init()

C_J2T"

O"

]g/G

u5@_t144971{

LPCSTRstrUsertype;

//Define*str.51Testing软件测试网_~u.J^1g7p"

e_~I

strUsertype=lr_get_attrib_string("

usertype"

x4T5k_\

K*E_K144971if(strUsertype==NULL){

lr_output_message("

###Run-timeSettingsAdditionalAttributeusertypenotspecified.Cannotcontinue."

51Testing软件测试网1@8M-y:

U/Y_l

X_[_o$q4C

lr_abort();

}else{

(z"

~_m#T!

L4u#u_A144971

lr_message("

###Run-timeSettingsAdditionalAttributeusertype=\"

%s\"

strUsertype);

4j_N;

k+Y+h_u_X"

B#k_\2~144971if(strcmp(strUsertype,"

advanced"

)==0){thinktime1=2;

}51Testing软件测试网_N*e

M(u*F2t_\1h

Else

2E%{

C

^$}F_pH-ji144971if(strcmp(strUsertype,"

intermediate"

)==0){thinktime1=4;

_TRo1P1P_]_v+g_r_d_`144971else3~_L__

x3B_]

?

~_Z;

~144971if(strcmp(strUsertype,"

basic"

)==0){thinktime1=8;

}51Testing软件测试网7\-a_|4H_h1E

P

else{51Testing软件测试网_s_O_z/d_D,v_X&

~

lr_error_message("

###ERROR:

Valuenotrecognized.Abortingrun."

51Testing软件测试网_T_|_}f1n;

_U_G8y&

v

o

D)n_~-h#Y(B144971return0;

TimeStructureFix(不知道怎么翻译,呵呵,“时间结构的解决“?

根据知识库34195的文章,默认当前时间戳的毫秒部分不被更新,除非ftime使用的时间结构被重新定义:

typedeflongtime_t;

struct_timeb{

time_ttime;

unsignedshortmillitm;

shorttimezone;

shortdstflag;

};

struct_timebt;

_tzset();

\\使用ftime设置变量

_ftime(&

t);

lr_message("

Plusmilliseconds:

%u"

t.millitm);

控制信息的显示:

在运行时,当脚本的事务失败后继续,你怎么知道哪个用户失败了?

在每个失败的事务之后,发出一个能够唯一确定该用户的信息。

Loadrunner提供了一些函数来在运行时显示信息:

//往输出日志上发送消息,这个消息前边会带有action的名称和行数

W*d_M_LS

V)W7U#X144971lr_output_message("

anoutputmessage"

#V

S_}d0e_t(U144971

_b:

|*u2Dq)F*`6O144971例子:

51Testing软件测试网_A5]-z'

y$a!

d,Z*M

Actions.c(4):

anoutputmessage&

l-Z$K-e_q14497151Testing软件测试网_m

V9O'

F_}__

//往输出日志和虚拟用户日志上发消息:

51Testing软件测试网_p

c_y_|$y,g

***amessage"

+"

\r"

Anewline."

把"

放到另一行,这样可以容易的在命令上添加或者删除代码项。

51Testing软件测试网(z_T_Q

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1