`
CharlesCui
  • 浏览: 415949 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多

##第一次做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
分享到:
评论
4 楼 ludatong110 2011-01-28  
太厉害了,我以前是搞Java的,C学过一点,C++正在入门。。
3 楼 piao_bo_yi 2010-12-24  
跑题了吧?测试方案在哪里?
2 楼 CharlesCui 2010-12-24  
vim,一般远程登录到linux主机上操作的话,那个机器肯定装了vim,
而且我们的机器太多了,不能每个都装自己喜欢的ide,所以就用通用的vim了。
1 楼 hellojinjie 2010-12-23  
你用的是什么 IDE? 写代码的时候只用 VIM ?

VIM 感觉有点繁琐,

相关推荐

    数据结构实验报告-实现二叉树的基本操作-用顺序存储和链式存储结构

    测试方案。包括详细的测试函数 四.测试结果。对所有操作的测试过程中二叉树的变化截图。 五.二叉树各基本操作时间复杂度与存储结构特点分析及对算法的改进设想。 六.实验总结和体会 实现的基本操作如下: ...

    基于C++实现的HTTP服务器改进版源码+项目使用说明+详细注释.zip

    2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...

    cpp课设_小型电影院售票系统.zip

    毕业设计可以包括文献综述、需求分析、方案设计、实施与测试等多个阶段,以确保整个过程的科学性和系统性。 其次,毕业设计的完成通常需要学生具备一定的独立思考和解决问题的能力。在研究过程中,学生可能需要采用...

    leetcode2sumc-jalgorithmCPP:算法CPP

    与单元测试有一个文件后缀 XXXTest.cpp 对于 src 解决方案: 所有算法都写在头文件中这允许轻松提取该算法所有算法也有自己的命名空间,因此其他算法之间没有交互, 不同于一般的项目。 算法列表目前有: 回溯 动态...

    基于模拟退火算法和登山算法解决流水车间调度问题的最优化方法实验c++源码+代码注释和说明.zip

    `Optimization.cpp`为项目解决方案文件,包含`SA`算法,`HCS`算法的实现及文件预处理方法。 `main.cpp`为主文件,包含项目入口`main`函数和调用算法的`cal_func`函数。 选择数据集 本项目使用给出的数据集`...

    传智播客扫地僧视频讲义源码

    08_C语言和C++语言的关系_工作经验分享 09_namespace和iotream 10_实用性加强_register增强_检测增强 11_struct关键字类型增强 12_c++类型类型检查加强 13_新增数据类型bool类型 14_中午课程回顾 15_c++中的三目...

    大型分布式网站架构与实践

     常见的分布式系统存储解决方案,包括MySQL的分布式扩展、HBase的API及使用场景、Redis的使用等。  如何使用分布式消息系统ActiveMQ来降低系统之间的耦合度,以及进行应用间的通信。  垂直化的搜索引擎在分布式...

    MF创建屏蔽掉系统键的全屏应用程序

    项目名称: SoundContrl框架 版本号: v1.0.1 第一作者: Jef 地址: 中国/江苏 ... 友情提示,如果需要MFC原来的菜单只要到MainFram.cpp里面取消我注释掉的即可。另外发布应用程序时要把Hk.dll一同发布。

    系统:使用现代开发工具(VS 2019,VMware等)从头开始构建的操作系统

    系统此解决方案是我的操作系统项目中使用的基本结构,是从零开始开发的。 我主要使用Windows供电的环境,并且选择使用Visual Studio和VMware来构建和测试我的内核。 它是使用现代选择重建和重新思考操作系统的大型...

    Google C++ 编码规范

    4) dynamic_cast:除测试外不要使用,除单元测试外,如果你需要在运行时确定类型信息,说明设计有缺陷(参考RTTI)。 10. 前置自增和自减(Preincrement and Predecrement) 对于迭代器和其他模板对象使用前缀...

    华为编程开发规范与案例

    在香港项目测试中,发现ISDN话机拨新业务号码时,若一位一位的拨至18位,不会有问题。但若先拨完号码再成组发送,会导致MPU死机。 处理过程: 查错过程很简单,按呼叫处理的过程检查代码,发现某一处的判断有误...

    rar压缩软件.rar

    许多 RAR 命令,例如解压、测试和列表,都允许在压缩文件名中使用通配符。如 在压缩文件名掩码中没有指定扩展名,RAR 会认为是 .rar,所以 * 意味着所有 .rar 扩展名的压缩文件。如果你需要处理所有没有扩展名的...

Global site tag (gtag.js) - Google Analytics