




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件测试系列之C+ Server测试全攻略发表于:2011-11-29来源:未知作者:领测软件测试网采编点击数:1075标签:测试策略在c+的世界里,程序设计的优雅让位于程序的稳定性、健壮性。“好程序是测出来的”这句话在C+领域里得到了充分体现。下面是我在开发中使用的测试方法,抛砖引玉,和大家交流下。 测试期间,关闭对core文件的限制,使用命令:ulimit -c unlimited在c+的世界里,程序设计的优雅让位于程序的稳定性、健壮性。“好程序是测出来的”这句话在C+领域里得到了充分体现。下面是我在开发中使用的测试方法,抛砖引玉,和大家交流下。测试期间,关闭对core文件的限制,使用命令:ulimit -c unlimited(1)开发阶段使用cppunit维护测试用例。我一般是用于测试解析类、算法类。从/projects/cppunit/下载最新版本,解压,看安装文档,一般是./configure & make & make install。下面举例说明我使用cppunit的方法。假设自己的源码位于src目录下,里面有class1.h/class1.cpp/class2.h/class2.cpp。相对src建立平级目录test存放测试工程,为class1/class2分别建立测试类文件testClass1.h/testClass2.h,建立main函数所在文件test.cpp、makefile。testClass1.h代码如下,testClass2.h类似。#include class1.h#include#include cppunit/TestRunner.h#include cppunit/TestResult.h#include cppunit/TestResultCollector.h#include cppunit/extensions/HelperMacros.h#include cppunit/BriefTestProgressListener.h#include cppunit/extensions/TestFactoryRegistry.h#include cppunit/TextOutputter.h#include cppunit/CompilerOutputter.h#include cppunit/TestCaller.hclass testClass1:public CPPUNIT_NS:TestFixtureCPPUNIT_TEST_SUITE(testClass1);CPPUNIT_TEST(testCase1);CPPUNIT_TEST(testCase2);CPPUNIT_TEST_SUITE_END();public:virtual void setUp()virtual void tearDown()void testCase1()testClass1 a;a.oper.;CPPUNIT_ASSERT_EQAL(a.get.,);void testCase2()CPPUNIT_ASSERT(=);test.cpp代码如下:#include testClass1.h#include testClass2.h#include#include cppunit/TestRunner.h#include cppunit/TestResult.h#include cppunit/TestResultCollector.h#include cppunit/extensions/HelperMacros.h#include cppunit/BriefTestProgressListener.h#include cppunit/extensions/TestFactoryRegistry.h#include cppunit/TextOutputter.h#include cppunit/CompilerOutputter.h#include cppunit/TestCaller.hCPPUNIT_TEST_SUITE_REGISTRATION(testClass1);CPPUNIT_TEST_SUITE_REGISTRATION(testClass1);int main()CPPUNIT_NS:TestResult controller;CPPUNIT_NS:TestResultCollector result;controller.addListener( &result );CPPUNIT_NS:TestRunner runner;runner.addTest( CPPUNIT_NS:TestFactoryRegistry:getRegistry().makeTest() );runner.run( controller );CPPUNIT_NS:CompilerOutputter out( &result, std:cout );out.write();return 0;makefile文件如下:EXE=testSRC=test.cppINC_PATH=-I ./src -I (cppunit头文件的目录) -I(依赖的其他头文件路径)LIB_PATH=-L (cppunit动态库所在的目录) -L (依赖的其他库所在目录)LIB=-lcppunit -ldlall:g+ $(SRC) $(LIB_PATH) $(LIB) $(INC_PATH) -o $(EXE)再有新的需要测试类,增加相应的测试类,稍微修改下test.cpp即可(增加一句#include,一句CPPUNIT_TEST_SUITE_REGISTRATION)。保证开发结束后,解析类、算法类等不会有错误。(2)白盒测试阶段这个基本是功能逻辑性测试,检测所有数据结构按要求变化以及保证各线程之间变化的一致性。这是最基本也是最全面的一次测试,保证测试的功能覆盖率100%。白盒测试期间可以在代码里加一些宏编译选项或者增加程序交互功能用于观察所有数据结构的变化。保证测试完毕没有功能性、逻辑性的错误。(3)内存测试阶段使用valgrind检测显式内存泄漏、内存读写错误。从/下载最新版本,解压,看安装文档,一般是./configure & make & make install。检测内存一般使用命令valgrind -tool=memcheck -v -leak-check=full ./待测程序错误的地方会用=(表示数字)标出。使用一路模拟客户端做陪测。保证测试完毕,单路客户端陪测的情况下没有任何的显式内存泄漏,没有任何的内存读写错误。(4)写批量客户端模拟程序建议熟悉一门方便socket编程的脚本语言,推荐perl。脚本语言简单,实现快速,特适合做陪测。首先写一个能读取配置文件信息,按配置文件的要求向相应的server,按配置文件的流程发送信令的perl程序。下面是我rtsp相关的一个server陪测的配置文件: ip= port=9115 url=rtsp:/90:554/asset/service?USERID=320101312345670001ChanelNo-PUID=0-320101000200000001PlayMethod=0下面是我rtsp相关的一个server陪测的配置文件:ip=port=9115url=rtsp:/90:554/asset/service?USERID=320101312345670001&ChanelNo-PUID=0-320101000200000001&PlayMethod=0其中ip是server IP,port是rtsp端口,url是发送信令带的url。表示按顺序发送的信令,这个配置文件表示先发送一个setup,然后sleep 2秒,再发送一个play,然后sleep 2秒,继续.这个程序可作为(3)中的陪测程序。在上面程序的基础上修改,读取配置文件后,死循环按顺序发送信令,假设该程序称做B。写一个新的perl文件,完成如下功能,起几十路使用某配置文件的B程序,sleep几秒后,再起几十路使用其它配置文件的B程序.,或者一起起也可以,自行设计,最后killall所有,从头循环运行。总之尽可能的模拟客户端的所有行为,包括突然断联等,并且保证一定的压力。(5)压力下测试内存继续在valgrind下测试,使用(4)中的测试脚本做配测。保证压力下无异常状态、无数据不一致状态、无显式内存泄漏、无内存读写异常。(6)稳定性以及内存泄漏测试陪测脚本起几百路客户端,保证主程序的cpu占用率在70%以上,持续运行20多小时。测试期间,关注进程对内存的占用率,是保持在恒定水平还是随运行时间的增长而增长。测试完毕,保证主程序负荷运行长时间而不宕机、没有内存泄漏发生。(7)代码覆盖率测试。gcovgcov是随gcc安装的,可以检查陪测程序对目标程序的代码覆盖情况。不断修改测试脚本,保证测试尽量全面。代码被执行的次数也可以做为以后性能测试的一个参考。(8)性能测试。gprof同gcov一样,gprof也是随gcc安装的,它可以检测目标程序中所有函数的调用时间,并根据消耗
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论