2018-08-07 13:19:06|?次阅读|上传:teststars【已有?条评论】发表评论
关键词:C/C++, MySQL|来源:唯设编程网
在上文中,针对全局变量和函数的结构信息,进行了分析和提取,以下将利用提取到保存在PSD中的信息,完成被测源程序的驱动框架整体生成。
生成主要分为以下几个方面:
Ø 全局变量的声明
Ø 函数参数的赋值操作,针对函数参数的个数,依次赋值操作
Ø 全局变量的赋值,针对分析得到函数使用的全局变量的个数,依次进行赋值操作
Ø 原函数的调用
一些需要注意点如下:
●驱动生成过程中,针对一些特殊函数,例如main函数,static函数等,因为外部无法访问到,驱动生成暂时不做处理。
●针对每个被测源文件,生成对应的一个驱动文件。
●驱动控制包含在Driver_main.cpp中,可以通过宏自动配置函数的测试次数
由以上源程序,生成的驱动函数如下:
●所有变量的命名为在原变量的名称前,添加_
●通过获取生成对应的测试数据,对变量依次进行赋值操作
●针对系统内置参数,以及用户比较特殊的参数,通过模板方式统一配置赋值方式。
●对被测函数进行参数赋值与调用。
测试用例的自动生成,利用提取到保存在PSD中的函数信息,进行测试用例数据的生成,以下是图三中PSD格式生成的一组数据,每组数据保存为JSON格式,更容易看到数据的层次关系。
"StructTypeTest30" : { "g_int" : 11624, "mm_struct" : [ { "file" : "NULL", "next" : "NULL", "structone" : { "Dem" : { "a" : 20888, "b" : "A", "c" : 19456 }, "array_one" : [ 24441, 12872 ], "array_two" : [ [ 18675, 30300, 32216, 19566 ], [ 13566, 13319, 11179, 18867 ], [ 30514, 21664, 21641, 28262 ] ], "dy" : 101, "functionPtr" : "NULL", "i_int" : 18271, "point_one" : [ 28024, 32245, 2129 ], "point_two" : [ [ 18165, 32335, 6429 ], [ 30225, 18252, 2764 ], [ 3177, 3622, 29789 ] ], "w" : 16862 } }, { "file" : "NULL", "next" : "NULL", "structone" : { "Dem" : { "a" : 2651, "b" : "7", "c" : 12159 }, "array_one" : [ 1274, 24318 ], "array_two" : [ [ 27944, 1208, 29647, 20840 ], [ 4972, 27297, 17456, 13614 ], [ 22441, 1160, 8940, 29420 ] ], "dy" : 200, "functionPtr" : "NULL", "i_int" : 15434, "point_one" : [ 29394, 3868, 25406 ], "point_two" : [ [ 13575, 14736, 20728 ], [ 9132, 2297, 2113 ], [ 26252, 14896, 10985 ] ], "w" : 12354
针对每个编译单元,默认生成一组所有函数的对应的测试数据文件,值生成可以通过配置次数进行修改。
如何完成驱动框架的生成,下面针对开源程序MySQL完整的生成过程,进行详细说明。
以下是Wings测试Mysql的主界面图:
点击文件按钮,设置被测源程序的工程目录。设置完成之后,点击功能操作,功能操作主要包括参数解析、驱动生成、值文件生成以及模板添加四个操作。分析对应生成以下几个文件夹:
其中,参数解析模块,对应生成FunXml以及GlobalXml,分别存放提取到的每个编译单元的函数信息及全局变量的信息。
驱动生成模块,会对应生成Wings_Projects文件夹,其中存放每个编译单元的驱动文件
值生成模块,存放每个编译单元的生成的测试数据。
下图为Mysql对应加载的驱动文件结构体信息,左侧导航树为生成的对应驱动文件,包含每个编译单元的函数以及函数的参数、全局变量的信息。点击其中某个编译单元,可以加载对应的驱动文件以及对应的值文件。
以上是Mysql的整体生成对应的驱动文件以及值文件,针对以下代码详细说明驱动文件。
●针对每个编译单元,全局变量的引用通过extern的方式。
●驱动函数,统一命名为Driver_XXX的方式,JSON作为获取测试数据的方式,times代表单函数的测试次数。
●针对每个参数的赋值操作,利用解析到的PSD存储格式,对每层结构依次进行赋值操作。
Wings的应用非常简单,下面是以在Visual Studio 2015中可正常编译的Mysql 代码为例,生成的测试数据的统计指标,整个生成过程无需任何人工介入,仅需要制定所需要生成驱动的源码的路径即可。