51Testing软件测试网#eqP$hTJ-o 使用 VuGen 时,可以调用在外部 DLL 中定义的函数。通过从脚本调用外部函
T3K|4yg0数,可以降低脚本的内存使用量以及总体运行时间。51Testing软件测试网?.|4lH%]i`?e
要调用外部函数,需要加载定义了该函数的 DLL。
!O T#C%C;q)f:u6G0可以用下列方法加载 DLL:
Gw-pY
jO1i0 本地— 用于一个脚本,使用 lr_load_dll 函数。51Testing软件测试网&K-CX"Z.k,H
全局— 用于所有脚本,方法是向 vugen.dat 文件中添加语句
%M8qz7_
IS*\051Testing软件测试网 {y5} [f7Sx加载 DLL — 本地51Testing软件测试网"F_7bWs#JB
使用 lr_load_dll 函数可以在 Vuser 脚本中加载 DLL。DLL 加载成功之后,可以51Testing软件测试网.X*dhaw*n
调用 DLL 中定义的任何函数,而无需在脚本中对其进行声明。51Testing软件测试网Rk)Ip4fw
要调用 DLL 中定义的函数,请执行下列操作:51Testing软件测试网k+O7T_$N%j-y:?
1 使用 lr_load_dll 函数在脚本的开头加载 DLL。将语句放在 vuser_init 部分的开
2R5hB^M5n'ZC0M5n[0头。lr_load_dll 将替换 ci_load_dll 函数。51Testing软件测试网u1F4_4vOQ"jr
请使用以下语法:
Q?9n7GHh:DL0lr_load_dll(library_name);
h)Ui{S"@3wk0注意,在 UNIX 平台中, DLL 被称为共享库。该库的扩展名取决于平台。
Z3I.a oW1X02 在脚本的适当位置调用 DLL 中定义的函数。
@P m
G.W0在下例中,创建表 Test_1 之后,调用了在 orac1.dll 中定义的 insert_vals 函数。51Testing软件测试网,mz{'h`&H:O1b;I
gU)N"_;RwF0int LR_FUNC Actions(LR_PARAM p)
2P:Ck)Oe^*_!S'a0{51Testing软件测试网y M+K(xQ p},QQ*^
lr_load_dll("orac1.dll");
)t@qYNU`N0lrd_stmt(Csr1, "create table Test_1 (name char(15), id integer)\n", -1,
a8Z:HS.u01 /*Deferred*/, 1 /*Dflt Ora Ver*/, 0);
jtD"B!tj0lrd_exec(Csr1, 0, 0, 0, 0, 0);51Testing软件测试网,kt5S/~d2S:T'BS
/* Call the insert_vals function to insert values into the table.*/
&G0le'M1[0insert_vals();
eO@aej$\f0lrd_stmt(Csr1, "select * from Test_1\n", -1, 1 /*Deferred*/, 1 /*Dflt Ora Ver*/,51Testing软件测试网|/{dIb4{3K
0);
vQw/zM9pp1yJ!D
r(_0lrd_bind_col(Csr1, 1, &NAME_D11, 0, 0);51Testing软件测试网+tb1C
J0@0T
lrd_bind_col(Csr1, 2, &ID_D12, 0, 0);51Testing软件测试网"a}4x7To'K
lrd_exec(Csr1, 0, 0, 0, 0, 0);
K4Ty&sw|Tn0lrd_fetch(Csr1, -4, 15, 0, PrintRow14, 0);51Testing软件测试网*}5i$vQaH"?
51Testing软件测试网u"b4D:V#\jh注意: 您可以为 DLL 指定完整路径。如果不指定路径, lr_load_library 将使用51Testing软件测试网,n.~0vbF8Z)g]`,C(`
Windows 平台上的 C++ 函数 LoadLibrary 所使用的标准序列来搜索 DLL。在
9g,v(C:S;xc+p a!|;Y0UNIX 平台上,可以设置 LD_LIBRARY_PATH 环境变量(或平台上与其等效的
:QQXx:m!RB1?0变量)。lr_load_dll 函数使用与 dlopen 相同的搜索规则。有关详细信息,请参
:aB*hGYEn,av!D8h0阅 dlopen 或与其等效的主页。
f BZ'L/YxD051Testing软件测试网jj%t0G$a5Q加载 DLL — 全局
d&N.@p!_E]0可以全局加载 DLL,使其函数能够用于所有 Vuser 脚本。DLL 加载成功之后,51Testing软件测试网w2Z`#o|dQ
可以调用 DLL 中定义的任何函数,而无需在脚本中对其进行声明。51Testing软件测试网:BK}5ZZ9s
要调用 DLL 中定义的函数,请执行下列操作:
sDW?uc`9D]01 向 mdrv.dat 文件(位于应用程序的 dat 目录)的相应部分中添加要加载的 DLL51Testing软件测试网 _+q/@v~\"I
列表。
s6Qw.z*CK0请使用以下语法:
4y)^v(s1nT;j0PLATFORM_DLLS=my_dll1.dll, my_dll2.dll, …51Testing软件测试网+| Tk*y1g9j^a
用您的特定平台替换单词 PLATFORM。有关平台的列表,请参阅 mdrv.dat 文件51Testing软件测试网"t L;DfL~
g
的开始部分
c3i7Pw8j$CG051Testing软件测试网+P B'RG!J{V"^例如,要在 NT 平台上为 Winsocket Vuser 加载 DLL,请向 mdrv.dat 文件中添51Testing软件测试网!b z(_4[?
加下列语句:51Testing软件测试网+@W5K5jvf+_
51Testing软件测试网[4JO}&|%p?5NXQU[WinSock]
yq%Q
U,T+Rx0g0ExtPriorityType=protocol
C;l)M G_m-P0WINNT_EXT_LIBS=wsrun32.dll51Testing软件测试网0H9iX}#V$@*N
WIN95_EXT_LIBS=wsrun32.dll51Testing软件测试网Pnd:ko w
LINUX_EXT_LIBS=liblrs.so
`
?Rz)o G5DnE5Ua0SOLARIS_EXT_LIBS=liblrs.so
5jGxNG#]2`xhR0HPUX_EXT_LIBS=liblrs.sl51Testing软件测试网Q2yN`*Fy
E
AIX_EXT_LIBS=liblrs.so51Testing软件测试网0z2o/]J]
LibCfgFunc=winsock_exten_conf
%S9T-Ues;RY4R0UtilityExt=lrun_api
6Q*zFmR0q8Y5k0ExtMessageQueue=051Testing软件测试网"|%Q:]$z6J/bV
ExtCmdLineOverwrite=-WinInet No51Testing软件测试网$I7}:r$Rk,_
ExtCmdLineConc=-UsingWinInet No
r:y
Tou"Ke{`_0WINNT_DLLS=user_dll1.dll, user_dll2.dll, …
!ny3`-x(c3T7?02 在脚本的适当位置调用 DLL 中定义的函数。51Testing软件测试网8U_4T6SJ