论坛首页 编程语言技术论坛

[分享我的经验]Cpp项目测试方案设计及实现

浏览 3073 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-07-15   最后修改:2010-07-15
C++

##第一次做Cpp项目的测试设计,代码的语法还不熟悉就要操刀设计了,
##我觉得基本功扎实就不用担心用什么工具或者语言,小说中少林寺厉害就厉害在基本功了.

代码结构:



 
bin:
该目录存放的文件是httpd,
这份可执行文件是集成测试的web服务.

build:



 
该目录分两级,
分别存放debug版本和release版本测试代码的编译结果.
测试期间,我们只需要用到debug版本,该版本的代码都是可以通过gdb进行调试的.

data:


 
该目录中各子目录以模块区分,
分别存放各个模块的测试数据,
其余顶层目录中的文件为本测试项目共享测试数据.

include:


 
该目录分两级,

第一级为各个模块编译成可执行文件时所需要的头文件,
此时的编译结果为每个模块一个编译结果,结果中包含该模块的全部测试集.

第二集为bvt测试头文件,
bvt测试头文件和上一层头文件的区别是,bvt的头文件中会注释掉某些测试集或测试用例,
并且会把各个模块的测试代码编译到一个输出文件中去,当执行bvt编译后的文件时,
那些在bvt头文件目录下的各个头文件中没有注释的测试用例就会执行.
这样做最大的好处是,测试代码不需要维护两份,只需要多维护一份头文件即可.

lib:
存放的是测试工程所依赖的第三方库文件

logs:
该目录存放的是集成测试web服务的日志文件

report:


 
该目录存放的是测试报告数据文件,
其中report.xsl是用于渲染测试报告xml文件的样式文件.

source:


 
该目录存放的是各个模块的测试代码,以模块名区分,
以及bvt的入口函数文件,还有utils工具类文件,

以sorce中的webserver测试代码为例:
source/webserver:


 
该模块的类实现必须放到:
<模块名>_test.cpp文件中,
该模块的测试代码放到test_开头的cpp文件中,
该模块编译可执行程序是所需的入口函数必须单独放到main.cpp文件中,绝不可和其它文件混淆.

这样的设计保证了:
1.测试类的实现与测试用例分开.各测试用例所用到测试模块的公共部分可以放到类实现中去,比如setup和teardown函数.
2.做bvt编译的时候,如果多个模块都具有main函数,由于main方法重复定义,编译会无法通过,
3.做bvt编译的时候,负责编译的Makefile可以通过排除式查找,将文件名不为main.cpp代码文件统一编译,

比如可以通过如下简洁的命令实现多个CPP文件的编译:
BVT_CPP=$(shell find $(HOME)/source -name '*.cpp' -type f|grep -v 'main.cpp'|grep -v 'performance.cpp')
这条命令说明:
查找HOME下source目录下名为cpp后缀的非main.cpp文件,并且拍出performance.cpp文件,将剩下的文件作为bvt所需的cpp文件来编译.

views:
该目录存放了集成测试web服务所需要的视图文件.

Makefile:


 
该文件实现各个模块的编译与清理,
共用的部分都定义为一个变量,
需要集成编译的cpp比如bvt的cpp,通过制定上面source目录的规则,让find命令可以将cpp搜索出来,
这样就不需要把很多的cpp文件写死到Makefile中了.

其它依赖:
1.Cppunit1.12.1:本次测试采用Cppunit作为基础框架
2.libcurl:该库实现了http请求的发送以及实现urlencode
3.syslog:测试过程中的详细都输出到同一日志中,由syslog负责收集.
其它

 

集成测试平台:

TestFixure:

左边是测试用例集,每个用例集包含了不同数量的 TestCase ,分别对应被测试的各个模块,

         performance_test 是性能测试用例集,不单独对应某个模块)

 

ExecStdout:

         右边是每个测试用例集的执行结果,可以通过点击每个用例集右边的超链接 Run 来执行某个用例集。

         (需要注意 的是, webserver_test 用例最多,并且包含很多大文本测试,执行起来速度很慢,要耐心等待)

 


 

Run:

测试执行,当点击每个测试集后面的 Run 时,页面会弹出提示,告诉你耐心等待。

(大家可以拿 translation_engine_test 来试用下,该用例执行速度很快)

 

测试执行结束后,系统会跳出提示框通知执行者 Case 执行完毕,并且可以在 ExecStdout 中看到执行的结果。

执行结果的最后,目前有如下重要的信息:

 

0.01user 0.00system 0:04.08elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k

 

0inputs+0outputs (0major+1649minor)pagefaults 0swaps

 

这两行信息包含了该测试集的 CPU 执行时间,用户态时间和内核态时间,还可以检测该程序所用的私有数据区大小,私有堆栈大小, Socket 输入输出字节数,文件读写 IO 情况等。

 



 

 

 

 

 

Report:

该区域展示的是某个模块的CppUnit测试执行报告。

 


  • 大小: 25.6 KB
  • 大小: 10.6 KB
  • 大小: 20.1 KB
  • 大小: 51.9 KB
  • 大小: 20.9 KB
  • 大小: 20.5 KB
  • 大小: 46.3 KB
  • 大小: 13.4 KB
  • 大小: 44.1 KB
  • 大小: 24.9 KB
  • 大小: 37 KB
  • 大小: 81.8 KB
  • 大小: 30.8 KB
  • 大小: 34.4 KB
  • 大小: 25 KB
  • 大小: 121.7 KB
  • 大小: 63.1 KB
  • 大小: 63.7 KB
  • 大小: 68.3 KB
  • 大小: 71.2 KB
  • 大小: 100.9 KB
   发表时间:2010-12-23  
你用的是什么 IDE? 写代码的时候只用 VIM ?

VIM 感觉有点繁琐,
0 请登录后投票
   发表时间:2010-12-24  
vim,一般远程登录到linux主机上操作的话,那个机器肯定装了vim,
而且我们的机器太多了,不能每个都装自己喜欢的ide,所以就用通用的vim了。
0 请登录后投票
   发表时间:2010-12-24  
跑题了吧?测试方案在哪里?
0 请登录后投票
   发表时间:2011-01-28  
太厉害了,我以前是搞Java的,C学过一点,C++正在入门。。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics