一種軟件性能測(cè)試模擬并發(fā)方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種軟件性能測(cè)試模擬并發(fā)方法,具體包括以下步驟:步驟1:讀取用戶輸入的用戶配置信息;步驟2:存儲(chǔ)用戶需求結(jié)構(gòu)體到共享內(nèi)存模塊,建立映射;步驟3:接收并發(fā)用戶的業(yè)務(wù)請(qǐng)求,根據(jù)并發(fā)用戶的數(shù)量和用戶需求結(jié)構(gòu)體創(chuàng)建至少一個(gè)測(cè)試進(jìn)程;步驟4:創(chuàng)建測(cè)試線程;步驟5:每個(gè)測(cè)試線程處理一個(gè)用戶的業(yè)務(wù)請(qǐng)求,達(dá)到退出條件,測(cè)試線程退出;步驟6:運(yùn)行結(jié)束,各測(cè)試進(jìn)程中測(cè)試線程運(yùn)行完畢后依次退出;步驟7:存儲(chǔ)分析并統(tǒng)計(jì)各項(xiàng)業(yè)務(wù)相關(guān)數(shù)據(jù),結(jié)束。本發(fā)明詮釋了如何模擬用戶并發(fā),防止發(fā)生瓶頸,達(dá)到利用少量的硬件資源模擬高并發(fā)場(chǎng)景;保證并發(fā)穩(wěn)定性;實(shí)現(xiàn)對(duì)不同用戶業(yè)務(wù)的支持;為定位問題和縮短開發(fā)周期提供幫助。
【專利說明】一種軟件性能測(cè)試模擬并發(fā)方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種軟件性能測(cè)試模擬并發(fā)方法及系統(tǒng),屬于計(jì)算機(jī)【技術(shù)領(lǐng)域】。
【背景技術(shù)】
[0002]對(duì)于軟件產(chǎn)品性能評(píng)測(cè)并發(fā)方法,其中經(jīng)典的場(chǎng)景為:并發(fā)的用戶請(qǐng)求場(chǎng)景,例如5000個(gè)用戶同時(shí)進(jìn)行提交電話繳費(fèi)服務(wù)。其中如何使用盡量少的計(jì)算機(jī),平穩(wěn)、準(zhǔn)確的模擬用戶操作行為成為行業(yè)難題。
[0003]計(jì)算機(jī)硬件配置越來(lái)越高,可供程序分配的資源越來(lái)越多,而測(cè)試進(jìn)程是可分配硬件資源的最小單位,多測(cè)試進(jìn)程可盡量多的分配到硬件資源,模擬高用戶并發(fā)場(chǎng)景下多測(cè)試進(jìn)程具有技術(shù)優(yōu)勢(shì)。
[0004]操作系統(tǒng)在內(nèi)存保護(hù)模式下運(yùn)行,測(cè)試進(jìn)程擁有獨(dú)立的邏輯內(nèi)存空間,多測(cè)試進(jìn)程互相之間不能直接訪問。而現(xiàn)存的免費(fèi)性能測(cè)試工具都使用單測(cè)試進(jìn)程架構(gòu)。無(wú)法充分申請(qǐng)硬件資源,單機(jī)模擬用戶的并發(fā)數(shù)容易達(dá)到上限,且高并發(fā)時(shí)CPU時(shí)間片分配不足,運(yùn)行精度低。
[0005]此發(fā)明采用多測(cè)試進(jìn)程方式,并且解決了測(cè)試進(jìn)程之間通訊的問題,用來(lái)模擬用戶并發(fā)行為。與之類似的有Windows平臺(tái)的LoadRunner、WebLoad。
【發(fā)明內(nèi)容】
[0006]本發(fā)明所要解決的技術(shù)問題是,針對(duì)現(xiàn)有技術(shù)中商業(yè)軟件:LoadRunner、WebLoad,但其都屬于商業(yè)軟件,代碼及架構(gòu)屬于商業(yè)秘密,不公開,收費(fèi)昂貴,且不能在Linux系統(tǒng)下運(yùn)行;開源軟件:類似于HttpLoad僅采用單測(cè)試進(jìn)程單測(cè)試線程架構(gòu)屬于假并發(fā),其模型簡(jiǎn)單,準(zhǔn)確率低,無(wú)法保證用戶業(yè)務(wù)的準(zhǔn)確發(fā)送的不足,提供一種詮釋了計(jì)算機(jī)程序如何實(shí)現(xiàn)模擬用戶并發(fā)的軟件性能測(cè)試模擬并發(fā)方法。
[0007]本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種軟件性能測(cè)試模擬并發(fā)方法,具體包括以下步驟:
[0008]步驟1:讀取轉(zhuǎn)換模塊讀取用戶輸入的用戶配置信息,轉(zhuǎn)換為計(jì)算機(jī)可識(shí)別的用戶需求結(jié)構(gòu)體;
[0009]步驟2:共享內(nèi)存模塊存儲(chǔ)用戶需求結(jié)構(gòu)體;
[0010]步驟3:請(qǐng)求接收模塊接收至少一個(gè)并發(fā)用戶的業(yè)務(wù)請(qǐng)求,根據(jù)并發(fā)用戶的數(shù)量和用戶需求結(jié)構(gòu)體創(chuàng)建至少一個(gè)測(cè)試進(jìn)程,使每個(gè)測(cè)試進(jìn)程對(duì)應(yīng)預(yù)設(shè)數(shù)量的并發(fā)用戶,并建立映射,使所有測(cè)試進(jìn)程映射用戶需求結(jié)構(gòu)體;
[0011]步驟4:測(cè)試線程創(chuàng)建模塊在每個(gè)測(cè)試進(jìn)程中創(chuàng)建多個(gè)測(cè)試線程,使每個(gè)并發(fā)用戶對(duì)應(yīng)一個(gè)測(cè)試線程;
[0012]步驟5:業(yè)務(wù)處理模塊使每個(gè)測(cè)試線程單獨(dú)處理一個(gè)用戶的業(yè)務(wù)請(qǐng)求,記錄每次業(yè)務(wù)返回?cái)?shù)據(jù),當(dāng)運(yùn)行次數(shù)達(dá)到預(yù)定次數(shù)或運(yùn)行時(shí)間達(dá)到預(yù)設(shè)時(shí)間時(shí),將共享內(nèi)存模塊置停止標(biāo)志位;[0013]步驟6:檢測(cè)到共享內(nèi)存模塊置停止標(biāo)志位,各測(cè)試進(jìn)程中測(cè)試線程運(yùn)行完畢后依次退出;
[0014]步驟7:分析模塊存儲(chǔ)業(yè)務(wù)返回?cái)?shù)據(jù),分析并統(tǒng)計(jì)各項(xiàng)業(yè)務(wù)相關(guān)數(shù)據(jù),結(jié)束。
[0015]本發(fā)明的有益效果是:并發(fā)框架與LoadRunner在穩(wěn)定性和準(zhǔn)確性方面相當(dāng);使用了多測(cè)試進(jìn)程多測(cè)試線程架構(gòu),合理分配資源,確保每個(gè)測(cè)試進(jìn)程壓力負(fù)載合理,避免了某個(gè)測(cè)試進(jìn)程出現(xiàn)失效,對(duì)整體負(fù)載測(cè)試結(jié)論的影響;多測(cè)試進(jìn)程架構(gòu)保證了負(fù)載生成器可以申請(qǐng)到足夠的系統(tǒng)資源,避免多測(cè)試線程競(jìng)爭(zhēng)造成的資源死鎖對(duì)并發(fā)架構(gòu)的影響;多測(cè)試線程架構(gòu)保證了每個(gè)用戶業(yè)務(wù)都運(yùn)行在獨(dú)立的上下文中,避免了 HTTPL0AD架構(gòu)中用戶業(yè)務(wù)之間響應(yīng)時(shí)間彼此的干擾;在接收到停止發(fā)送命令后,框架不是簡(jiǎn)單的放棄正在發(fā)送中的用戶業(yè)務(wù)請(qǐng)求,而是等待正在發(fā)送中的業(yè)務(wù)請(qǐng)求全部返回,統(tǒng)計(jì)完成后,再退出并發(fā)框架,提高了數(shù)據(jù)統(tǒng)計(jì)精度。
[0016]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
[0017]進(jìn)一步,所述步驟3中每50個(gè)并發(fā)用戶創(chuàng)建一個(gè)測(cè)試進(jìn)程,并發(fā)用戶不足50個(gè)的啟動(dòng)一個(gè)測(cè)試進(jìn)程;并發(fā)模塊啟動(dòng)的測(cè)試進(jìn)程數(shù)P的數(shù)量由以下公式進(jìn)行計(jì)算:
[0018]
【權(quán)利要求】
1.一種軟件性能測(cè)試模擬并發(fā)方法,其特征在于,具體包括以下步驟: 步驟1:讀取轉(zhuǎn)換模塊讀取用戶輸入的用戶配置信息,轉(zhuǎn)換為計(jì)算機(jī)可識(shí)別的用戶需求結(jié)構(gòu)體; 步驟2:共享內(nèi)存模塊存儲(chǔ)用戶需求結(jié)構(gòu)體; 步驟3:請(qǐng)求接收模塊接收至少一個(gè)并發(fā)用戶的業(yè)務(wù)請(qǐng)求,根據(jù)并發(fā)用戶的數(shù)量和用戶需求結(jié)構(gòu)體創(chuàng)建至少一個(gè)測(cè)試進(jìn)程,使每個(gè)測(cè)試進(jìn)程對(duì)應(yīng)預(yù)設(shè)數(shù)量的并發(fā)用戶,并建立映射,使所有測(cè)試進(jìn)程映射用戶需求結(jié)構(gòu)體; 步驟4:測(cè)試線程創(chuàng)建模塊在每個(gè)測(cè)試進(jìn)程中創(chuàng)建多個(gè)測(cè)試線程,使每個(gè)并發(fā)用戶對(duì)應(yīng)一個(gè)測(cè)試線程; 步驟5:業(yè)務(wù)處理模塊使每個(gè)測(cè)試線程單獨(dú)處理一個(gè)用戶的業(yè)務(wù)請(qǐng)求,記錄每次業(yè)務(wù)返回?cái)?shù)據(jù),當(dāng)運(yùn)行次數(shù)達(dá)到預(yù)定次數(shù)或運(yùn)行時(shí)間達(dá)到預(yù)設(shè)時(shí)間時(shí),將共享內(nèi)存模塊置停止標(biāo)志位; 步驟6:檢測(cè)到共享內(nèi)存模塊置停止標(biāo)志位,各測(cè)試進(jìn)程中測(cè)試線程運(yùn)行完畢后依次退出; 步驟7:分析模塊存儲(chǔ)業(yè)務(wù)返回?cái)?shù)據(jù),分析并統(tǒng)計(jì)各項(xiàng)業(yè)務(wù)相關(guān)數(shù)據(jù),結(jié)束。
2.根據(jù)權(quán)利要求1所述的一種軟件性能測(cè)試模擬并發(fā)方法,其特征在于,所述步驟3中每50個(gè)并發(fā)用戶創(chuàng)建一個(gè)測(cè)試進(jìn)程,并發(fā)用戶不足50個(gè)的啟動(dòng)一個(gè)測(cè)試進(jìn)程;并發(fā)模塊啟動(dòng)的測(cè)試進(jìn)程數(shù)P的數(shù)量由以下公式進(jìn)行計(jì)算:
3.根據(jù)權(quán)利要求1或2所述的一種軟件性能測(cè)試模擬并發(fā)方法,其特征在于,所述步驟5具體包括以下步驟: 步驟5.1:業(yè)務(wù)處理模塊使每個(gè)測(cè)試線程單獨(dú)處理一個(gè)用戶的業(yè)務(wù)請(qǐng)求,讀取用戶需求結(jié)構(gòu)體; 步驟5.2:調(diào)用用戶業(yè)務(wù)的庫(kù)文件,初始化業(yè)務(wù)功能; 步驟5.3:執(zhí)行用戶請(qǐng)求的業(yè)務(wù)功能,并記錄運(yùn)行結(jié)果; 步驟5.4:判斷運(yùn)行模式為次數(shù)模式還是時(shí)間模式;如果是次數(shù)模式,進(jìn)行步驟5.5 ;否貝U,進(jìn)行步驟5.8 ; 步驟5.5:將運(yùn)行次數(shù)保存到共享內(nèi)存模塊中,并實(shí)時(shí)更新共享內(nèi)存模塊中的運(yùn)行次數(shù); 步驟5.6:判斷運(yùn)行次數(shù)是否等于預(yù)先保存在共享內(nèi)存模塊中的預(yù)設(shè)次數(shù),如果是,進(jìn)行步驟5.7 ;否則,跳轉(zhuǎn)至步驟5.3 ; 步驟5.7:結(jié)束業(yè)務(wù)功能,發(fā)送業(yè)務(wù)返回?cái)?shù)據(jù)至分析模塊,退出測(cè)試線程,并釋放運(yùn)行所需內(nèi)存; 步驟5.8:判斷運(yùn)行時(shí)間是否等于預(yù)先保存在共享內(nèi)存模塊中的預(yù)設(shè)時(shí)間,如果是,進(jìn)行步驟5.7 ;否則,跳轉(zhuǎn)至步驟5.3。
4.根據(jù)權(quán)利要求3所述的一種軟件性能測(cè)試模擬并發(fā)方法,其特征在于,所述用戶配置信息包括測(cè)試系統(tǒng)地址信息、用戶數(shù)量信息、運(yùn)行時(shí)間和數(shù)據(jù)庫(kù)信息。
5.根據(jù)權(quán)利要求4所述的一種軟件性能測(cè)試模擬并發(fā)方法,其特征在于,所述步驟5處理用戶的業(yè)務(wù)請(qǐng)求的過程中,實(shí)時(shí)存儲(chǔ)用戶的業(yè)務(wù)返回?cái)?shù)據(jù),供實(shí)時(shí)展示和步驟7的統(tǒng)計(jì)分析。
6.根據(jù)權(quán)利要求5所述的一種軟件性能測(cè)試模擬并發(fā)方法,其特征在于,所述步驟6中,每個(gè)測(cè)試線程運(yùn)行完畢依次退出時(shí),實(shí)時(shí)更新共享內(nèi)存模塊中的退出測(cè)試線程數(shù)量,當(dāng)退出測(cè)試線程的數(shù)量等于開始運(yùn)行測(cè)試線程的數(shù)量時(shí),才進(jìn)行步驟8。
7.一種軟件性能測(cè)試模擬并發(fā)系統(tǒng),包括讀取轉(zhuǎn)換模塊、共享內(nèi)存模塊、請(qǐng)求接收模塊、測(cè)試線程創(chuàng)建模塊、業(yè)務(wù)處理模塊和分析模塊; 所述讀取轉(zhuǎn)換模塊用于讀取用戶輸入的用戶配置信息,轉(zhuǎn)換為計(jì)算機(jī)可識(shí)別的用戶需求結(jié)構(gòu)體,并將所述用戶需求結(jié)構(gòu)體發(fā)送至共享內(nèi)存模塊; 所述共享內(nèi)存模塊接收并存儲(chǔ)用戶需求結(jié)構(gòu)體; 所述請(qǐng)求接收模塊用于接收至少一個(gè)并發(fā)用戶的業(yè)務(wù)請(qǐng)求,根據(jù)并發(fā)用戶的數(shù)量和用戶需求結(jié)構(gòu)體創(chuàng)建至少一個(gè)測(cè)試進(jìn)程,使每個(gè)測(cè)試進(jìn)程對(duì)應(yīng)預(yù)設(shè)數(shù)量的并發(fā)用戶,并建立映射,使所有測(cè)試進(jìn)程映射用戶需求結(jié)構(gòu)體; 所述測(cè)試線程創(chuàng)建模塊用于在每個(gè)測(cè)試進(jìn)程中創(chuàng)建多個(gè)測(cè)試線程,使每個(gè)并發(fā)用戶對(duì)應(yīng)一個(gè)測(cè)試線程; 所述業(yè)務(wù)處理模塊用于使每個(gè)測(cè)試線程單獨(dú)處理一個(gè)用戶的業(yè)務(wù)請(qǐng)求,記錄每次業(yè)務(wù)返回?cái)?shù)據(jù),當(dāng)運(yùn)行次數(shù)達(dá)到預(yù) 定次數(shù)或運(yùn)行時(shí)間達(dá)到預(yù)設(shè)時(shí)間時(shí),將共享內(nèi)存模塊置停止標(biāo)志位;業(yè)務(wù)處理模塊檢測(cè)到共享內(nèi)存模塊置停止標(biāo)志位,各測(cè)試進(jìn)程中測(cè)試線程運(yùn)行完畢后依次退出; 所述分析模塊用于存儲(chǔ)業(yè)務(wù)返回?cái)?shù)據(jù),分析并統(tǒng)計(jì)各項(xiàng)業(yè)務(wù)相關(guān)數(shù)據(jù)。
8.根據(jù)權(quán)利要求7所述的一種軟件性能測(cè)試模擬并發(fā)系統(tǒng),其特征在于,所述請(qǐng)求接收模塊將每50個(gè)并發(fā)用戶創(chuàng)建一個(gè)測(cè)試進(jìn)程,并發(fā)用戶不足50個(gè)的啟動(dòng)一個(gè)測(cè)試進(jìn)程;并發(fā)模塊啟動(dòng)的測(cè)試進(jìn)程數(shù)P的數(shù)量由以下公式進(jìn)行計(jì)算:
I N/5O, N能被50整除
P = IrNl'
IlSO + ^ N不能被SO整_: 其中P表示測(cè)試進(jìn)程數(shù)量,N表示并發(fā)用戶數(shù)量。
9.根據(jù)權(quán)利要求7或8所述的一種軟件性能測(cè)試模擬并發(fā)方法,其特征在于,所述業(yè)務(wù)處理模塊具體包括模式判斷模塊、初始化模塊、業(yè)務(wù)執(zhí)行模塊和次數(shù)記錄模塊和時(shí)間判斷模塊; 所述模式判斷模塊用于讀取用戶需求結(jié)構(gòu)體,判斷運(yùn)行模式為次數(shù)模式還是時(shí)間模式,當(dāng)運(yùn)行模式為次數(shù)模式時(shí),業(yè)務(wù)執(zhí)行模塊與次數(shù)記錄模塊數(shù)據(jù)連接;當(dāng)運(yùn)行模式為時(shí)間模式時(shí),業(yè)務(wù)執(zhí)行模塊與時(shí)間判斷模塊數(shù)據(jù)連接; 所述初始化模塊用于調(diào)用用戶業(yè)務(wù)的庫(kù)文件,初始化業(yè)務(wù)功能; 所述業(yè)務(wù)執(zhí)行模塊用于執(zhí)行用戶請(qǐng)求的業(yè)務(wù)功能,并記錄運(yùn)行結(jié)果,并將運(yùn)行結(jié)果發(fā)送至分析模塊; 所述次數(shù)記錄模塊用于記錄業(yè)務(wù)執(zhí)行模塊執(zhí)行用戶請(qǐng)求的業(yè)務(wù)功能的次數(shù),并將運(yùn)行次數(shù)保存到共享內(nèi)存模塊中,并實(shí)時(shí)更新共享內(nèi)存模塊中的運(yùn)行次數(shù);當(dāng)運(yùn)行次數(shù)等于預(yù)先保存在共享內(nèi)存模塊中的預(yù)設(shè)次數(shù)時(shí),結(jié)束業(yè)務(wù)功能,退出測(cè)試線程,并釋放運(yùn)行所需內(nèi)存;否則,返回繼續(xù)執(zhí)行的請(qǐng)求到業(yè)務(wù)執(zhí)行模塊; 所述時(shí)間判斷模塊用于判斷運(yùn)行時(shí)間是否等于預(yù)先保存在共享內(nèi)存模塊中的預(yù)設(shè)時(shí)間,如果是,結(jié)束業(yè)務(wù)功能,退出測(cè)試線程,并釋放運(yùn)行所需內(nèi)存;否則,返回繼續(xù)執(zhí)行的請(qǐng)求到業(yè)務(wù)執(zhí)行模塊。
10.根據(jù)權(quán)利要求9所述的一種軟件性能測(cè)試模擬并發(fā)方法,其特征在于,所述用戶配置信息包括測(cè)試系統(tǒng)地址信息、用戶數(shù)量信息、運(yùn)行時(shí)間和數(shù)據(jù)庫(kù)信息; 所述業(yè)務(wù)處理模塊處理用戶的業(yè)務(wù)請(qǐng)求的過程中,實(shí)施展示并存儲(chǔ)用戶的業(yè)務(wù)返回?cái)?shù)據(jù),供實(shí)時(shí)展示和統(tǒng)計(jì)分析; 所述業(yè)務(wù)處理模塊處理業(yè)務(wù)的過程中,每個(gè)測(cè)試線程運(yùn)行完畢依次退出時(shí),實(shí)時(shí)更新共享內(nèi)存模塊中的退出測(cè)試線程數(shù)量,當(dāng)退出測(cè)試線程的數(shù)量等于開始運(yùn)行測(cè)試線程的數(shù)量時(shí),才發(fā)送指令使分析模塊分析并統(tǒng)計(jì)各項(xiàng)業(yè)務(wù)相關(guān)數(shù)據(jù)。
【文檔編號(hào)】G06F11/36GK103544103SQ201310393147
【公開日】2014年1月29日 申請(qǐng)日期:2013年9月2日 優(yōu)先權(quán)日:2013年9月2日
【發(fā)明者】衣安平, 楊光宇, 孫一銘, 劉增, 劉初陽(yáng), 殷炳玉 申請(qǐng)人:煙臺(tái)中科網(wǎng)絡(luò)技術(shù)研究所