国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

詳解C++ Server測試過程

開發 后端
我們將談談C++ Server測試過程,下面是筆者在開發中使用的測試方法,拋磚引玉,和大家交流下。

做好C++ Server測試也是進行C++開發過程中的重要步驟,本文將從開發階段、白盒測試階段、內存測試階段等幾個方面開始討論。

在C++的世界里,程序設計的優雅讓位于程序的穩定性、健壯性。“好程序是測出來的”這句話在C++領域里得到了充分體現。下面是我在開發中使用的測試方法,拋磚引玉,和大家交流下。

C++ Server測試期間,關閉對core文件的限制,使用命令:ulimit -c unlimited

(1)開發階段

使用cppunit維護測試用例。我一般是用于測試解析類、算法類。

從http://sourceforge.net/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類似。

  1. #include "class1.h"  
  2. #include   
  3. #include "cppunit/TestRunner.h"  
  4. #include "cppunit/TestResult.h"  
  5. #include "cppunit/TestResultCollector.h"  
  6. #include "cppunit/extensions/HelperMacros.h"  
  7. #include "cppunit/BriefTestProgressListener.h"  
  8. #include "cppunit/extensions/TestFactoryRegistry.h"  
  9. #include "cppunit/TextOutputter.h"  
  10. #include "cppunit/CompilerOutputter.h"  
  11. #include "cppunit/TestCaller.h"  
  12. class testClass1:public CPPUNIT_NS::TestFixture  
  13. {  
  14. CPPUNIT_TEST_SUITE(testClass1);  
  15. CPPUNIT_TEST(testCase1);  
  16. CPPUNIT_TEST(testCase2);  
  17. CPPUNIT_TEST_SUITE_END();  
  18. public:  
  19. virtual void setUp(){}  
  20. virtual void tearDown(){}  
  21. void testCase1()  
  22. {  
  23. testClass1 a;  
  24. a.oper..;  
  25. CPPUNIT_ASSERT_EQAL(a.get..,);  
  26. }  
  27. void testCase2()  
  28. {  
  29. CPPUNIT_ASSERT(==);  
  30. }  

test.cpp代碼如下:

  1. #include "testClass1.h"  
  2. #include "testClass2.h"  
  3. #include   
  4. #include "cppunit/TestRunner.h"  
  5. #include "cppunit/TestResult.h"  
  6. #include "cppunit/TestResultCollector.h"  
  7. #include "cppunit/extensions/HelperMacros.h"  
  8. #include "cppunit/BriefTestProgressListener.h"  
  9. #include "cppunit/extensions/TestFactoryRegistry.h"  
  10. #include "cppunit/TextOutputter.h"  
  11. #include "cppunit/CompilerOutputter.h"  
  12. #include "cppunit/TestCaller.h"  
  13. CPPUNIT_TEST_SUITE_REGISTRATION(testClass1);  
  14. CPPUNIT_TEST_SUITE_REGISTRATION(testClass1);  
  15. int main()  
  16. {  
  17. CPPUNIT_NS::TestResult controller;  
  18. CPPUNIT_NS::TestResultCollector result;  
  19. controller.addListener( &result );  
  20. CPPUNIT_NS::TestRunner runner;  
  21. runner.addTest( CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest() );  
  22. runner.run( controller );  
  23. CPPUNIT_NS::CompilerOutputter out( &result, std::cout );  
  24. out.write();  
  25. return 0;  

makefile文件如下:

EXE=test

SRC=test.cpp

INC_PATH=-I ../src -I (cppunit頭文件的目錄) -I(依賴的其他頭文件路徑)

LIB_PATH=-L (cppunit動態庫所在的目錄) -L (依賴的其他庫所在目錄)

LIB=-lcppunit -ldl

all:

g++ $(SRC) $(LIB_PATH) $(LIB) $(INC_PATH) -o $(EXE)

再有新的需要測試類,增加相應的測試類,稍微修改下test.cpp即可(增加一句#include,一句CPPUNIT_TEST_SUITE_REGISTRATION)。

保證開發結束后,解析類、算法類等不會有錯誤。

(2)白盒測試階段

這個基本是功能邏輯性測試,檢測所有數據結構按要求變化以及保證各線程之間變化的一致性。這是最基本也是最全面的一次測試,保證測試的功能覆蓋率100%。白盒測試期間可以在代碼里加一些宏編譯選項或者增加程序交互功能用于觀察所有數據結構的變化。

保證測試完畢沒有功能性、邏輯性的錯誤。

(3)內存測試階段

使用valgrind檢測顯式內存泄漏、內存讀寫錯誤。

從http://www.valgrind.org/下載最新版本,解壓,看安裝文檔,一般是./configure & make & make install。

檢測內存一般使用命令valgrind --tool=memcheck -v --leak-check=full ./待測程序錯誤的地方會用==×××==(×××表示數字)標出。

使用一路模擬客戶端做陪測。保證測試完畢,單路客戶端陪測的情況下沒有任何的顯式內存泄漏,沒有任何的內存讀寫錯誤。

(4)寫批量客戶端模擬程序

建議熟悉一門方便socket編程的腳本語言,推薦perl。腳本語言簡單,實現快速,特適合做陪測。

首先寫一個能讀取配置文件信息,按配置文件的要求向相應的server,按配置文件的流程發送信令的perl程序。

下面是我rtsp相關的一個server陪測的配置文件:

ip=127.0.0.1

port=9115

url=rtsp://172.24.202.190: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)代碼覆蓋率測試。gcov

gcov是隨gcc安裝的,可以檢查陪測程序對目標程序的代碼覆蓋情況。

不斷修改測試腳本,保證測試盡量全面。代碼被執行的次數也可以做為以后性能測試的一個參考。

(8)性能測試。gprof

同gcov一樣,gprof也是隨gcc安裝的,它可以檢測目標程序中所有函數的調用時間,并根據消耗時間排序,方便找出性能瓶頸。

找出系統的主要性能瓶頸,經過性能測試后,一般會發現影響系統的主要因素還是數據結構和算法。

C++ Server測試期間,任何的coredump/任何的內存讀寫異常,務必處理掉。墨菲法則說,一個事情如果有可能變糟,事實則是會變的更糟。任何一個微小的、出現幾率極小的bug,如果不在研發測試階段解決,都可能造成以后更大代價的返工,甚至給客戶的運營帶來災難。希望在每個人身上生效的都是馬太效應,而不是墨菲法則。

【編輯推薦】

  1. 關于new和delete 一些不得不說的事
  2. 《Java編程思想》作者:C++不垃圾,只是Java很傲慢
  3. Java與C++語言在作用域上的差異淺析
  4. C/C++使用多種方法獲取文件大小代碼
  5. C++類成員函數的重載、覆蓋與隱藏
責任編輯:彭凡 來源: ITPUB
相關推薦

2011-07-28 15:47:20

IOS 程序 測試

2011-06-08 16:52:16

軟件測試

2010-04-22 10:22:04

負載均衡器

2010-01-15 14:10:42

C++單元測試

2010-11-11 09:40:34

BUG

2010-01-13 16:54:29

C++測試

2011-07-04 14:08:02

C++

2021-12-21 15:31:10

C++語言指針

2011-04-20 09:50:45

Virtual

2009-06-22 11:15:00

J2EE應用測試

2023-11-09 23:56:21

2010-02-02 11:16:28

C++異常

2024-01-22 10:49:55

C++for循環

2010-01-18 16:17:53

C++代碼

2019-06-04 06:02:25

滲透測試漏洞腳本

2010-08-12 18:08:03

ibmdwRational

2010-09-16 17:53:12

Java編譯

2012-06-06 09:49:52

技術面試

2011-03-30 17:20:18

C++引用

2024-01-18 10:27:30

C++引用函數
點贊
收藏

51CTO技術棧公眾號

能在线观看的av| 免费观看黄色网| 巨人精品**| 在线日韩精品视频| 91极品在线| 91成人免费网站| 性网站在线免费观看| 中文字幕av一区 二区| 青青青国产在线观看| 精品中文av资源站在线观看| 日韩av高清在线播放| 亚洲乱码久久| 国产亚洲福利社区| 亚洲美女少妇无套啪啪呻吟| 91在线观看免费| 婷婷伊人综合| 91国产丝袜在线放| 欧美日韩一区二区高清| 成人国产精品日本在线| 成人精品电影| 91日韩在线播放| 欧美激情91| 国产精品日韩一区二区| 在线观看一区| 欧美亚洲另类在线一区二区三区| 亚洲欧美日本视频在线观看| 欧美日韩国产精品一区二区| 中文在线一区| 日本欧美色综合网站免费| 久久精品女人| 亚洲春色在线视频| 国产乱国产乱300精品| 男女日批视频在线观看| 91亚洲国产成人精品一区二区三 | 亚洲资源中文字幕| h短视频大全在线观看| 疯狂欧美牲乱大交777| 在线观看h片| 日韩精品高清在线| 日韩在线亚洲| 国产在线高清精品| 天堂蜜桃91精品| 少妇人妻无码专区视频| 自拍偷拍亚洲欧美日韩| 亚洲一区二区三区成人 | 亚洲国产资源| 亚洲变态欧美另类捆绑| 亚洲欧美久久精品| 国产精品爽爽爽| 三级久久三级久久久| 国产精品www在线观看| 亚洲视频网在线直播| 麻豆影视在线| 亚洲人高潮女人毛茸茸| 免费黄色成人| 欧美日韩另类丝袜其他| 99久久精品免费看国产免费软件| www.成人69.com| 337p亚洲精品色噜噜狠狠| 91精品店在线| 91免费观看网站| 国产一本一道久久香蕉| 黄色一级片视频| 欧美va天堂va视频va在线| 国产成人亚洲一区二区三区| 国产精品成人一区| 亚洲综合二区| 色偷偷亚洲第一综合| 日韩亚洲欧美在线| 久久久久观看| 亚洲第一导航| 亚洲午夜私人影院| 日韩脚交footjobhd| 国产精品视频免费在线| 国产做a爰片久久毛片| 人成在线视频| 国产亚洲精品久久久久久牛牛| 成人影视亚洲图片在线| aaa免费在线观看| 欧美日韩性生活视频| 久久亚洲精品中文字幕| 国产精品午夜av在线| 欧美经典一区二区三区| 美女91在线| 国产剧情日韩欧美| 成人免费高清在线| 蜜桃视频在线观看www社区 | 国产欧美日产一区| 黄色网在线播放| 国内精品400部情侣激情| 视频一区欧美日韩| 中文字幕中文字幕在线中文字幕三区| 国产午夜精品视频免费不卡69堂| 狠狠入ady亚洲精品经典电影| 一路向西2在线观看| 日韩乱码在线视频| 亚洲精品欧美| 玖玖在线免费视频| 国语自产精品视频在线看一大j8 | 亚洲欧美久久精品| 日本一区二区三不卡| 亚洲国产日韩综合久久精品| 欧美天堂在线| 久久久久久亚洲精品不卡4k岛国| 亚洲欧洲日产国码二区| 午夜精品久久久久久久久久蜜桃| 成人综合电影| 一区二区高清视频在线观看| 色综合视频一区二区三区44| 午夜精品视频在线观看一区二区| 色综合天天狠狠| 天堂99x99es久久精品免费| 99爱视频在线| 一区二区在线视频| 国产原创一区二区| 成人三级小说| 欧美在线视频二区| 欧美日韩在线播| 欧美日韩福利| 免费一级在线观看| 91久久久精品| 欧美午夜宅男影院在线观看| 精品高清久久| 午夜免费性福利| 国产精品久久99久久| 亚洲精品中文字幕在线观看| 成人精品毛片| 日韩欧美在线免费观看视频| 另类图片亚洲另类| 99久久精品国产毛片| 福利一区和二区| 免费在线观看毛片网站| 欧美丰满少妇xxxx| 亚洲特黄一级片| 日韩在线影视| 免费在线黄色av| 国产精品一区av| 91国偷自产一区二区三区成为亚洲经典| 93在线视频精品免费观看| 最色在线观看| 99久久伊人精品影院| 欧美这里有精品| 欧美一级一区| 欧美成人免费电影| av网站在线观看不卡| 亚洲 日韩 国产第一| 亚洲国产你懂的| 亚洲日韩视频| gratisvideos另类灌满| 国产精品无码电影在线观看| 久久综合免费视频| 一区二区三区欧美在线观看| 国产精品久久久久蜜臀| 国产日产一区二区| 黄色一级片av| 68精品国产免费久久久久久婷婷| 亚洲v精品v日韩v欧美v专区| 亚洲国产精品第一区二区三区| 激情av在线| 久久久久久久久久久久久久国产| 国产成人精品在线视频| 亚洲高清一区二区三区| 亚洲欧美日韩在线观看a三区| 欧美影视资讯| 国产三级香港三韩国三级| 亚洲综合小说区| 日韩欧美国产麻豆| 国产精品1区2区| 在线日韩一区| 成人av福利| 国产一区视频免费观看| 91色琪琪电影亚洲精品久久| 亚洲第一av网| 久久久久久久久蜜桃| 国产精品久久久久一区二区三区厕所| 四虎影院观看视频在线观看| 日韩av播放器| 成人免费看片网址| 精品国产欧美一区二区五十路| 亚洲欧美韩国综合色| 国产综合自拍| 在线免费观看亚洲| 日韩精品123| 丰满人妻一区二区三区53号| 51色欧美片视频在线观看| 欧美日韩国产首页在线观看| 成人免费毛片aaaaa**| 精品久久久亚洲| av影院在线| 超碰96在线| 国产在线观看欧美| 国产女同一区二区| 亚洲精品中文字幕有码专区| 夜色激情一区二区| 久久99最新地址| 韩日一区二区三区| 污片视频在线免费观看| 午夜视频99| 欧美极品少妇无套实战| 91久久精品在线|