##第一次做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
分享到:
相关推荐
总之,“cpp-C编译器测试用例最小测试运行器和公共测试结果的公共数据库”为C语言编译器的测试提供了一整套完善的解决方案,不仅有助于提升编译器的质量,也有助于提高整体的编程环境和代码质量。通过深入研究和应用...
首先,ncnn的设计理念在于提供一个轻量级、高效的解决方案,适用于资源有限的移动设备。它摒弃了对第三方库的依赖,如CUDA、OpenCV等,以减少编译复杂性和运行时的内存占用。这一特性使得ncnn在集成到移动应用中时...
在C++项目中,通过`arun11299-cpp-jwt-1cbc5eb`这个库版本,开发者可以方便地集成JWT功能,提高应用的安全性。该库可能包含了头文件、源代码、示例代码以及构建脚本,使得在各种C++环境中集成和测试变得简单。为了...
"CPP工具大全.zip"是一个专为C++程序员设计的软件下载安装包,它包含了一系列有助于提升编码、调试、测试和优化C++项目的实用工具。下面我们将详细探讨这些工具及其功能,帮助你更好地理解和利用这些资源。 1. **...
5. **C++11及更高版本**:cpp-hi-nginx可能使用了C++11或更新的标准,需要熟悉这些新特性的使用,如智能指针、lambda表达式、右值引用等。 6. **多线程与并发**:Nginx处理高并发请求的能力强大,理解C++中的线程...
"yaml" 标签表明这个库与YAML相关,而 "cpp" 明确指出这是针对C++语言的实现。 从压缩包文件名称 "yaml-cpp-master" 我们可以推断,这包含了yaml-cpp库的主分支源代码。通常,"master" 分支代表了项目的最新稳定...
"cpp-Leetcode问题的完整解决方案每日更新"这个项目,显然是一个专门针对 LeetCode 题目的 C++ 解决方案集合,且每天都会更新,确保包含最新的题目和解法。 首先,让我们来了解一下 LeetCode 的核心价值。LeetCode ...
cpp-ratelimit是一个基于C语言实现的高性能速度限制器,主要设计用于限制网络请求的频率,以防止过载服务或保护系统免受恶意攻击。这个库由Smyte团队开发,旨在提供轻量级且高效的限速解决方案。下面将详细讨论cpp-...
在这个项目中,我们将深入探讨如何使用C++语言来实现这一强大的工具。 **C++实现的关键组件** 1. **深度学习模型**:RetinaFace的核心是基于深度学习的模型,通常采用预训练的神经网络,如SSD(Single Shot ...
cpp-libuhttpd是一个专为嵌入式Linux系统设计的轻量级、高性能的HTTP服务器库,它利用了libev事件库和http-parser解析器,提供了一个简洁而强大的HTTP服务解决方案。在本文中,我们将深入探讨cpp-libuhttpd的关键...
本文将深入探讨一种名为“cpp-x86虚拟化抽象框架”的技术,它是用C++编写的,专注于x86架构下的虚拟化解决方案。 一、虚拟化基础 虚拟化技术的核心是将物理硬件资源(如CPU、内存和磁盘)抽象为虚拟资源,使得每个...
**标题详解:** "Log4cpp 6.0版本(已...综上所述,这个压缩包提供的log4cpp 6.0版本是一个经过验证、可直接使用的日志解决方案,涵盖了日志记录的基本要素,同时也具备一定的灵活性和可扩展性,适用于多种C++项目。
CDT是Eclipse专门为C和C++开发者设计的一套工具集,提供了代码编辑、调试、构建以及项目管理等功能。 在Eclipse CDT中,主要包含以下核心功能: 1. **代码编辑器**:提供语法高亮、自动完成、代码折叠、错误检查等...
《在Windows环境下构建json-rpc-cpp项目》 json-rpc-cpp是一个强大的开源库,主要用于实现基于JSON-RPC协议的客户端和服务器端通信。它最初设计为在Linux环境中编译,但通过适当的修改,我们可以使其在Windows系统...
在文件结构方面,提供的 "magma-master" 压缩包很可能是cpp-magmaserverdaemon的源代码仓库主分支,包含项目的核心代码、配置文件、测试用例以及其他辅助资源。开发者可以从中获取项目的完整实现,进行编译、调试和...
cpp-LEAR正是针对这一需求,提供了高效的解决方案。 一、cpp-LEAR的设计理念 cpp-LEAR的设计理念是简洁而高效。它使用C++语言编写,充分利用了C++的特性,如模板、STL(标准模板库)和异步编程,以实现高性能和低...
【cpp-OpenSourceCarControl汽车自动驾驶相关的软硬件项目】是一个开源项目,专注于为汽车自动驾驶提供全方位的软硬件解决方案。这个项目结合了C++编程语言,展现了C/C++在汽车控制领域的应用,同时也涉及到了开发...
具体实现上,cpp-ShuffleNet项目可能包含了以下组件: 1. **模型定义**:在`prototxt`文件中,定义了ShuffleNet的网络结构,包括卷积层、池化层、激活函数(如ReLU)、Grouped Convolution和Channel Shuffle操作等...
通过这些功能,开发者可以对比不同实现方案的性能,从而选择最佳实践。 **使用方法** 1. **安装与集成**: `google-benchmark`通常可以通过包管理器(如`vcpkg`、`conan`或`cmake`)轻松添加到项目中。首先,你需要...