Wings-让单元测试智能全自动生成

2018-08-07 13:19:06|?次阅读|上传:teststars【已有?条评论】发表评论

关键词:C/C++, MySQL|来源:唯设编程网

2     驱动程序的自动生成

在上文中,针对全局变量和函数的结构信息,进行了分析和提取,以下将利用提取到保存在PSD中的信息,完成被测源程序的驱动框架整体生成。

生成主要分为以下几个方面:

Ø  全局变量的声明

Ø  函数参数的赋值操作,针对函数参数的个数,依次赋值操作

Ø  全局变量的赋值,针对分析得到函数使用的全局变量的个数,依次进行赋值操作

Ø  原函数的调用

一些需要注意点如下:

●驱动生成过程中,针对一些特殊函数,例如main函数,static函数等,因为外部无法访问到,驱动生成暂时不做处理。

●针对每个被测源文件,生成对应的一个驱动文件。

●驱动控制包含在Driver_main.cpp中,可以通过宏自动配置函数的测试次数

由以上源程序,生成的驱动函数如下:

●所有变量的命名为在原变量的名称前,添加_

●通过获取生成对应的测试数据,对变量依次进行赋值操作

●针对系统内置参数,以及用户比较特殊的参数,通过模板方式统一配置赋值方式。

●对被测函数进行参数赋值与调用。

3     测试数据自动生成

测试用例的自动生成,利用提取到保存在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

针对每个编译单元,默认生成一组所有函数的对应的测试数据文件,值生成可以通过配置次数进行修改。

4     Mysql程序测试结果展示

如何完成驱动框架的生成,下面针对开源程序MySQL完整的生成过程,进行详细说明。

以下是Wings测试Mysql的主界面图:

点击文件按钮,设置被测源程序的工程目录。设置完成之后,点击功能操作,功能操作主要包括参数解析、驱动生成、值文件生成以及模板添加四个操作。分析对应生成以下几个文件夹:

其中,参数解析模块,对应生成FunXml以及GlobalXml,分别存放提取到的每个编译单元的函数信息及全局变量的信息。

驱动生成模块,会对应生成Wings_Projects文件夹,其中存放每个编译单元的驱动文件

值生成模块,存放每个编译单元的生成的测试数据。

下图为Mysql对应加载的驱动文件结构体信息,左侧导航树为生成的对应驱动文件,包含每个编译单元的函数以及函数的参数、全局变量的信息。点击其中某个编译单元,可以加载对应的驱动文件以及对应的值文件。

 

以上是Mysql的整体生成对应的驱动文件以及值文件,针对以下代码详细说明驱动文件。

●针对每个编译单元,全局变量的引用通过extern的方式。

●驱动函数,统一命名为Driver_XXX的方式,JSON作为获取测试数据的方式,times代表单函数的测试次数。

●针对每个参数的赋值操作,利用解析到的PSD存储格式,对每层结构依次进行赋值操作。

Wings的应用非常简单,下面是以在Visual Studio 2015中可正常编译的Mysql 代码为例,生成的测试数据的统计指标,整个生成过程无需任何人工介入,仅需要制定所需要生成驱动的源码的路径即可。

发表评论0条 】
网友评论(共?条评论)..
Wings-让单元测试智能全自动生成