本申請(qǐng)涉及測(cè)試
技術(shù)領(lǐng)域:
,特別涉及一種測(cè)試方法及裝置。
背景技術(shù):
:目前,應(yīng)用系統(tǒng)為了提高系統(tǒng)吞吐量,常常使用多線程技術(shù)將待執(zhí)行的任務(wù)通過(guò)線程池技術(shù)異步化執(zhí)行,使得處理線程不阻塞主線程的執(zhí)行。其中,線程池是一種多線程處理形式,處理過(guò)程中將任務(wù)添加到隊(duì)列,然后在創(chuàng)建線程后自動(dòng)啟動(dòng)隊(duì)列中的任務(wù)。而線程是程序執(zhí)行流的最小單元,它是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位。技術(shù)實(shí)現(xiàn)要素:但是發(fā)明人在研究過(guò)程中發(fā)現(xiàn),現(xiàn)有的多線程技術(shù)對(duì)于線下的測(cè)試將是非常困難的。因?yàn)闇y(cè)試需要在任務(wù)都執(zhí)行完畢之后再進(jìn)行,但是由于任務(wù)執(zhí)行的過(guò)程中采用了異步化執(zhí)行的方式,執(zhí)行任務(wù)的線程不在主線程內(nèi),因此就無(wú)法準(zhǔn)確得知執(zhí)行任務(wù)的線程何時(shí)執(zhí)行完畢,就使得測(cè)試結(jié)果不夠準(zhǔn)確。由此,本申請(qǐng)所要解決的技術(shù)問(wèn)題是提供一種測(cè)試方法,用以盡量避免現(xiàn)有技術(shù)中由于采用線程異步化執(zhí)行任務(wù)的方式而導(dǎo)致的測(cè)試結(jié)果不夠準(zhǔn)確的問(wèn)題,提高測(cè)試斷言的準(zhǔn)確率。本申請(qǐng)還提供了一種測(cè)試裝置,用以保證上述方法在實(shí)際中的實(shí)現(xiàn)及應(yīng)用。為了解決上述問(wèn)題,本申請(qǐng)公開了一種測(cè)試方法,包括:將待處理的多個(gè)任務(wù)按照預(yù)設(shè)分配規(guī)則分配給線程池中的多個(gè)同步線程;所述線程池中預(yù)先配置了多個(gè)同步線程;觸發(fā)所述線程池在主線程中同步調(diào)度所述多個(gè)同步線程執(zhí)行所述多 個(gè)任務(wù);在所述多個(gè)任務(wù)執(zhí)行完畢之后,對(duì)所述執(zhí)行的過(guò)程進(jìn)行測(cè)試斷言。本申請(qǐng)公開了一種測(cè)試裝置,包括:分配模塊,用于將待處理的多個(gè)任務(wù)按照預(yù)設(shè)分配規(guī)則分配給線程池中的多個(gè)同步線程;所述線程池中預(yù)先配置了多個(gè)同步線程;觸發(fā)模塊,用于觸發(fā)所述線程池在主線程中同步調(diào)度所述多個(gè)同步線程執(zhí)行所述多個(gè)任務(wù);測(cè)試模塊,用于在所述多個(gè)任務(wù)執(zhí)行完畢之后,對(duì)所述執(zhí)行的過(guò)程進(jìn)行測(cè)試斷言。與現(xiàn)有技術(shù)相比,本申請(qǐng)包括以下優(yōu)點(diǎn):在本申請(qǐng)實(shí)施例中,由于設(shè)計(jì)了新的線程池,在該線程池中的所有線程都是采用run方法調(diào)用的同步線程,因此,在為線程池中的線程分配任務(wù)之后,各個(gè)同步線程采用run方法調(diào)用即可保證它們都在調(diào)用它們的主線程中執(zhí)行,從而使得測(cè)試斷言可以在多個(gè)同步線程都執(zhí)行任務(wù)完畢之后進(jìn)行,提高了測(cè)試斷言的準(zhǔn)確率。當(dāng)然,實(shí)施本申請(qǐng)的任一產(chǎn)品并不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。附圖說(shuō)明為了更清楚地說(shuō)明本申請(qǐng)實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請(qǐng)的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本申請(qǐng)的測(cè)試方法實(shí)施例的流程圖;圖2是本申請(qǐng)的測(cè)試裝置實(shí)施例的結(jié)構(gòu)框圖。具體實(shí)施方式下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例。基于本申請(qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù) 人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。本申請(qǐng)可用于眾多通用或?qū)S玫挠?jì)算裝置環(huán)境或配置中。例如:個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器裝置、包括以上任何裝置或設(shè)備的分布式計(jì)算環(huán)境等等。本申請(qǐng)可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本申請(qǐng),在這些分布式計(jì)算環(huán)境中,由通過(guò)通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來(lái)執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。參考圖1,示出了本申請(qǐng)一種測(cè)試方法實(shí)施例的流程圖,本實(shí)施例可以包括以下步驟:步驟101:將待處理的多個(gè)任務(wù)按照預(yù)設(shè)分配規(guī)則分配給線程池中的多個(gè)同步線程;所述線程池中預(yù)先配置了多個(gè)同步線程。在本申請(qǐng)中,也需要預(yù)先建立線程池,在本實(shí)施例中線程池中的同步線程可以為:需要調(diào)用run方法執(zhí)行的線程。例如,在線程池中預(yù)先配置了10個(gè)同步線程,這10個(gè)線程同步都需要采用run方法執(zhí)行,而采用run方法執(zhí)行的這10個(gè)同步線程在執(zhí)行時(shí)就可以在主線程中進(jìn)行,從而使得同步線程執(zhí)行任務(wù)的結(jié)束時(shí)間是可以被主線程感知的。其中,線程池可以直接或間接擴(kuò)展自JDK(JavaDevelopmentKit,Java語(yǔ)言的軟件開發(fā)工具包)提供的ThreadPoolExecutor。本實(shí)施例中的線程池(DoImmediatelyThreadPoolTaskExecutor)與現(xiàn)有技術(shù)中的線程池不同,本實(shí)施例中的線程池的同步線程都是調(diào)用run方法執(zhí)行的,以便同步線程可以在調(diào)用的主線程中同步執(zhí)行。其中,步驟101在具體執(zhí)行時(shí)可以包括:步驟A1:為所述線程池建立任務(wù)隊(duì)列。首先,為已經(jīng)創(chuàng)建的線程池建立一個(gè)任務(wù)隊(duì)列,該任務(wù)隊(duì)列可以按照 先后順序存放分配給線程池中的同步線程的任務(wù)。步驟A2:按照觸發(fā)所述多個(gè)任務(wù)的各個(gè)用戶來(lái)將多個(gè)任務(wù)分別添加至所述任務(wù)隊(duì)列中。在本實(shí)施例中,可以按照觸發(fā)任務(wù)的用戶的不同,來(lái)將多個(gè)任務(wù)分別添加至任務(wù)隊(duì)列中。例如,對(duì)于實(shí)際應(yīng)用中的緩沖補(bǔ)賬業(yè)務(wù),有四個(gè)用戶觸發(fā)了緩沖補(bǔ)賬的7個(gè)任務(wù)。具體如表1所示:表1用戶任務(wù)idA1A2A3B4B5C6D7那么任務(wù)隊(duì)列中可以先添加用戶A的三個(gè)任務(wù),再添加用戶B的兩個(gè)任務(wù),再依次添加用戶C和用戶D的任務(wù)。步驟A3:將所述任務(wù)隊(duì)列中的任務(wù)分別分配給線程池中的多個(gè)同步線程,其中,每一個(gè)用戶對(duì)應(yīng)一個(gè)同步線程。然后再將任務(wù)隊(duì)列中的任務(wù)分別分配給線程池中的多個(gè)同步線程,例如,每個(gè)用戶的任務(wù)對(duì)應(yīng)分配給一個(gè)同步線程。那么,參考表1所示,用戶A的三個(gè)任務(wù)可以分配給線程池中的第一個(gè)同步線程,而用戶B的兩個(gè)任務(wù)可以分配給線程池中的第二個(gè)同步線程,以此類推。當(dāng)然,在實(shí)際應(yīng)用中,不僅僅限于以用戶為維度來(lái)為任務(wù)分配線程,還可以以任務(wù)為維度,為每一個(gè)任務(wù)對(duì)應(yīng)分配一個(gè)同步線程,當(dāng)然還可以采用其他分配方式。接著返回圖1,進(jìn)入步驟102:觸發(fā)所述線程池在主線程中同步調(diào)度所述多個(gè)同步線程執(zhí)行所述多個(gè)任務(wù)。將任務(wù)分配完成之后,可以定時(shí)觸發(fā)線程池同步調(diào)度多個(gè)同步線程,來(lái)在主線程中執(zhí)行分別為同步線程分配的任務(wù)。具體的,則是觸發(fā)線程池以調(diào)用run方法的方式來(lái)調(diào)度同步線程,從而觸發(fā)同步線程能依次同步執(zhí)行為其分配的多個(gè)任務(wù)。步驟103:在所述多個(gè)任務(wù)執(zhí)行完畢之后,對(duì)所述執(zhí)行的過(guò)程進(jìn)行測(cè)試斷言。因?yàn)椴捎胷un方法調(diào)用的同步線程在主線程中執(zhí)行,因此主線程就可以獲取到各個(gè)同步線程的執(zhí)行過(guò)程以及同步線程在什么時(shí)候?qū)⑷蝿?wù)執(zhí)行完畢,一旦,主線程確定同步線程將多個(gè)任務(wù)執(zhí)行完畢之后,就主線程就觸發(fā)對(duì)執(zhí)行的過(guò)程進(jìn)行測(cè)試斷言,測(cè)試斷言具體可以是在所述多個(gè)任務(wù)執(zhí)行完畢之后,驗(yàn)證所述多個(gè)任務(wù)的執(zhí)行結(jié)果。例如,對(duì)于緩沖補(bǔ)賬任務(wù)來(lái)講,可以驗(yàn)證補(bǔ)賬結(jié)果是否滿足預(yù)期,用戶的余額有沒(méi)有到賬等。當(dāng)然,測(cè)試斷言還可以檢查數(shù)據(jù)有沒(méi)有處理完畢,任務(wù)處理邏輯是不是正確,等等??梢姡诒旧暾?qǐng)實(shí)施例中,由于設(shè)計(jì)了新的線程池,在該線程池中的所有線程都是采用run方法調(diào)用的同步線程,因此,在為線程池中的線程分配任務(wù)之后,各個(gè)同步線程被觸發(fā)時(shí)都可以采用run方法調(diào)用,這樣即可保證同步線程都在調(diào)用它們的主線程中執(zhí)行,從而使得測(cè)試斷言可以在多個(gè)同步線程都執(zhí)行任務(wù)完畢之后進(jìn)行,提高了測(cè)試斷言的準(zhǔn)確率。對(duì)于前述的方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請(qǐng)并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本申請(qǐng),某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說(shuō)明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本申請(qǐng)所必須的。與上述本申請(qǐng)一種測(cè)試方法實(shí)施例所提供的方法相對(duì)應(yīng),參見圖2, 本申請(qǐng)還提供了一種測(cè)試裝置實(shí)施例,在本實(shí)施例中,該裝置可以包括:分配模塊201,用于將待處理的多個(gè)任務(wù)按照預(yù)設(shè)分配規(guī)則分配給線程池中的多個(gè)同步線程;所述線程池中預(yù)先配置了多個(gè)同步線程。其中,所述線程池中的同步線程為:需要調(diào)用run方法執(zhí)行的線程。其中,所述分配模塊201具體可以包括:建立子模塊,用于為所述線程池建立任務(wù)隊(duì)列;添加子模塊,用于按照觸發(fā)所述多個(gè)任務(wù)的各個(gè)用戶來(lái)將多個(gè)任務(wù)分別添加至所述任務(wù)隊(duì)列中;和,分配子模塊,用于將所述任務(wù)隊(duì)列中的任務(wù)分別分配給線程池中的多個(gè)同步線程,其中,每一個(gè)用戶對(duì)應(yīng)一個(gè)同步線程。觸發(fā)模塊202,用于觸發(fā)所述線程池在主線程中同步調(diào)度所述多個(gè)同步線程執(zhí)行所述多個(gè)任務(wù)。其中,所述觸發(fā)模塊202具體可以用于:觸發(fā)所述線程池在主線程中以調(diào)用run方法的方式調(diào)度所述多個(gè)同步線程依次執(zhí)行多個(gè)任務(wù)。測(cè)試模塊203,用于在所述多個(gè)任務(wù)執(zhí)行完畢之后,對(duì)所述執(zhí)行的過(guò)程進(jìn)行測(cè)試斷言。其中,所述測(cè)試模塊203具體用于:在所述多個(gè)任務(wù)執(zhí)行完畢之后,驗(yàn)證所述多個(gè)任務(wù)的執(zhí)行結(jié)果。在本申請(qǐng)實(shí)施例中,由于設(shè)計(jì)了新的線程池,在該線程池中的所有線程都是采用run方法調(diào)用的同步線程,因此,在為線程池中的線程分配任務(wù)之后,各個(gè)同步線程采用run方法調(diào)用即可保證它們都在調(diào)用它們的主線程中執(zhí)行,從而使得測(cè)試斷言可以在多個(gè)同步線程都執(zhí)行任務(wù)完畢之后進(jìn)行,提高了測(cè)試斷言的準(zhǔn)確率。需要說(shuō)明的是,本說(shuō)明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。對(duì)于裝置類實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說(shuō)明即可。最后,還需要說(shuō)明的是,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變 體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同要素。以上對(duì)本申請(qǐng)所提供的測(cè)試方法及裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本申請(qǐng)的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請(qǐng)的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。當(dāng)前第1頁(yè)1 2 3