專(zhuān)利名稱(chēng):一種測(cè)試執(zhí)行的調(diào)度方法及裝置的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及測(cè)試技術(shù),特別是涉及在性能測(cè)試中,一種測(cè)試執(zhí)行的調(diào)度方法及裝置。
背景技術(shù):
軟件測(cè)試就是利用測(cè)試工具按照測(cè)試方案和流程對(duì)產(chǎn)品進(jìn)行功能和性能測(cè)試,甚至根據(jù)需要編寫(xiě)不同的測(cè)試工具,設(shè)計(jì)和維護(hù)測(cè)試系統(tǒng),對(duì)測(cè)試方案可能出現(xiàn)的問(wèn)題進(jìn)行分析和評(píng)估。執(zhí)行測(cè)試用例后,需要跟蹤故障,以確保開(kāi)發(fā)的產(chǎn)品適合需求。軟件測(cè)試中的性能測(cè)試是通過(guò)自動(dòng)化的測(cè)試工具模擬多種正常、峰值以及異常負(fù)載條件來(lái)對(duì)系統(tǒng)的各項(xiàng)性能指標(biāo)進(jìn)行測(cè)試。在性能測(cè)試中,包括并發(fā)性能測(cè)試、疲勞強(qiáng)度測(cè)試、大數(shù)據(jù)量測(cè)試和速度測(cè)試等,其中并發(fā)性能測(cè)試是重點(diǎn)。 并發(fā)性能測(cè)試的過(guò)程是一個(gè)負(fù)載測(cè)試和壓力測(cè)試的過(guò)程,即逐漸增加負(fù)載,直到系統(tǒng)的瓶頸或者不能接收的性能點(diǎn),通過(guò)綜合分析交易執(zhí)行指標(biāo)和資源監(jiān)控指標(biāo)來(lái)確定系統(tǒng)并發(fā)性能的過(guò)程。目前,在并發(fā)性能測(cè)試中,并發(fā)請(qǐng)求的調(diào)度在一開(kāi)始執(zhí)行性能測(cè)試的時(shí)候就固定了,用戶(hù)輸入了要生成的并發(fā)數(shù)后,系統(tǒng)就按照這個(gè)固定的值去生成并發(fā)。但是實(shí)際應(yīng)用中,系統(tǒng)會(huì)有許多不同的情況,例如,某系統(tǒng)在夜晚零點(diǎn),要求用于測(cè)試的并發(fā)數(shù)達(dá)到谷底,而在上午九點(diǎn)和中午十二點(diǎn),又要求并發(fā)數(shù)達(dá)到兩個(gè)高峰期,但是上述的調(diào)度方法在整個(gè)測(cè)試過(guò)程中并發(fā)數(shù)的生成是固定的,無(wú)法模擬該系統(tǒng)的這種測(cè)試情況。因此,在現(xiàn)有的并發(fā)性能測(cè)試中,上述這種并發(fā)調(diào)度方法無(wú)法模擬復(fù)雜的測(cè)試場(chǎng)景,導(dǎo)致測(cè)試結(jié)果不足以說(shuō)明測(cè)試場(chǎng)景所遇到的問(wèn)題,甚至可能導(dǎo)致測(cè)試出現(xiàn)問(wèn)題。
發(fā)明內(nèi)容
本申請(qǐng)?zhí)峁┝艘环N測(cè)試執(zhí)行的調(diào)度方法及裝置,以解決測(cè)試中并發(fā)數(shù)固定的問(wèn)題。為了解決上述問(wèn)題,本申請(qǐng)公開(kāi)了一種測(cè)試執(zhí)行的調(diào)度方法,包括主進(jìn)程接收用戶(hù)的操作請(qǐng)求;主進(jìn)程將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表該操作請(qǐng)求的值,然后向子進(jìn)程發(fā)送通知信號(hào);子進(jìn)程接收到所述通知信號(hào)后,通過(guò)判斷所述共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為強(qiáng)制退出測(cè)試執(zhí)行的請(qǐng)求時(shí),子進(jìn)程執(zhí)行的相應(yīng)操作包括子進(jìn)程退出進(jìn)程操作。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為停止、暫?;蚧謴?fù)子進(jìn)程執(zhí)行的請(qǐng)求時(shí),子進(jìn)程執(zhí)行的相應(yīng)操作包括子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表所述操作請(qǐng)求的值。
優(yōu)選的,所述方法還包括子進(jìn)程的每個(gè)子線程循環(huán)執(zhí)行測(cè)試代碼;子線程在每次循環(huán)執(zhí)行之前,通過(guò)判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為停止所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí)每個(gè)子進(jìn)程執(zhí)行的相應(yīng)操作包括子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表停止執(zhí)行的值;每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行的相應(yīng)操作包括子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表停止執(zhí)行的值,則退出循環(huán)操作;每個(gè)子進(jìn)程執(zhí)行的相應(yīng)操作還包括子進(jìn)程等到該子進(jìn)程的每個(gè)子線程都退出循環(huán)操作后,分析該子進(jìn)程的測(cè)試數(shù)據(jù)并生成測(cè)試報(bào)告。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為暫停所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí)每個(gè)子進(jìn)程執(zhí)行的相應(yīng)操作包括子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值;每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行的相應(yīng)操作包括子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值,則停止執(zhí)行該次 循環(huán)操作,并跳入下一次循環(huán)。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為恢復(fù)所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí)每個(gè)子進(jìn)程執(zhí)行的相應(yīng)操作包括子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值;每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行的相應(yīng)操作包括子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值,則繼續(xù)執(zhí)行循環(huán)操作。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為選擇性暫停部分子進(jìn)程執(zhí)行的請(qǐng)求時(shí),還包括主進(jìn)程遍歷共享內(nèi)存中每個(gè)子進(jìn)程結(jié)構(gòu)體,根據(jù)子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值判斷子進(jìn)程是否正在執(zhí)行,并將正在執(zhí)行的子進(jìn)程標(biāo)識(shí)發(fā)給用戶(hù);主進(jìn)程接收用戶(hù)選擇暫停的子進(jìn)程標(biāo)識(shí),將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表選擇性暫停部分子進(jìn)程執(zhí)行的值,然后向用戶(hù)選擇的子進(jìn)程發(fā)送通知信號(hào);所述用戶(hù)選擇暫停的子進(jìn)程執(zhí)行的相應(yīng)操作包括子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值;所述用戶(hù)選擇暫停的子進(jìn)程的每個(gè)子線程執(zhí)行的相應(yīng)操作包括子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值,則停止執(zhí)行該次循環(huán)操作,并跳入下一次循環(huán)。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為選擇性恢復(fù)部分子進(jìn)程執(zhí)行的請(qǐng)求時(shí),還包括主進(jìn)程遍歷共享內(nèi)存中每個(gè)子進(jìn)程結(jié)構(gòu)體,根據(jù)子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值判斷子進(jìn)程是否暫停執(zhí)行,并將暫停執(zhí)行的子進(jìn)程標(biāo)識(shí)發(fā)給用戶(hù);主進(jìn)程接收用戶(hù)選擇恢復(fù)的子進(jìn)程標(biāo)識(shí),將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表選擇性恢復(fù)部分子進(jìn)程執(zhí)行的值,然后向用戶(hù)選擇的子進(jìn)程發(fā)送通知信號(hào);所述用戶(hù)選擇恢復(fù)的子進(jìn)程執(zhí)行的相應(yīng)操作包括子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值;所述用戶(hù)選擇恢復(fù)的子進(jìn)程的每個(gè)子線程執(zhí)行的相應(yīng)操作包括子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值,則繼續(xù)執(zhí)行循環(huán)操作。優(yōu)選的,所述主進(jìn)程接收用戶(hù)的操作請(qǐng)求之前,還包括主進(jìn)程接收用戶(hù)發(fā)來(lái)的調(diào)度控制信號(hào),并向用戶(hù)返回操作菜單;用戶(hù)選擇所述操作菜單中的操作選項(xiàng)并發(fā)送給主進(jìn)程,所述操作菜單中的每個(gè)操作選項(xiàng)對(duì)應(yīng)一個(gè)操作請(qǐng)求。本申請(qǐng)還公開(kāi)了一種測(cè)試執(zhí)行的調(diào)度裝置,包括用戶(hù)交互單元,用于主進(jìn)程接收用戶(hù)的操作請(qǐng)求;主進(jìn)程調(diào)度單元,用于主進(jìn)程將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表該操作請(qǐng)求的值,然后向子進(jìn)程發(fā)送通知信號(hào);子進(jìn)程調(diào)度單元,用于子進(jìn)程接收到所述通知信號(hào)后,通過(guò)判斷所述共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為強(qiáng)制退出測(cè)試執(zhí)行的請(qǐng)求時(shí),所述子進(jìn)程調(diào)度單元包括強(qiáng)制退出子單元,用于子進(jìn)程退出進(jìn)程操作。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為停止、暫停或恢復(fù)子進(jìn)程執(zhí)行的請(qǐng)求時(shí)所述子進(jìn)程 調(diào)度單元用于子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表所述操作請(qǐng)求的值。優(yōu)選的,所述裝置還包括子線程調(diào)度單元,用于子進(jìn)程的每個(gè)子線程循環(huán)執(zhí)行測(cè)試代碼;子線程在每次循環(huán)執(zhí)行之前,通過(guò)判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為停止所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí)所述子進(jìn)程調(diào)度單元包括進(jìn)程停止子單元,用于每個(gè)子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表停止執(zhí)行的值;所述子線程調(diào)度單元包括線程停止子單元,用于每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表停止執(zhí)行的值,則退出循環(huán)操作;所述子進(jìn)程調(diào)度單元還包括報(bào)告生成子單元,用于子進(jìn)程等到該子進(jìn)程的每個(gè)子線程都退出循環(huán)操作后,分析該子進(jìn)程的測(cè)試數(shù)據(jù)并生成測(cè)試報(bào)告。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為暫停所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí)所述子進(jìn)程調(diào)度單元包括進(jìn)程暫停子單元,用于每個(gè)子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值;所述子線程調(diào)度單元包括線程暫停子單元,用于每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值,則停止執(zhí)行該次循環(huán)操作,并跳入下一次循環(huán)。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為恢復(fù)所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí)所述子進(jìn)程調(diào)度單元包括進(jìn)程恢復(fù)子單元,用于每個(gè)子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值;所述子線程調(diào)度單元包括線程恢復(fù)子單元,用于每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值,則繼續(xù)執(zhí)行循環(huán)操作。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為選擇性暫停部分子進(jìn)程執(zhí)行的請(qǐng)求時(shí)所述用戶(hù)交互單元還用于主進(jìn)程遍歷共享內(nèi)存中每個(gè)子進(jìn)程結(jié)構(gòu)體,根據(jù)子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值判斷子進(jìn)程是否正在執(zhí)行,并將正在執(zhí)行的子進(jìn)程標(biāo)識(shí)發(fā)給用戶(hù);所述主進(jìn)程調(diào)度單元用于主進(jìn)程接收用戶(hù)選擇暫停的子進(jìn)程標(biāo)識(shí),將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表選擇性暫停部分子進(jìn)程執(zhí)行的值,然后向用戶(hù)選擇的子進(jìn)程發(fā)送通知信號(hào);所述子進(jìn)程調(diào)度單元包括進(jìn)程選擇性暫停子單元,用于所述用戶(hù)選擇暫停的子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值;所述子線程調(diào)度單元包括線程選擇性暫停子單元,用于所述用戶(hù)選擇暫停的子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值,則停止執(zhí)行該次循環(huán)操作,并跳入下一次循環(huán)。優(yōu)選的,當(dāng)用戶(hù)的操作請(qǐng)求為選擇性恢復(fù)部分子進(jìn)程執(zhí)行的請(qǐng)求時(shí)所述用戶(hù)交互單元還用于主進(jìn)程遍歷共享內(nèi)存中每個(gè)子進(jìn)程結(jié)構(gòu)體,根據(jù)子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值判斷子進(jìn)程是否暫停執(zhí)行,并將暫停執(zhí)行的子進(jìn)程標(biāo)識(shí)發(fā)給用戶(hù);所述主進(jìn)程調(diào)度單元用于主進(jìn)程接收用戶(hù)選擇恢復(fù)的子進(jìn)程標(biāo)識(shí),將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表選擇性恢復(fù)部分子進(jìn)程執(zhí)行的值,然后向用戶(hù)選擇的子進(jìn)程發(fā)送通知信號(hào);所述子進(jìn)程調(diào)度單元包括進(jìn)程選擇性恢復(fù)子單元,用于所述用戶(hù)選擇恢復(fù)的子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值;所述子線程調(diào)度單元包括線程選擇性恢復(fù)子單元,用于所述用戶(hù)選擇恢復(fù)的子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值,則繼續(xù)執(zhí)行循環(huán)操作。 優(yōu)選的,所述用戶(hù)交互單元還用于主進(jìn)程接收用戶(hù)的操作請(qǐng)求之前,先接收用戶(hù)發(fā)來(lái)的調(diào)度控制信號(hào),并向用戶(hù)返回操作菜單,供用戶(hù)在所述操作菜單中選擇操作選項(xiàng),其中每個(gè)操作選項(xiàng)對(duì)應(yīng)一個(gè)操作請(qǐng)求。與現(xiàn)有技術(shù)相比,本申請(qǐng)包括以下優(yōu)點(diǎn)首先,本申請(qǐng)?zhí)岢鲆环N基于多進(jìn)程多線程的測(cè)試執(zhí)行的調(diào)度方法,在性能測(cè)試的過(guò)程中,主進(jìn)程接收用戶(hù)的操作請(qǐng)求,然后將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表該操作請(qǐng)求的值,再向子進(jìn)程發(fā)送通知信號(hào),子進(jìn)程接收到所述通知信號(hào)后,通過(guò)判斷所述共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。通過(guò)所述的方法,可以根據(jù)用戶(hù)的操作請(qǐng)求,通過(guò)改變主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,動(dòng)態(tài)的改變進(jìn)程的執(zhí)行,控制每一組進(jìn)程的執(zhí)行狀態(tài),實(shí)現(xiàn)幾種進(jìn)程狀態(tài)之間的轉(zhuǎn)換,從而可以豐富測(cè)試場(chǎng)景,相應(yīng)的也可以制作復(fù)雜的測(cè)試曲線。而且,本申請(qǐng)中主進(jìn)程向子進(jìn)程發(fā)送通知信號(hào)時(shí),無(wú)論何種操作請(qǐng)求,均發(fā)送同種信號(hào),因?yàn)樵撔盘?hào)起到通知子進(jìn)程的作用,并沒(méi)有代表具體的哪種操作請(qǐng)求,因此使用一種信息可以節(jié)約可使用的信號(hào)量,而且不受限于操作系統(tǒng)的信號(hào)量數(shù)量,適合在各種實(shí)際系統(tǒng)中應(yīng)用。其次,本申請(qǐng)還可以實(shí)現(xiàn)用戶(hù)與進(jìn)程之間的交互,當(dāng)用戶(hù)由于某種需求想要改變進(jìn)程時(shí),可以向主進(jìn)程發(fā)送信號(hào),通過(guò)主進(jìn)程的反饋,選擇要改變的進(jìn)程。由此可使用戶(hù)與進(jìn)程之間有一個(gè)交互的過(guò)程,從而可以改變這些進(jìn)程的執(zhí)行狀態(tài),調(diào)節(jié)進(jìn)程生成的策略和頻率,滿(mǎn)足用戶(hù)的各種需求。再次,本申請(qǐng)可以在不中斷測(cè)試執(zhí)行過(guò)程的情況下,排查被測(cè)系統(tǒng)的性能問(wèn)題。例如,在壓力測(cè)試執(zhí)行過(guò)程中,某一時(shí)刻發(fā)現(xiàn)被測(cè)系統(tǒng)有內(nèi)存溢出狀況,通過(guò)本申請(qǐng)可以暫停壓力的生成,然后由開(kāi)發(fā)人員去排查該溢出問(wèn)題,觀察在壓力暫停時(shí)溢出是否繼續(xù),或者收縮,通過(guò)不斷的恢復(fù)和暫停,降低和升高壓力,在不中斷整個(gè)性能測(cè)試執(zhí)行過(guò)程的情況下,完成被測(cè)系統(tǒng)問(wèn)題的排查。當(dāng)然,實(shí)施本申請(qǐng)的任一產(chǎn)品不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
圖I是本申請(qǐng)實(shí)施例所述一種測(cè)試執(zhí)行的調(diào)度方法流程圖;圖2是本申請(qǐng)優(yōu)選實(shí)施例所述一種測(cè)試執(zhí)行的調(diào)度方法流程圖;圖3是本申請(qǐng)優(yōu)選實(shí)施例所述一種測(cè)試執(zhí)行的調(diào)度方法中主進(jìn)程的流程圖;圖4是本申請(qǐng)優(yōu)選實(shí)施例所述一種測(cè)試執(zhí)行的調(diào)度方法中子進(jìn)程的流程圖;圖5是本申請(qǐng)優(yōu)選實(shí)施例所述一種測(cè)試執(zhí)行的調(diào)度方法中子進(jìn)程子線程的流程圖; 圖6是本申請(qǐng)實(shí)施例所述一種測(cè)試執(zhí)行的調(diào)度裝置結(jié)構(gòu)圖。
具體實(shí)施例方式為使本申請(qǐng)的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)的說(shuō)明。為了動(dòng)態(tài)的改變測(cè)試過(guò)程中的并發(fā)數(shù)量,本申請(qǐng)?zhí)峁┝艘环N測(cè)試執(zhí)行的調(diào)度方法,用于在性能測(cè)試的過(guò)程中,通過(guò)用戶(hù)與進(jìn)程之間的交互,動(dòng)態(tài)的改變進(jìn)程的執(zhí)行,控制每一組進(jìn)程的執(zhí)行狀態(tài)。本申請(qǐng)主要適用于各種并發(fā)性能測(cè)試中。下面通過(guò)實(shí)施例對(duì)本申請(qǐng)的內(nèi)容進(jìn)行詳細(xì)的說(shuō)明。參照?qǐng)D1,是本申請(qǐng)實(shí)施例所述一種測(cè)試執(zhí)行的調(diào)度方法流程圖。在本實(shí)施例中,所使用的是多進(jìn)程多線程的執(zhí)行過(guò)程,所述的多線程多進(jìn)程是指當(dāng)運(yùn)行并發(fā)操作時(shí),主進(jìn)程生成多個(gè)子進(jìn)程,每個(gè)子進(jìn)程又生成多個(gè)子線程。而且,在主進(jìn)程初始化的過(guò)程中,會(huì)生成進(jìn)程共享的內(nèi)存區(qū)域,在測(cè)試執(zhí)行過(guò)程中,所有的進(jìn)程及其子線程都可以訪問(wèn)共享內(nèi)存區(qū)域,并從中讀取變量。所述方法主要用于在測(cè)試執(zhí)行過(guò)程中動(dòng)態(tài)的改變進(jìn)程的執(zhí)行,包括以下步驟步驟101,主進(jìn)程接收用戶(hù)的操作請(qǐng)求;在性能測(cè)試的執(zhí)行過(guò)程中,用戶(hù)與進(jìn)程之間可以實(shí)現(xiàn)交互,主進(jìn)程可以通過(guò)某種方式,接收用戶(hù)的操作請(qǐng)求。本實(shí)施例中,一種優(yōu)選的方式是,在性能測(cè)試系統(tǒng)執(zhí)行時(shí),如果用戶(hù)想要執(zhí)行某種操作,可以對(duì)主進(jìn)程發(fā)送一個(gè)信號(hào),主進(jìn)程接收到該信號(hào)后,返回給用戶(hù)一個(gè)可操作的菜單,用戶(hù)選擇該菜單中某一操作選項(xiàng)并輸入給主進(jìn)程。由于每個(gè)操作選項(xiàng)對(duì)應(yīng)一個(gè)操作請(qǐng)求,因此用戶(hù)選擇某一操作選項(xiàng)并輸入給主進(jìn)程,即相當(dāng)于向主進(jìn)程發(fā)送一個(gè)操作請(qǐng)求。由此可見(jiàn),用戶(hù)可以根據(jù)自己的需求,選擇相應(yīng)的操作,控制測(cè)試狀態(tài)。步驟102,主進(jìn)程將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表該操作請(qǐng)求的值,然后向子進(jìn)程發(fā)送通知信號(hào);主進(jìn)程在接收到操作請(qǐng)求后,會(huì)將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,設(shè)置為代表該操作請(qǐng)求的值,再向正在執(zhí)行的子進(jìn)程發(fā)送通知信號(hào)。本實(shí)施例中,一種優(yōu)選的方式是,主進(jìn)程在接收到選項(xiàng)操作時(shí),會(huì)將代表該操作請(qǐng)求的值,賦值給位于共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量,再向每個(gè)正在執(zhí)行測(cè)試的子進(jìn)程發(fā)送一個(gè)信號(hào)。這樣就可以動(dòng)態(tài)的改變進(jìn)程的執(zhí)行,控制進(jìn)程執(zhí)行狀態(tài)。步驟103,子進(jìn)程接收到所述通知信號(hào)后,通過(guò)判斷所述共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。每個(gè)正在執(zhí)行測(cè)試的子進(jìn)程接收到該信號(hào)后,會(huì)檢查共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量,通過(guò)判斷該操作變量的值來(lái)決定執(zhí)行怎樣的操作,如進(jìn)程退出、進(jìn)程暫停、進(jìn)程恢復(fù)等等操作。綜上所述,圖I實(shí)施例中所述的方法在多進(jìn)程多線程測(cè)試執(zhí)行過(guò)程中,主進(jìn)程接收用戶(hù)的操作請(qǐng)求,然后將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表該操作請(qǐng)求的值,再向子進(jìn)程發(fā)送通知信號(hào),子進(jìn)程接收到所述通知信號(hào)后,通過(guò)判斷所述共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。通過(guò)所述的方法,可以根據(jù)用戶(hù)的操作請(qǐng)求,通過(guò)改變主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,動(dòng)態(tài)的改變進(jìn)程的執(zhí)行,控制每一組進(jìn)程的執(zhí)行狀態(tài),實(shí)現(xiàn)幾種進(jìn)程狀態(tài)之間的轉(zhuǎn)換,從而可以豐富測(cè)試場(chǎng)景,相應(yīng)的也可以制作復(fù)雜的測(cè)試曲線。
而且,主進(jìn)程向子進(jìn)程發(fā)送通知信號(hào)時(shí),無(wú)論何種操作請(qǐng)求,均發(fā)送同種信號(hào),因?yàn)樵撔盘?hào)起到通知子進(jìn)程的作用,并沒(méi)有代表具體的哪種操作請(qǐng)求,因此使用一種信息可以節(jié)約可使用的信號(hào)量,而且不受限于操作系統(tǒng)的信號(hào)量數(shù)量,適合在各種實(shí)際系統(tǒng)中應(yīng)用。在實(shí)際應(yīng)用中,性能測(cè)試在軟件的質(zhì)量保證中起著重要的作用,它包括的測(cè)試內(nèi)容豐富多樣。性能測(cè)試包括三個(gè)方面應(yīng)用在客戶(hù)端性能的測(cè)試、應(yīng)用在網(wǎng)絡(luò)上性能的測(cè)試和應(yīng)用在服務(wù)器端性能的測(cè)試。通常情況下,三方面有效、合理的結(jié)合,可以達(dá)到對(duì)系統(tǒng)性能全面的分析和瓶頸的預(yù)測(cè)。其中,服務(wù)端性能測(cè)試區(qū)別于Π性能測(cè)試、客戶(hù)端性能測(cè)試等,通過(guò)產(chǎn)生大量高請(qǐng)求頻率高并發(fā)的訪問(wèn)請(qǐng)求對(duì)服務(wù)端進(jìn)行訪問(wèn),讓服務(wù)端在長(zhǎng)時(shí)間高負(fù)載情況下運(yùn)行,檢查系統(tǒng)運(yùn)行正確性、穩(wěn)定性的測(cè)試方法。在服務(wù)端性能測(cè)試中,負(fù)載測(cè)試和壓力測(cè)試都屬于性能測(cè)試,兩者可以結(jié)合進(jìn)行。通過(guò)負(fù)載測(cè)試,確定在各種工作負(fù)載下系統(tǒng)的性能,目標(biāo)是測(cè)試當(dāng)負(fù)載逐漸增加時(shí),系統(tǒng)各項(xiàng)性能指標(biāo)的變化情況。壓力測(cè)試是通過(guò)確定一個(gè)系統(tǒng)的瓶頸或者不能接收的性能點(diǎn),來(lái)獲得系統(tǒng)能提供的最大服務(wù)級(jí)別的測(cè)試。為了使本領(lǐng)域技術(shù)人員進(jìn)一步了解本申請(qǐng)的內(nèi)容,下面以服務(wù)端的壓力測(cè)試為例進(jìn)行更加詳細(xì)的說(shuō)明。以Xnix系統(tǒng)(Unix及Linux系統(tǒng),并包括他們的衍生版本)為例,當(dāng)然所述方法同樣適用于Windows等其他操作系統(tǒng)。下面為本申請(qǐng)的一種優(yōu)選的實(shí)施例,給出了 Xnix系統(tǒng)的性能測(cè)試系統(tǒng)在壓力測(cè)試執(zhí)行中,一種測(cè)試系統(tǒng)和用戶(hù)可交互的壓力調(diào)度方法。首先,確定測(cè)試系統(tǒng)和用戶(hù)的交互方式主進(jìn)程接收用戶(hù)的操作請(qǐng)求之前,主進(jìn)程會(huì)接收用戶(hù)發(fā)來(lái)的調(diào)度控制信號(hào),并向用戶(hù)返回操作菜單,用戶(hù)選擇所述操作菜單中的操作選項(xiàng)并發(fā)送給主進(jìn)程,所述操作菜單中的每個(gè)操作選項(xiàng)對(duì)應(yīng)一個(gè)操作請(qǐng)求。在性能測(cè)試系統(tǒng)執(zhí)行時(shí),若用戶(hù)想要執(zhí)行強(qiáng)制退出測(cè)試、停止測(cè)試、暫停全部測(cè)試壓力、恢復(fù)全部測(cè)試壓力、暫停部分測(cè)試壓力或者恢復(fù)部分測(cè)試壓力的操作,用戶(hù)可以對(duì)主進(jìn)程發(fā)送某一個(gè)信號(hào)(比如本系統(tǒng)采用SIGINT信號(hào),也即Ctrl+C),主進(jìn)程接收到該信號(hào)后,返回給用戶(hù)一個(gè)可操作的菜單,用戶(hù)選擇該菜單中某一操作選項(xiàng)并輸入給主進(jìn)程,主進(jìn)程再根據(jù)該選項(xiàng)進(jìn)行操作,達(dá)到控制子進(jìn)程的效果。其次,信號(hào)和共享內(nèi)存結(jié)構(gòu)體共同決定要執(zhí)行的操作當(dāng)用戶(hù)向主進(jìn)程發(fā)送了一個(gè)操作請(qǐng)求后,主進(jìn)程將代表該操作請(qǐng)求的值,賦值給位于共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素,再向每個(gè)正在執(zhí)行壓力測(cè)試的子進(jìn)程發(fā)送某一個(gè)信號(hào)(比如本系統(tǒng)采用SIGUSR1信號(hào)),子系統(tǒng)的信號(hào)量處理函數(shù)接收到該信號(hào)后,會(huì)檢查共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素,通過(guò)判斷該元素的值來(lái)決定執(zhí)行怎樣的操作。例如,子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表所述操作請(qǐng)求的值。在實(shí)施例所述的多進(jìn)程多線程測(cè)試執(zhí)行過(guò)程中,子進(jìn)程的每個(gè)子線程循環(huán)執(zhí)行測(cè)試代碼,子線程在每次循環(huán)執(zhí)行之前,通過(guò)判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變 量值,執(zhí)行相應(yīng)的操作。例如,每個(gè)子進(jìn)程的每個(gè)子線程中執(zhí)行的壓力測(cè)試業(yè)務(wù)邏輯函數(shù),被放置在一個(gè)循環(huán)代碼體內(nèi),每次執(zhí)行前會(huì)判斷一個(gè)位于進(jìn)程共享內(nèi)存中屬于該子進(jìn)程的結(jié)構(gòu)體bench_child的一個(gè)元素switcher的狀態(tài),該元素有三種狀態(tài),分別為i. CONTINUE :運(yùn)行中狀態(tài),默認(rèn)狀態(tài),運(yùn)行中或者恢復(fù)運(yùn)行后,switcher元素的值都是該狀態(tài);ii. BREAK :停止?fàn)顟B(tài),當(dāng)switcher的值是該狀態(tài)時(shí),下一次循環(huán)會(huì)跳出循環(huán)體,從而停止執(zhí)行性能測(cè)試的壓力生成;iii. SUSPEND :暫停狀態(tài),當(dāng)switcher的值是該狀態(tài)時(shí),該次循環(huán)不執(zhí)行,跳入下一次循環(huán)。主進(jìn)程在收到用戶(hù)發(fā)來(lái)的操作請(qǐng)求后,通過(guò)信號(hào)告知子進(jìn)程有請(qǐng)求處理,子進(jìn)程通過(guò)判斷主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素,來(lái)決定將本進(jìn)程結(jié)構(gòu)體bench_child的switcher元素賦以何值。而當(dāng)該子進(jìn)程的每個(gè)子線程循環(huán)體內(nèi)的壓力測(cè)試業(yè)務(wù)邏輯函數(shù)在下一次執(zhí)行前,通過(guò)判斷該switcher元素,來(lái)決定是否是繼續(xù)執(zhí)行,或者不執(zhí)行直接進(jìn)入下一次循環(huán),或者直接退出該進(jìn)程。主進(jìn)程可以通過(guò)發(fā)送信號(hào)給每一個(gè)子進(jìn)程或者部分子進(jìn)程,來(lái)達(dá)到控制全部或者部分子進(jìn)程的壓力測(cè)試執(zhí)行狀況。在本實(shí)施例中,用戶(hù)可選擇的操作選項(xiàng)包括I)強(qiáng)制退出;用戶(hù)由于某種原因不希望測(cè)試?yán)^續(xù)執(zhí)行并且不需要已執(zhí)行的測(cè)試結(jié)果,期望立刻退出,則可以通過(guò)所述的交互方式告知主進(jìn)程,要求強(qiáng)制退出性能測(cè)試系統(tǒng)。當(dāng)用戶(hù)的操作請(qǐng)求為強(qiáng)制退出測(cè)試執(zhí)行的請(qǐng)求時(shí),子進(jìn)程執(zhí)行的相應(yīng)操作為退出進(jìn)程操作。例如,主進(jìn)程收到請(qǐng)求后將設(shè)置共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素,將其值設(shè)置為0,再給各個(gè)執(zhí)行中的子進(jìn)程發(fā)送SI⑶SRl信號(hào)。子進(jìn)程收到該信號(hào)后判斷共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素是否為0,如果是,則執(zhí)行退出進(jìn)程(exit)操作。2)停止所有測(cè)試;
用戶(hù)由于某種原因希望測(cè)試結(jié)束并立刻給出測(cè)試報(bào)告數(shù)據(jù)(比如已經(jīng)性能測(cè)試運(yùn)行了若干小時(shí),可以基于截至目前的測(cè)試過(guò)程,分析出所需要的數(shù)據(jù)),則可以通過(guò)所述的交互方式告知主進(jìn)程,要求停止性能測(cè)試壓力生成,當(dāng)用戶(hù)的操作請(qǐng)求為停止所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí),每個(gè)子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表停止執(zhí)行的值,每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表停止執(zhí)行的值,則退出循環(huán)操作。并且,每個(gè)子進(jìn)程等到該子進(jìn)程的每個(gè)子線程都退出循環(huán)操作后,分析該子進(jìn)程的測(cè)試數(shù)據(jù)并生成測(cè)試報(bào)告。例如,主進(jìn)程收到請(qǐng)求后將設(shè)置共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素,將其值設(shè)置為I,再給各個(gè)執(zhí)行中的子進(jìn)程發(fā)送SI⑶SRl信號(hào)。子進(jìn)程收到該信號(hào)后判斷共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素是否為1,如果是,則在進(jìn)程共享內(nèi)存中找到屬于本進(jìn)程的bench_child結(jié)構(gòu)體,并且對(duì)該結(jié)構(gòu)體的switcher元素賦值為BREAK。當(dāng)每個(gè)子進(jìn)程中每個(gè)子線程的循環(huán)體執(zhí)行到下一次循環(huán)時(shí),判斷到bench_child結(jié)構(gòu)體的switcher兀素值為BREAK,則執(zhí)行跳出循環(huán)操作(break),之后該子 進(jìn)程等到每個(gè)子線程都退出后,再執(zhí)行分析該進(jìn)程的性能測(cè)試數(shù)據(jù)工作,以生成性能測(cè)試 艮告。3)暫停全部測(cè)試;用戶(hù)由于某種原因希望測(cè)試暫停(比如目前被壓系統(tǒng)發(fā)現(xiàn)性能異常,需要停止壓力進(jìn)行調(diào)試分析),則可以通過(guò)所述的交互方式告知主進(jìn)程,要求暫停性能測(cè)試壓力生成。當(dāng)用戶(hù)的操作請(qǐng)求為暫停所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí),每個(gè)子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值,每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值,則停止執(zhí)行該次循環(huán)操作,并跳入下一次循環(huán)。例如,主進(jìn)程收到請(qǐng)求后將設(shè)置共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素,將其值設(shè)置為2,再給各個(gè)執(zhí)行中的子進(jìn)程發(fā)送SI⑶SRl信號(hào)。子進(jìn)程收到該信號(hào)后判斷共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素是否為2,如果是,則在進(jìn)程共享內(nèi)存中找到屬于本進(jìn)程的bench_child結(jié)構(gòu)體,并且對(duì)該結(jié)構(gòu)體的switcher元素賦值為SUSPEND。當(dāng)每個(gè)子進(jìn)程中每個(gè)子線程的循環(huán)體執(zhí)行到下一次循環(huán)時(shí),判斷到bench_child結(jié)構(gòu)體的switcher元素值為SUSPEND,則不執(zhí)行任何壓力測(cè)試業(yè)務(wù)邏輯函數(shù),休息若干毫秒后,進(jìn)入下一次循環(huán),直到bench_child結(jié)構(gòu)體的switcher元素值被改變?yōu)槠渌麪顟B(tài)。4)恢復(fù)全部測(cè)試;在性能測(cè)試所有進(jìn)程的壓力生成被暫停后,用戶(hù)由于某種原因希望測(cè)試恢復(fù)運(yùn)行,則可以通過(guò)所述的交互方式告知主進(jìn)程,要求恢復(fù)性能測(cè)試壓力生成。當(dāng)用戶(hù)的操作請(qǐng)求為恢復(fù)所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí),每個(gè)子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值,每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值,則繼續(xù)執(zhí)行循環(huán)操作。
例如,主進(jìn)程收到請(qǐng)求后將設(shè)置共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素,將其值設(shè)置為3,再給各個(gè)執(zhí)行中的子進(jìn)程發(fā)送SI⑶SRl信號(hào)。子進(jìn)程收到該信號(hào)后判斷共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素是否為3,如果是,則在進(jìn)程共享內(nèi)存中找到屬于本進(jìn)程的bench_child結(jié)構(gòu)體,并且對(duì)該結(jié)構(gòu)體的switcher元素賦值為CONTINUE。當(dāng)每個(gè)子進(jìn)程中每個(gè)子線程的循環(huán)體執(zhí)行到下一次循環(huán)時(shí),判斷到bench_child結(jié)構(gòu)體的switcher元素值為CONTINUE,則繼續(xù)執(zhí)行壓力測(cè)試業(yè)務(wù)邏輯函數(shù),從而恢復(fù)壓力的生成。5)暫停部分測(cè)試;用戶(hù)由于某種原因希望通過(guò)改變壓力并發(fā)的大小,來(lái)模擬某種環(huán)境下真實(shí)用戶(hù)訪問(wèn)的行為(比如某主站W(wǎng)EB服務(wù)器在下午6點(diǎn)到9點(diǎn)并發(fā)訪問(wèn)壓力很高,而在晚上10點(diǎn)以后,并發(fā)請(qǐng)求數(shù)量逐漸降低),則可以通過(guò)所述的交互方式告知主進(jìn)程,要求暫停某些進(jìn)程的性能測(cè)試壓力生成。當(dāng)用戶(hù)的操作請(qǐng)求為選擇性暫停部分子進(jìn)程執(zhí)行的請(qǐng)求時(shí),主進(jìn)程遍歷共享內(nèi)存 中每個(gè)子進(jìn)程結(jié)構(gòu)體,根據(jù)子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值判斷子進(jìn)程是否正在執(zhí)行,并將正在執(zhí)行的子進(jìn)程標(biāo)識(shí)發(fā)給用戶(hù);然后,主進(jìn)程接收用戶(hù)選擇暫停的子進(jìn)程標(biāo)識(shí),將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表選擇性暫停部分子進(jìn)程執(zhí)行的值,然后向用戶(hù)選擇暫停的子進(jìn)程發(fā)送通知信號(hào);用戶(hù)選擇暫停的子進(jìn)程接收到所述通知信號(hào)后,將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值;用戶(hù)選擇暫停的子進(jìn)程的每個(gè)子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值,則停止執(zhí)行該次循環(huán)操作,并跳入下一次循環(huán)。例如,主進(jìn)程通過(guò)遍歷共享內(nèi)存中每個(gè)子進(jìn)程的bench_child結(jié)構(gòu)體,判斷該進(jìn)程結(jié)構(gòu)體的switcher元素狀態(tài)是否為正在運(yùn)行即CONTINUE,將這些處于運(yùn)行中狀態(tài)的子進(jìn)程的進(jìn)程標(biāo)識(shí)PID發(fā)給用戶(hù),讓用戶(hù)進(jìn)行選擇。用戶(hù)將需要暫停的進(jìn)程PID發(fā)送給主進(jìn)程,主進(jìn)程收到請(qǐng)求后將設(shè)置共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素,將其值設(shè)置為4,再給用戶(hù)指定的幾個(gè)子進(jìn)程發(fā)送SI⑶SRl信號(hào)。這些子進(jìn)程收到該信號(hào)后判斷共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素是否為4,如果是,則在進(jìn)程共享內(nèi)存中找到屬于本進(jìn)程的bench_child結(jié)構(gòu)體,并且對(duì)該結(jié)構(gòu)體的switcher元素賦值為SUSPEND。當(dāng)這批子進(jìn)程的每個(gè)子線程的循環(huán)體執(zhí)行到下一次循環(huán)時(shí),判斷到本進(jìn)程bench_child結(jié)構(gòu)體的switcher元素值為SUSPEND,則不執(zhí)行任何壓力測(cè)試業(yè)務(wù)邏輯函數(shù),休息若干毫秒后,進(jìn)入下一次循環(huán),直到bench_child結(jié)構(gòu)體的switcher元素值被改變?yōu)槠渌麪顟B(tài)。6)恢復(fù)部分測(cè)試。在某些性能測(cè)試進(jìn)程被暫停后,用戶(hù)由于某種原因希望恢復(fù)某些被暫停進(jìn)程的壓力測(cè)試執(zhí)行,則可以通過(guò)所述的交互方式告知主進(jìn)程,要求恢復(fù)某些進(jìn)程的性能測(cè)試壓力生成。當(dāng)用戶(hù)的操作請(qǐng)求為選擇性恢復(fù)部分子進(jìn)程執(zhí)行的請(qǐng)求時(shí),主進(jìn)程遍歷共享內(nèi)存中每個(gè)子進(jìn)程結(jié)構(gòu)體,根據(jù)子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值判斷子進(jìn)程是否暫停執(zhí)行,并將暫停執(zhí)行的子進(jìn)程標(biāo)識(shí)發(fā)給用戶(hù)。然后,主進(jìn)程接收用戶(hù)選擇恢復(fù)的子進(jìn)程標(biāo)識(shí),將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表選擇性恢復(fù)部分子進(jìn)程執(zhí)行的值,然后向用戶(hù)選擇的子進(jìn)程發(fā)送通知信號(hào)。然后用戶(hù)選擇恢復(fù)的子進(jìn)程接收到所述通知信號(hào)后,將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值。用戶(hù)選擇恢復(fù)的子進(jìn)程的每個(gè)子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值,則繼續(xù)執(zhí)行循環(huán)操作。例如,主進(jìn)程通過(guò)遍歷共享內(nèi)存中每個(gè)子進(jìn)程的bench_child結(jié)構(gòu)體,判斷該進(jìn)程結(jié)構(gòu)體的switcher元素狀態(tài)是否為已暫停即SUSPEND,將這些處于暫停狀態(tài)的子進(jìn)程的進(jìn)程PID發(fā)給用戶(hù),讓用戶(hù)進(jìn)行選擇。用戶(hù)將需要恢復(fù)運(yùn)行的進(jìn)程PID發(fā)送給主進(jìn)程,主進(jìn)程收到請(qǐng)求后將設(shè)置共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素,將其值設(shè)置為5,再給用戶(hù)指定的幾個(gè)子進(jìn)程發(fā)送SI⑶SRl信號(hào)。這些子進(jìn)程收到該信號(hào)后判斷共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體bench的childsigopt元素是否為5,如果是,則在進(jìn)程共享內(nèi)存中找到屬于本進(jìn)程的bench_child結(jié)構(gòu)體,并且對(duì)該結(jié)構(gòu)體的switcher元素賦值為CONTINUE。當(dāng)這批子進(jìn)程的每個(gè)子線程的循環(huán)體執(zhí)行到下一次循環(huán)時(shí),判斷到本進(jìn)程bench_child結(jié)構(gòu)體的switcher元素值為CONTINUE,則繼續(xù)執(zhí)行壓力測(cè)試的業(yè)務(wù)邏輯函數(shù),從而使得被測(cè)系統(tǒng)得到更大的并發(fā)壓力。
綜上所述,本實(shí)施例還可以實(shí)現(xiàn)用戶(hù)與進(jìn)程之間的交互,當(dāng)用戶(hù)由于某種需求想要改變進(jìn)程時(shí),可以向主進(jìn)程發(fā)送信號(hào),通過(guò)主進(jìn)程的反饋,選擇要改變的進(jìn)程。由此可使用戶(hù)與進(jìn)程之間有一個(gè)交互的過(guò)程,從而可以改變這些進(jìn)程的執(zhí)行狀態(tài),調(diào)節(jié)進(jìn)程生成的策略和頻率,滿(mǎn)足用戶(hù)的各種需求。并且,動(dòng)態(tài)的改變進(jìn)程,可以實(shí)現(xiàn)幾種進(jìn)程狀態(tài)之間的轉(zhuǎn)換,豐富進(jìn)程了的測(cè)試場(chǎng)景,相應(yīng)的也可以提供復(fù)雜的壓力曲線。而且,在本實(shí)施例所述的方法中,主進(jìn)程向子進(jìn)程發(fā)送通知信號(hào)時(shí),無(wú)論何種請(qǐng)求,均發(fā)送同種信號(hào),因?yàn)樵撔盘?hào)起到通知子進(jìn)程的作用,并沒(méi)有代表具體的哪種操作請(qǐng)求,因此使用一種信息可以節(jié)約可使用的信號(hào)量,而且不受限于操作系統(tǒng)的信號(hào)量數(shù)量,適合在各種實(shí)際系統(tǒng)中應(yīng)用。并且,本實(shí)施例所述的方法,可以在不中斷測(cè)試執(zhí)行過(guò)程的情況下,排查被測(cè)系統(tǒng)的性能問(wèn)題,例如,在壓力性能測(cè)試執(zhí)行過(guò)程中,某一時(shí)刻發(fā)現(xiàn)被測(cè)系統(tǒng)有內(nèi)存溢出狀況,通過(guò)本申請(qǐng)可以暫停壓力的生成,然后由開(kāi)發(fā)人員去排查該溢出問(wèn)題,觀察在壓力暫停時(shí)溢出是否繼續(xù),或者收縮,通過(guò)不斷的恢復(fù)和暫停,降低和升高壓力,在不中斷整個(gè)性能測(cè)試執(zhí)行過(guò)程的情況下,完成被測(cè)系統(tǒng)問(wèn)題的排查。因而,有很強(qiáng)的實(shí)用性?;谏鲜鰞?nèi)容,下面通過(guò)圖2至圖5,詳細(xì)的介紹本申請(qǐng)一種優(yōu)選實(shí)施例的流程。在實(shí)施例所述的多進(jìn)程多線程測(cè)試執(zhí)行過(guò)程中,可以動(dòng)態(tài)的改變進(jìn)程的執(zhí)行,滿(mǎn)足用戶(hù)的各種需求。本實(shí)施例以Xnix系統(tǒng)(Unix及Linux系統(tǒng),并包括他們的衍生版本)為例,當(dāng)然所述方法同樣適用于Windows等其他操作系統(tǒng)。參照?qǐng)D2,是本申請(qǐng)優(yōu)選實(shí)施例所述的一種測(cè)試執(zhí)行的調(diào)度方法流程圖。步驟201,啟動(dòng)壓力測(cè)試,主進(jìn)程注冊(cè)接收SIGINT及SI⑶SRl信號(hào);信號(hào)處理機(jī)制為signal(SIGNT, cb_trap) ;signal (SIGUSR1, cb_trap).步驟202,初始化進(jìn)程共享內(nèi)存,初始化主進(jìn)程結(jié)構(gòu)體,并為各個(gè)子進(jìn)程結(jié)構(gòu)體分配空間,將共享內(nèi)存的指針保存到全局變量mbp中;其中包括,主進(jìn)程的結(jié)構(gòu)體和子進(jìn)程結(jié)構(gòu)體,如圖所示。
步驟203,通過(guò)函數(shù)fork O生成指定數(shù)量的子進(jìn)程;步驟203之后,可以進(jìn)入步驟204,也可以進(jìn)入流程B,參照?qǐng)D5。步驟204,主進(jìn)程生成定時(shí)器線程,使得Cbenchmark主進(jìn)程的執(zhí)行次數(shù)可以通過(guò)時(shí)間控制;若控制時(shí)間,執(zhí)行步驟205,若不控制時(shí)間,等待所有子進(jìn)程執(zhí)行完畢。步驟205,指定時(shí)間,開(kāi)始計(jì)時(shí);通過(guò)定時(shí)線程,由函數(shù)pthread_create O ,指定時(shí)間。步驟206,計(jì)時(shí)結(jié)束后,通過(guò)mbp變量找到主進(jìn)程的bench結(jié)構(gòu)體,賦值childsigopt元素為1,并通過(guò)SI⑶SR信號(hào)讓每個(gè)子進(jìn)程進(jìn)行處理。
主進(jìn)程發(fā)送SI⑶SRI信號(hào)給每個(gè)子進(jìn)程,進(jìn)入流程C,參照?qǐng)D4。參照?qǐng)D3,是本申請(qǐng)優(yōu)選實(shí)施例所述一種測(cè)試執(zhí)行的調(diào)度方法中主進(jìn)程的流程圖。步驟301,用戶(hù)對(duì)Cbenchmark主進(jìn)程發(fā)送Ctr 1+C信號(hào);在性能測(cè)試系統(tǒng)執(zhí)行時(shí),如果用戶(hù)想要執(zhí)行某種操作,可以通過(guò)對(duì)主進(jìn)程發(fā)送Ctrl+C 信號(hào)。步驟302,主進(jìn)程向用戶(hù)返回可操作的菜單;主進(jìn)程接收到該信號(hào)量后,返回給用戶(hù)一個(gè)可操作的菜單,用戶(hù)可輸入的操作包括0 :強(qiáng)制推出性能測(cè)試;1 :停止執(zhí)行但統(tǒng)計(jì)測(cè)試數(shù)據(jù);2 :暫停所有虛擬用戶(hù);3 :恢復(fù)所有虛擬用戶(hù);4 :暫停指定測(cè)試進(jìn)程;5 :恢復(fù)指定測(cè)試進(jìn)程。步驟303,要求用戶(hù)輸入操作ID ;用戶(hù)根據(jù)自己的需求,確定要執(zhí)行的操作,輸入相應(yīng)的操作ID。步驟304,用戶(hù)選擇要操作的選項(xiàng),發(fā)送給主進(jìn)程;用戶(hù)選擇要操作的選項(xiàng)對(duì)應(yīng)的操作數(shù),主進(jìn)程通過(guò)確定操作數(shù)n,確定相應(yīng)要操作的選項(xiàng)。步驟305,選擇操作數(shù)n,將共享內(nèi)存中bench結(jié)構(gòu)體中childsigopt元素設(shè)置為η ;即主進(jìn)程在接收到選項(xiàng)操作時(shí),會(huì)將代表該操作請(qǐng)求的值,賦值給位于共享內(nèi)存中的主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量,再向每個(gè)正在執(zhí)行測(cè)試的子進(jìn)程發(fā)送信號(hào)。步驟306,判斷操作數(shù)η的取值;若η為O至3任一數(shù)值,選擇步驟307 ;若η為4或5任一數(shù)值,選擇步驟308。步驟307,遍歷共享內(nèi)存中的子進(jìn)程鏈表,獲得子進(jìn)程pid,給每個(gè)pid發(fā)送SI⑶SRI信號(hào);主進(jìn)程發(fā)送SI⑶SRI信號(hào)給每個(gè)子進(jìn)程,進(jìn)入流程C,參照?qǐng)D4。步驟308,遍歷共享內(nèi)存中的子進(jìn)程結(jié)構(gòu)體的switcher,獲得其當(dāng)前狀態(tài),并將處于某種狀態(tài)進(jìn)程的Pid返回給用戶(hù)以供選擇;主進(jìn)程確定某幾個(gè)進(jìn)程pid并輸出。步驟309,用戶(hù)選擇欲暫?;蛘呋謴?fù)等操作的指定進(jìn)程;步驟310,用戶(hù)輸入選擇的進(jìn)程pid,主進(jìn)程判斷輸入的pid是否為本進(jìn)程的子進(jìn)程 pid ;若是,執(zhí)行步驟311,若不是,返回步驟308,重新輸入;
步驟311,通過(guò)輸入的pid得到共享內(nèi)存中該子進(jìn)程的結(jié)構(gòu)體bench_child ;步驟312,判斷該子進(jìn)程結(jié)構(gòu)體bench_child的switcher元素狀態(tài)是否可操作;若是,執(zhí)行步驟313,若不是,返回步驟308,重新輸入;步驟313,通過(guò)pid向該子進(jìn)程發(fā)送SI⑶SRI信號(hào)。主進(jìn)程發(fā)送SI⑶SRI信號(hào)給每個(gè)子進(jìn)程,進(jìn)入流程C,參照?qǐng)D4。參照?qǐng)D4,是本申請(qǐng)優(yōu)選實(shí)施例所述一種測(cè)試執(zhí)行的調(diào)度方法中子進(jìn)程的流程圖。每個(gè)子進(jìn)程的執(zhí)行步驟如下步驟401,接收SI⑶SRI信號(hào),通過(guò)mbp指針在共享內(nèi)存中找到屬于本進(jìn)程的子進(jìn)程bench_child結(jié)構(gòu)體和主進(jìn)程結(jié)構(gòu)體bench ; 步驟402,判斷主進(jìn)程結(jié)構(gòu)體childsigopt元素的值;步驟403,判斷bench結(jié)構(gòu)體childsigopt元素是否等于O,即是否強(qiáng)制退出;若為0,執(zhí)行exit O退出本子進(jìn)程,若不為0,執(zhí)行步驟404;步驟404,判斷bench結(jié)構(gòu)體childsigopt元素是否等于I,即是否停止執(zhí)行本進(jìn)程;若為0,執(zhí)行步驟405,若不為0,執(zhí)行步驟406 ;步驟405,對(duì)本子進(jìn)程的bench_child結(jié)構(gòu)體的siwtcher元素賦值為BREAK ;該子進(jìn)程的所有子線程在下一次循環(huán)時(shí)退出循環(huán)體,然后執(zhí)行退出操作,該子進(jìn)程等到每個(gè)子線程都退出后,再執(zhí)行分析該進(jìn)程的性能測(cè)試數(shù)據(jù)工作,以生成性能測(cè)試報(bào)
生口 ο步驟406,判斷bench結(jié)構(gòu)體childsigopt元素是否等于2或4,即是否暫停執(zhí)行本進(jìn)程;若為2或4,執(zhí)行步驟407,若不為2或4,執(zhí)行步驟408 ;步驟407,對(duì)本子進(jìn)程的bench_child結(jié)構(gòu)體的siwtcher元素賦值為SUSPEND ;該子進(jìn)程的所有子線程,在下一次循環(huán)時(shí)會(huì)不執(zhí)行壓力測(cè)試函數(shù),而直接進(jìn)入再下一次循環(huán)。步驟408,判斷bench結(jié)構(gòu)體childsigopt元素等于3或5,即是否恢復(fù)執(zhí)行本進(jìn)程;若為3或5,執(zhí)行步驟409,若不為3或5,出錯(cuò),結(jié)束。步驟409,對(duì)本子進(jìn)程的bench_child結(jié)構(gòu)體的siwtcher元素賦值為CONTINUE。該子進(jìn)程的所有子線程在下一次循環(huán)時(shí)會(huì)繼續(xù)執(zhí)行壓力測(cè)試函數(shù)。參照?qǐng)D5,是本申請(qǐng)優(yōu)選實(shí)施例所述一種測(cè)試執(zhí)行的調(diào)度方法中子進(jìn)程子線程的流程圖。所述流程包括兩部分,分別是子進(jìn)程執(zhí)行的流程和子線程執(zhí)行的流程,下面分別介紹。首先,每個(gè)子進(jìn)程執(zhí)行如下步驟步驟501,子進(jìn)程繼承了主進(jìn)程的信號(hào)處理機(jī)制,并得到共享內(nèi)存的指針變量mbp ;步驟502,通過(guò)mbp指針在共享內(nèi)存中找到屬于本進(jìn)程的子進(jìn)程bench_chi Id結(jié)構(gòu)體,進(jìn)行初始化,switcher元素賦值為CONTINUE,表示運(yùn)行中;
步驟503,生成指定數(shù)量的線程;每個(gè)線程就是一個(gè)并發(fā)虛擬用戶(hù)。步驟504,等待本進(jìn)程生成的所有子線程執(zhí)行完畢;步驟505,判斷是否本進(jìn)程所有線程都已退出;可根據(jù)步驟516進(jìn)行判斷,若是,執(zhí)行步驟506,若否,返回執(zhí)行步驟504。步驟506,收集、統(tǒng)計(jì)測(cè)試數(shù)據(jù),生成測(cè)試報(bào)告;步驟507,執(zhí)行exit O退出本子程序。在上述步驟502中,通過(guò)函數(shù)cLcreateO生成線程,然后可進(jìn)入步驟508。 每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行如下步驟步驟508,多個(gè)進(jìn)程的多個(gè)線程并行執(zhí)行生成并發(fā)壓力;本線程將執(zhí)行一個(gè)循環(huán)結(jié)構(gòu),結(jié)構(gòu)中被執(zhí)行的是壓力測(cè)試的業(yè)務(wù)函數(shù);步驟509,判斷本子進(jìn)程的bench_child結(jié)構(gòu)體的siwtcher元素是否為CONTINUE ;若是,執(zhí)行步驟510,若否,執(zhí)行步驟512。步驟510,判斷是否執(zhí)行指定次數(shù);若是,執(zhí)行步驟516,若否,執(zhí)行步驟511。步驟511,執(zhí)行壓力測(cè)試的業(yè)務(wù)邏輯函數(shù);CONTINUE表示需要執(zhí)行壓力,所以執(zhí)行壓力測(cè)試的業(yè)務(wù)邏輯函數(shù),返回步驟509 ;步驟512,判斷本子進(jìn)程的bench_child結(jié)構(gòu)體的switcher元素是否為SUSPEND ;若是,執(zhí)行步驟513,若否,執(zhí)行步驟514 ;步驟513,不執(zhí)行壓力測(cè)試的業(yè)務(wù)邏輯函數(shù),休眠若干時(shí)間后,再進(jìn)行下一次循環(huán);SUSPEND表示需要暫停該壓力的生成,所以不執(zhí)行壓力測(cè)試的業(yè)務(wù)邏輯函數(shù),休眠若干時(shí)間后,再進(jìn)行下一次循環(huán)。步驟514,判斷本子進(jìn)程的bench_child結(jié)構(gòu)體的switcher元素是否為BREAK ;若是,執(zhí)行步驟515 ;若否,出錯(cuò),結(jié)束。步驟515,直接執(zhí)行break跳出循環(huán);BREAK表示需要停止該壓力的生成,所以這里直接執(zhí)行break跳出循環(huán)。步驟516,退出本線程;退出本線程后,可進(jìn)入步驟505。由以上可知,在性能測(cè)試中,用戶(hù)可以根據(jù)需求改變進(jìn)程的狀態(tài),主進(jìn)程根據(jù)用戶(hù)的選擇,改變主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,子進(jìn)程判斷主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。在實(shí)際應(yīng)用中,上述方法可以由C語(yǔ)言實(shí)現(xiàn),可以達(dá)到很好的效果。而且,所述方法不依賴(lài)于特定的操作系統(tǒng)或硬件,還可跨平臺(tái)執(zhí)行。上述實(shí)施例是以壓力測(cè)試為例進(jìn)行說(shuō)明,但具體應(yīng)用中也可以應(yīng)用到其他的性能測(cè)試中,其實(shí)施原理與上述實(shí)施例相似,故不再贅述。需要說(shuō)明的是,對(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ū)中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作并不一定是本申請(qǐng)所必須的。基于上述方法實(shí)施例的說(shuō)明,本申請(qǐng)還提供了相應(yīng)的控制測(cè)試的調(diào)度執(zhí)行的裝置實(shí)施例,來(lái)實(shí)現(xiàn)上述方法實(shí)施例所述的內(nèi)容。參照?qǐng)D6是本申請(qǐng)實(shí)施例所述一種測(cè)試執(zhí)行的調(diào)度裝置結(jié)構(gòu)圖。所述裝置可以包括用戶(hù)交互單元61,主進(jìn)程調(diào)度單元62,子進(jìn)程調(diào)度單元63。其中,用戶(hù)交互單元61,用于主進(jìn)程接收用戶(hù)的操作請(qǐng)求;主進(jìn)程調(diào)度單元62,用于主進(jìn)程將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表該操作請(qǐng)求的值,然后向子進(jìn)程發(fā)送通知信號(hào); 子進(jìn)程調(diào)度單元63,用于子進(jìn)程接收到所述通知信號(hào)后,通過(guò)判斷所述共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。除以上主要單元設(shè)置以外,根據(jù)不同的操作請(qǐng)求,本裝置還可以包括當(dāng)用戶(hù)的操作請(qǐng)求為強(qiáng)制退出測(cè)試執(zhí)行的請(qǐng)求時(shí),所述子進(jìn)程調(diào)度單元63進(jìn)一步可包括強(qiáng)制退出子單元631,用于子進(jìn)程退出進(jìn)程操作。當(dāng)用戶(hù)的操作請(qǐng)求為停止、暫?;蚧謴?fù)子進(jìn)程執(zhí)行的請(qǐng)求時(shí)所述子進(jìn)程調(diào)度單元63用于子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表所述操作請(qǐng)求的值。進(jìn)一步,所述的裝置還包括子線程調(diào)度單元64,用于子進(jìn)程的每個(gè)子線程循環(huán)執(zhí)行測(cè)試代碼;子線程在每次循環(huán)執(zhí)行之前,通過(guò)判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。當(dāng)用戶(hù)的操作請(qǐng)求為停止所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí)所述子進(jìn)程調(diào)度單元63包括進(jìn)程停止子單元632,用于每個(gè)子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表停止執(zhí)行的值;報(bào)告生成子單元633,,用于子進(jìn)程等到該子進(jìn)程的每個(gè)子線程都退出循環(huán)操作后,分析該子進(jìn)程的測(cè)試數(shù)據(jù)并生成測(cè)試報(bào)告。所述子線程調(diào)度單元64包括線程停止子單元641,用于每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表停止執(zhí)行的值,則退出循環(huán)操作;當(dāng)用戶(hù)的操作請(qǐng)求為暫停所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí)所述子進(jìn)程調(diào)度單元63包括進(jìn)程暫停子單元634,用于每個(gè)子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值;所述子線程調(diào)度單元64包括線程暫停子單元642,用于每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值,則停止執(zhí)行該次循環(huán)操作,并跳入下一次循環(huán)。當(dāng)用戶(hù)的操作請(qǐng)求為恢復(fù)所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí)所述子進(jìn)程調(diào)度單元63包括進(jìn)程恢復(fù)子單元635,用于每個(gè)子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值;所述子線程調(diào)度單元64包括線程恢復(fù)子單元643,用于每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值,則繼續(xù)執(zhí)行循環(huán)操作。當(dāng)用戶(hù)的操作請(qǐng)求為選擇性暫停部分子進(jìn)程執(zhí)行的請(qǐng)求時(shí) 所述用戶(hù)交互單元61還用于主進(jìn)程遍歷共享內(nèi)存中每個(gè)子進(jìn)程結(jié)構(gòu)體,根據(jù)子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值判斷子進(jìn)程是否正在執(zhí)行,并將正在執(zhí)行的子進(jìn)程標(biāo)識(shí)發(fā)給用戶(hù);所述主進(jìn)程調(diào)度單元62用于主進(jìn)程接收用戶(hù)選擇暫停的子進(jìn)程標(biāo)識(shí),將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表選擇性暫停部分子進(jìn)程執(zhí)行的值,然后向用戶(hù)選擇的子進(jìn)程發(fā)送通知信號(hào); 所述子進(jìn)程調(diào)度單元63包括進(jìn)程選擇性暫停子單元636,用于所述用戶(hù)選擇暫停的子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值;所述子線程調(diào)度單元64包括線程選擇性暫停子單元644,用于所述用戶(hù)選擇暫停的子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值,則停止執(zhí)行該次循環(huán)操作,并跳入下一次循環(huán)。當(dāng)用戶(hù)的操作請(qǐng)求為選擇性恢復(fù)部分子進(jìn)程執(zhí)行的請(qǐng)求時(shí)所述用戶(hù)交互單元61用于主進(jìn)程遍歷共享內(nèi)存中每個(gè)子進(jìn)程結(jié)構(gòu)體,根據(jù)子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值判斷子進(jìn)程是否暫停執(zhí)行,并將暫停執(zhí)行的子進(jìn)程標(biāo)識(shí)發(fā)給用戶(hù);所述主進(jìn)程調(diào)度單元62用于主進(jìn)程接收用戶(hù)選擇恢復(fù)的子進(jìn)程標(biāo)識(shí),將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表選擇性恢復(fù)部分子進(jìn)程執(zhí)行的值,然后向用戶(hù)選擇的子進(jìn)程發(fā)送通知信號(hào);所述子進(jìn)程調(diào)度單元63包括進(jìn)程選擇性恢復(fù)子單元637,用于所述用戶(hù)選擇恢復(fù)的子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值;所述子線程調(diào)度單元64包括線程選擇性恢復(fù)子單元645,用于所述用戶(hù)選擇恢復(fù)的子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值,則繼續(xù)執(zhí)行循環(huán)操作。優(yōu)選的,所述用戶(hù)交互單元61還用于主進(jìn)程接收用戶(hù)的操作請(qǐng)求之前,先接收用戶(hù)發(fā)來(lái)的調(diào)度控制信號(hào),并向用戶(hù)返回操作菜單,供用戶(hù)在所述操作菜單中選擇操作選項(xiàng),其中每個(gè)操作選項(xiàng)對(duì)應(yīng)一個(gè)操作請(qǐng)求。上述控制測(cè)試的調(diào)度裝置可用于多進(jìn)程多線程的并發(fā)測(cè)試中,可以根據(jù)的用戶(hù)的操作請(qǐng)求,通過(guò)主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,動(dòng)態(tài)的改變進(jìn)程的執(zhí)行,控制每一組進(jìn)程的執(zhí)行狀態(tài)。而且,本裝置中用戶(hù)在向主進(jìn)程發(fā)送操作請(qǐng)求時(shí),無(wú)論何種操作請(qǐng)求,均發(fā)送同種信號(hào),因而可以節(jié)約可使用的信號(hào)量,而且不受限于操作系統(tǒng)的信號(hào)量數(shù)量,適合在各種實(shí)際系統(tǒng)中應(yīng)用。對(duì)于上述測(cè)試執(zhí)行的調(diào)度裝置實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)圖I至圖5所示方法實(shí)施例的部分說(shuō)明即可。本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可。 以上對(duì)本申請(qǐng)所提供的一種測(cè)試執(zhí)行的調(diào)度方法及裝置,進(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ō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。
權(quán)利要求
1.一種測(cè)試執(zhí)行的調(diào)度方法,其特征在于,包括 主進(jìn)程接收用戶(hù)的操作請(qǐng)求; 主進(jìn)程將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表該操作請(qǐng)求的值,然后向子進(jìn)程發(fā)送通知信號(hào); 子進(jìn)程接收到所述通知信號(hào)后,通過(guò)判斷所述共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為強(qiáng)制退出測(cè)試執(zhí)行的請(qǐng)求時(shí),子進(jìn)程執(zhí)行的相應(yīng)操作包括 子進(jìn)程退出進(jìn)程操作。
3.根據(jù)權(quán)利要求I所述的方法,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為停止、暫停或恢復(fù)子進(jìn)程執(zhí)行的請(qǐng)求時(shí),子進(jìn)程執(zhí)行的相應(yīng)操作包括 子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表所述操作請(qǐng)求的值。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,還包括 子進(jìn)程的每個(gè)子線程循環(huán)執(zhí)行測(cè)試代碼; 子線程在每次循環(huán)執(zhí)行之前,通過(guò)判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為停止所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí) 每個(gè)子進(jìn)程執(zhí)行的相應(yīng)操作包括子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表停止執(zhí)行的值; 每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行的相應(yīng)操作包括子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表停止執(zhí)行的值,則退出循環(huán)操作;每個(gè)子進(jìn)程執(zhí)行的相應(yīng)操作還包括子進(jìn)程等到該子進(jìn)程的每個(gè)子線程都退出循環(huán)操作后,分析該子進(jìn)程的測(cè)試數(shù)據(jù)并生成測(cè)試報(bào)告。
6.根據(jù)權(quán)利要求4所述的方法,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為暫停所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí) 每個(gè)子進(jìn)程執(zhí)行的相應(yīng)操作包括子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值; 每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行的相應(yīng)操作包括子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值,則停止執(zhí)行該次循環(huán)操作,并跳入下一次循環(huán)。
7.根據(jù)權(quán)利要求4所述的方法,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為恢復(fù)所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí) 每個(gè)子進(jìn)程執(zhí)行的相應(yīng)操作包括子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值; 每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行的相應(yīng)操作包括子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值,則繼續(xù)執(zhí)行循環(huán)操作。
8.根據(jù)權(quán)利要求4所述的方法,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為選擇性暫停部分子進(jìn)程執(zhí)行的請(qǐng)求時(shí), 還包括主進(jìn)程遍歷共享內(nèi)存中每個(gè)子進(jìn)程結(jié)構(gòu)體,根據(jù)子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值判斷子進(jìn)程是否正在執(zhí)行,并將正在執(zhí)行的子進(jìn)程標(biāo)識(shí)發(fā)給用戶(hù); 主進(jìn)程接收用戶(hù)選擇暫停的子進(jìn)程標(biāo)識(shí),將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表選擇性暫停部分子進(jìn)程執(zhí)行的值,然后向用戶(hù)選擇的子進(jìn)程發(fā)送通知信號(hào);所述用戶(hù)選擇暫停的子進(jìn)程執(zhí)行的相應(yīng)操作包括子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值; 所述用戶(hù)選擇暫停的子進(jìn)程的每個(gè)子線程執(zhí)行的相應(yīng)操作包括子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值,則停止執(zhí)行該次循環(huán)操作,并跳入下一次循環(huán)。
9.根據(jù)權(quán)利要求4所述的方法,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為選擇性恢復(fù)部分子進(jìn)程執(zhí)行的請(qǐng)求時(shí), 還包括主進(jìn)程遍歷共享內(nèi)存中每個(gè)子進(jìn)程結(jié)構(gòu)體,根據(jù)子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值判斷子進(jìn)程是否暫停執(zhí)行,并將暫停執(zhí)行的子進(jìn)程標(biāo)識(shí)發(fā)給用戶(hù); 主進(jìn)程接收用戶(hù)選擇恢復(fù)的子進(jìn)程標(biāo)識(shí),將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表選擇性恢復(fù)部分子進(jìn)程執(zhí)行的值,然后向用戶(hù)選擇的子進(jìn)程發(fā)送通知信號(hào);所述用戶(hù)選擇恢復(fù)的子進(jìn)程執(zhí)行的相應(yīng)操作包括子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值; 所述用戶(hù)選擇恢復(fù)的子進(jìn)程的每個(gè)子線程執(zhí)行的相應(yīng)操作包括子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值,則繼續(xù)執(zhí)行循環(huán)操作。
10.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述主進(jìn)程接收用戶(hù)的操作請(qǐng)求之前,還包括 主進(jìn)程接收用戶(hù)發(fā)來(lái)的調(diào)度控制信號(hào),并向用戶(hù)返回操作菜單; 用戶(hù)選擇所述操作菜單中的操作選項(xiàng)并發(fā)送給主進(jìn)程,所述操作菜單中的每個(gè)操作選項(xiàng)對(duì)應(yīng)一個(gè)操作請(qǐng)求。
11.一種測(cè)試執(zhí)行的調(diào)度裝置,其特征在于,包括 用戶(hù)交互單元,用于主進(jìn)程接收用戶(hù)的操作請(qǐng)求; 主進(jìn)程調(diào)度單元,用于主進(jìn)程將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表該操作請(qǐng)求的值,然后向子進(jìn)程發(fā)送通知信號(hào); 子進(jìn)程調(diào)度單元,用于子進(jìn)程接收到所述通知信號(hào)后,通過(guò)判斷所述共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為強(qiáng)制退出測(cè)試執(zhí)行的請(qǐng)求時(shí),所述子進(jìn)程調(diào)度單元包括 強(qiáng)制退出子單元,用于子進(jìn)程退出進(jìn)程操作。
13.根據(jù)權(quán)利要求11所述的裝置,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為停止、暫?;蚧謴?fù)子進(jìn)程執(zhí)行的請(qǐng)求時(shí) 所述子進(jìn)程調(diào)度單元用于子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表所述操作請(qǐng)求的值。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,還包括 子線程調(diào)度單元,用于子進(jìn)程的每個(gè)子線程循環(huán)執(zhí)行測(cè)試代碼;子線程在每次循環(huán)執(zhí)行之前,通過(guò)判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。
15.根據(jù)權(quán)利要求14所述的裝置,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為停止所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí) 所述子進(jìn)程調(diào)度單元包括進(jìn)程停止子單元,用于每個(gè)子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表停止執(zhí)行的值; 所述子線程調(diào)度單元包括線程停止子單元,用于每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表停止執(zhí)行的值,則退出循環(huán)操作; 所述子進(jìn)程調(diào)度單元還包括報(bào)告生成子單元,用于子進(jìn)程等到該子進(jìn)程的每個(gè)子線程都退出循環(huán)操作后,分析該子進(jìn)程的測(cè)試數(shù)據(jù)并生成測(cè)試報(bào)告。
16.根據(jù)權(quán)利要求14所述的裝置,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為暫停所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí) 所述子進(jìn)程調(diào)度單元包括進(jìn)程暫停子單元,用于每個(gè)子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值; 所述子線程調(diào)度單元包括線程暫停子單元,用于每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值,則停止執(zhí)行該次循環(huán)操作,并跳入下一次循環(huán)。
17.根據(jù)權(quán)利要求14所述的裝置,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為恢復(fù)所有子進(jìn)程執(zhí)行的請(qǐng)求時(shí) 所述子進(jìn)程調(diào)度單元包括進(jìn)程恢復(fù)子單元,用于每個(gè)子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值; 所述子線程調(diào)度單元包括線程恢復(fù)子單元,用于每個(gè)子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值,則繼續(xù)執(zhí)行循環(huán)操作。
18.根據(jù)權(quán)利要求14所述的裝置,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為選擇性暫停部分子進(jìn)程執(zhí)行的請(qǐng)求時(shí) 所述用戶(hù)交互單元還用于主進(jìn)程遍歷共享內(nèi)存中每個(gè)子進(jìn)程結(jié)構(gòu)體,根據(jù)子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值判斷子進(jìn)程是否正在執(zhí)行,并將正在執(zhí)行的子進(jìn)程標(biāo)識(shí)發(fā)給用戶(hù); 所述主進(jìn)程調(diào)度單元用于主進(jìn)程接收用戶(hù)選擇暫停的子進(jìn)程標(biāo)識(shí),將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表選擇性暫停部分子進(jìn)程執(zhí)行的值,然后向用戶(hù)選擇的子進(jìn)程發(fā)送通知信號(hào); 所述子進(jìn)程調(diào)度單元包括進(jìn)程選擇性暫停子單元,用于所述用戶(hù)選擇暫停的子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值; 所述子線程調(diào)度單元包括線程選擇性暫停子單元,用于所述用戶(hù)選擇暫停的子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表暫停執(zhí)行的值,則停止執(zhí)行該次循環(huán)操作,并跳入下一次循環(huán)。
19.根據(jù)權(quán)利要求14所述的裝置,其特征在于,當(dāng)用戶(hù)的操作請(qǐng)求為選擇性恢復(fù)部分子進(jìn)程執(zhí)行的請(qǐng)求時(shí) 所述用戶(hù)交互單元還用于主進(jìn)程遍歷共享內(nèi)存中每個(gè)子進(jìn)程結(jié)構(gòu)體,根據(jù)子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值判斷子進(jìn)程是否暫停執(zhí)行,并將暫停執(zhí)行的子進(jìn)程標(biāo)識(shí)發(fā)給用戶(hù); 所述主進(jìn)程調(diào)度單元用于主進(jìn)程接收用戶(hù)選擇恢復(fù)的子進(jìn)程標(biāo)識(shí),將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表選擇性恢復(fù)部分子進(jìn)程執(zhí)行的值,然后向用戶(hù)選擇的子進(jìn)程發(fā)送通知信號(hào); 所述子進(jìn)程調(diào)度單元包括進(jìn)程選擇性恢復(fù)子單元,用于所述用戶(hù)選擇恢復(fù)的子進(jìn)程執(zhí)行如下的相應(yīng)操作子進(jìn)程將共享內(nèi)存中該子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值; 所述子線程調(diào)度單元包括線程選擇性恢復(fù)子單元,用于所述用戶(hù)選擇恢復(fù)的子進(jìn)程的每個(gè)子線程執(zhí)行如下的相應(yīng)操作子線程執(zhí)行到下一次循環(huán)時(shí),判斷共享內(nèi)存中所屬子進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表繼續(xù)執(zhí)行的值,則繼續(xù)執(zhí)行循環(huán)操作。
20.根據(jù)權(quán)利要求11所述的裝置,其特征在于 所述用戶(hù)交互單元還用于主進(jìn)程接收用戶(hù)的操作請(qǐng)求之前,先接收用戶(hù)發(fā)來(lái)的調(diào)度控制信號(hào),并向用戶(hù)返回操作菜單,供用戶(hù)在所述操作菜單中選擇操作選項(xiàng),其中每個(gè)操作選項(xiàng)對(duì)應(yīng)一個(gè)操作請(qǐng)求。
全文摘要
本申請(qǐng)?zhí)峁┝艘环N測(cè)試執(zhí)行的調(diào)度方法及裝置,能夠動(dòng)態(tài)的改變進(jìn)程的執(zhí)行。所述的方法包括主進(jìn)程接收用戶(hù)的操作請(qǐng)求;主進(jìn)程將共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值設(shè)置為代表該操作請(qǐng)求的值,然后向子進(jìn)程發(fā)送通知信號(hào);子進(jìn)程接收到所述通知信號(hào)后,通過(guò)判斷所述共享內(nèi)存中主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,執(zhí)行相應(yīng)的操作。本申請(qǐng)基于多進(jìn)程多線程,通過(guò)所述的方法及裝置,可以根據(jù)用戶(hù)的操作請(qǐng)求,通過(guò)改變主進(jìn)程結(jié)構(gòu)體內(nèi)的操作變量值,動(dòng)態(tài)的改變進(jìn)程的執(zhí)行,控制每一組進(jìn)程的執(zhí)行狀態(tài),實(shí)現(xiàn)幾種進(jìn)程狀態(tài)之間的轉(zhuǎn)換,從而可以豐富測(cè)試場(chǎng)景,相應(yīng)的也可以制作復(fù)雜的測(cè)試曲線。
文檔編號(hào)G06F11/36GK102831053SQ20111016395
公開(kāi)日2012年12月19日 申請(qǐng)日期2011年6月17日 優(yōu)先權(quán)日2011年6月17日
發(fā)明者崔崢 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司