自动化测试中调用DLL

上一篇 / 下一篇  2009-12-13 17:46:53 / 个人分类:自动化测试

2`&Nc7c7tI ~0首先说说自动化测试调用DLL的作用吧:
?2Vb:n!z3u8OW'sgg0写DLL可以将通用功能进行封装,该DLL可以被任何自动化测试工具使用,只要支持DLL即可,另一个目的是保护版权51Testing软件测试网`3H"k8_:w p*Ngr.dp.l/w

51Testing软件测试网5Mx5?,R*WdJ A{

下面针对QTP和开源测试框架watir + ruby中调用DLL分别说明:51Testing软件测试网 \o8XAjM#r~$E

J]KpSM)eL0Ruby51Testing软件测试网`,?!Xn'b1^

51Testing软件测试网n]+{'Lr Q\

在ruby的开源项目中,Win32Api这个gem可以实现我们需要的功能。通过以下方法 ,我们就可以调用外部dll中的函数。

-t ^6pq/H8X&S c051Testing软件测试网aC*@+{cw0@$O K e

Win32Api.new(dllname, proc, import, export)

J-K3tL{!Lb%L*J6`0

0B@J,?3|3Y b0参数说明

8xr @mt(v~0

$a.t(l!n-Km0dllname:dll文件的名字,如果想只写dll的名字,可以将dll放到system32目录或者当前目录下,或者写上dll文件所在的路径51Testing软件测试网O(q3} El?~

'hq\o}5Z"C0proc: dll中函数的名字

a;g-DAu8T0

+T6h$dJKa;e0import:函数传入参数的参数类型,其中 "p" 对应指针,"n","l"对应long,"i"对应int,"v" 对应void,如果有多个参数,可以通过 ["p","n"]数组的方式来实现,其中置为nil可以表示没有参数51Testing软件测试网0N KMG;d7`m3o7w"X1B

ph rW+Zl!T'SG+AP+V0export:函数的返回值类型,参数类型同上51Testing软件测试网%@%HsUG1t1cJ8|a1`

51Testing软件测试网k{#Vhj.u)H

Win32API#call([args ...])

'zPP!w8eLu.]3W ]051Testing软件测试网:gL0^ fv)X7_#r N

调用dll中的函数,参数和返回值应该与new申明中的一致,如果返回一个指针,需要事前初始化,否则可能会有内存溢出问题。

D!XN)i9s:~051Testing软件测试网oWN1hxX:F,{ M

例子:51Testing软件测试网D%D|[6N0ak|%t

51Testing软件测试网` NYY:Z6[0~c2X

有个dll的头文件的申明为:

,Bk2Q O4xB"W051Testing软件测试网g I#q6nH2a2p'MD

extern "C" long PASCAL EXPORT BMPToJPG(char *jpg,char *bmp);
W&^Y#uX2YSa T K0那么在将指定的dll文件放在当前目录,ruby代码如下51Testing软件测试网kI]6i?w.L6pl

51Testing软件测试网Mmf!A3{x'n

require 'rubygems'51Testing软件测试网n$T+Hzz.?

}W2m x[BO)hx0require 'Win32Api'

!zqL)^1U051Testing软件测试网:TN%Bd Z.Q

JPG=Win32API.new(File.dirname(__FILE__)+"\\JpgDll.dll","BmpToJpg",["p","p"],"l")

/C!C\lv&`0

@"N2`4O5M0v"wm'IUwO0JPG.call("D:\\1.bmp","D:\\1.jpg")51Testing软件测试网vz/H Xu
 51Testing软件测试网MhBZH;t\
执行上述代码后,就能把D盘下的1.bmp文件另存为 1.jpg文件

g.H3\-^z gR3r051Testing软件测试网:W L'[uJ?kp

 

%|zx ^qjul,b051Testing软件测试网K4lvOH5`+HK~

QTP51Testing软件测试网2bE:X;uE

2Z!f+sK @P)^C0QTP拥有自己的.NET Factory接口,以调用.NET生成的DLL,也可以使用Extern.Declare来进行外部的DLL的访问。51Testing软件测试网2}O YY`w\.G H

S.rJqKhx!r yL0语法:51Testing软件测试网6Lk`^s`

Extern.Declare(RetType,MethodName,LibName,Alias[,ArgType(s)])

/e fTv,h0

参数说明51Testing软件测试网7n$iD#mB7N Og[7X

RetType: 方法返回值的类型

"z`:c;~T io)GZ2R!g:a0

MethodName:调用DLL文件中的某个方法的方法名

,}U-M` cEg Q051Testing软件测试网p"T:O qyF yTx*J4p

LibName:DLL文件名51Testing软件测试网)O3c9Z0n:i,AF

51Testing软件测试网A IL0yb

Alias: 别名,当别名为空时,方法名和别名一样(此参数通常为空)51Testing软件测试网Z(U5K g~)f

,t8h3D.J9b4B q.G(F0ArgType(s): 传入的参数

Nq*H8ks+F&O0

bY*l a2k%WQ/}0例子:51Testing软件测试网1|4y iq6E/O x'u

51Testing软件测试网!SQFgo!@+@

Extern.Declare micInteger,"TuxCALL","D:\AutomationTest\Lib\MyDll.dll","",micString,micString

TU^|0o"X@,D+Ks051Testing软件测试网b,u.~%]+^ iG4Q

Msgbox Extern.TuxCALL("A","B")51Testing软件测试网Lzo;DHyY


TAG: 调用dll 自动化测试 调用DLL

FISHY'S TRIBE 引用 删除 fishy   /   2009-12-14 14:43:11
您好,我是51Testing软件测试网的编辑,您的本篇博文被推荐至51Testing软件测试网首页发表:http://www.51testing.com/html/83/n-199983.html
感谢您关注并支持51Testing博客,期待您更多的优秀原创博文。
 

评分:0

我来说两句

Open Toolbar