调测工具VcTester攻略之--脚本驱动API测试
调测工具VcTester攻略之脚本驱动API测试 密级:公开
调测工具VcTester攻略之
脚本驱动API测试
作者:网际游民,成稿于2010年2月
关于本系列文章
本系列文章罗列如下:
《调测工具VcTester攻略之:搭建敏捷开发环境》
《调测工具VcTester攻略之:使用快捷编辑功能》
《调测工具VcTester攻略之:快速定位问题》
《调测工具VcTester攻略之:敏捷开发方式下调测组织过程》
《调测工具VcTester攻略之:脚本驱动API测试》
《调测工具VcTester攻略之:使用脚本桩构造数据驱动测试》 撰写本系列文章时得到ezTester技术专家Sundy多次帮助,在此谨
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
感谢~
白盒测试与API测试的差别
VcTester是白盒测试工具,它能否用于API测试呢,答案是肯定的。在VcTester中,你可以用CSE脚本任意发起一个函数调用,这可不就是API测试吗,
平心而论,白盒测试的测试要求比API测试高出不少,白盒测试不只要求构造测试数据、发起函数调用那样简单,还要求打桩,要求对源码插装改造、提供覆盖率统计等。两者关系如下图所示:
两者之间有很大交集,在白盒测试基础上,添加一些封装即可满足API测试的要求。当然,这里从纯技术实现角度去描述的,针对实际产品,组网环境可能很复杂,业务可能很庞大,
Page 1 of 7
调测工具VcTester攻略之脚本驱动API测试 密级:公开
需要封装的东西可能很多,有时还有与其它测试工具配合使用的需求。
本文以VcTester现有功能为基础,介绍为适应API测试而做封装的几种实现方法。
VcLib库使用
CSE是一门脚本语言,但目前版本你只能找到一个库模块,即unittest.cse,不像其它脚本语言,如Python、TCL等,提供丰富的库模块(或扩展包)。ezTester官方对此解释是:CSE是由应用驱动它发展、完善的,目前还没到CSE作为一门独立语言提供给大家使用的时候,CSE最终也会提供丰富的库模块的。尽管如此,本人还是向ezTester要到一个适用于Windows的基础库VcLib,其功能对应于VC中如下头文件:
assert.h ctype.h errno.h float.h limits.h locale.h
math.h setjmp.h signal.h stdarg.h stddef.h stdio.h
stdlib.h string.h time.h wchar.h wctype.h
请将如下压缩包中的release目录下的VcLib子目录全部内容(连同VcLib路径)拷贝到VcTester安装路径的lib子目录后,即可使用这个库。
压缩包中source目录下附有源码,如果大家感兴趣,自行研究一下,依样画葫芦扩展自己的库模块。不过,ezTester未正式发行这个库,当前几个版本能用(V5.1.0、5.1.1、5.1.2),后续版本是否一直能用我可不打包票。
使用VcLib比较简单,把相应头文件include进来,你可以调用相关API函数了,比如: #include ”stdio.h”;
printf(”I am %d years old\n”,10);
打印输出封装
习惯C++编程的人喜欢用“cout << msg”形式打印,很少用printf,既然VcTester没什么库模块支持这种“<<”定向输出,我们自己封装一个,如下:
Page 2 of 7
调测工具VcTester攻略之脚本驱动API测试 密级:公开
#include ”stdio.h”;
#define endl = "\n";
class MyStdOut:
func `operator<<`(me,x) as MyStdOut&:
printf("%s",str(x));
return me;
end;
end;
cout as MyStdOut(); 运行如下脚本,看看好不好使:
cout << "at line " << 1 << endl << "at line " << 2 << endl;
更多封装
API测试中经常要读写数据文件,读写INI配置,查询数据库等,下面我们借助VcTester自身支持映射机制,把C/C++函数映射为CSE脚本对象,然后用CSE脚本稍作封装让它好用一点。
举例来说,现在要封装INI读配置的函数,从INI文件读取一个int值的API是:
UINT GetPrivateProfileInt(
LPCTSTR lpAppName, // address of section name
LPCTSTR lpKeyName, // address of key name
INT nDefault, // return value if key name is not found
LPCTSTR lpFileName // address of initialization filename
);
在被测
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
中,我们增加如下代码:
UINT GetPrivateProfileInt_(LPCTSTR lpAppName,
LPCTSTR lpKeyName,
INT nDefault,
LPCTSTR lpFileName)
{
return GetPrivateProfileInt(lpAppName,lpKeyName,
nDefault,lpFileName);
}
不做特别的事情,仅定义一个函数GetPrivateProfileInt_,这个函数直接调GetPrivateProfileInt,也就是说,仅仅给Windows API函数套一顶帽子。然后编译链接,在VcTester中就可以按如下方式调用这个函数了:
Page 3 of 7
调测工具VcTester攻略之脚本驱动API测试 密级:公开
vd.GetPrivateProfileInt_("custom","number",3,"c:\\MyConfig.ini"); 这样的API还不够好用,我们再用CSE把它封装成类对象方式,比如: class TIniFile:
declare m_file as TCharArray;
func TIniFile(me,sFile):
me.m_file = sFile;
end;
func ReadInt(me,sSect,sName,iDefault=0) as TUint:
return vd.GetPrivateProfileInt_(sSect,sName,iDefault,me.m_file);
end;
end;
封装后按如下方式使用:
ini as TIniFile("c:\\ MyConfig.ini");
ini.ReadInt("custom","number");
上述封装按VcTester公开的规格进行,比较简单吧,会用VcTester就会自己封装。 为方便大家使用,我把已封装好的一个base库共享出来。
大家把压缩包拆下,将其中BaseSupport.cpp文件添加到你的被测工程中,把base.cse拷贝到VcTester安装路径的lib目录下。base库已包含INI配置文件读写,MySql数据库查询,只需用“uses ”base.cse”;”语句将本模块导入进来就能使用了。使用方法如下:
Page 4 of 7
调测工具VcTester攻略之脚本驱动API测试 密级:公开
uses ”base.cse”;
ini as TIniFile("c:\\ MyConfig.ini");
ini.ReadInt("custom","number");
ini.WriteInt("custom","number",30);
ini.ReadStr("custom","name","No-Name");
ini.WriteStr("custom","name","Jack");
ini.AllSect();
ini.OneSect("custom");
SQL.connect(”127.0.0.1”,”root”,”root”,”MyDB”,3306);
if SQL.query("select * from t_a_table"):
iRow as TInt = SQL.RowCount() as TInt;
iCol as TInt = SQL.FieldCount() as TInt;
for i in range(iRow):
row as TChar** = SQL.GetRow();
if row == NULL: break; end;
print("row",i);
for j in range(iCol):
print(" field %d: %s" % [j,row[j]]);
end;
end;
end;
关于API测试更多信息
上面我给大家介绍的是,如何以最廉价方式(事实上你不必为此付费)快速将API测试在你的产品做起来。如果想把API测试做得更高效、更完善,建议采用ezTester的VcAuto工具,VcAuto支持表格驱动、ActionWord驱动、数据驱动等自动化测试支持,测试人员主要通过编制Excel表格完成各项测试设计。
Page 5 of 7