本技術(shù)涉及計(jì)算機(jī),尤其涉及一種測(cè)試用例的更新方法及裝置。
背景技術(shù):
1、目前,對(duì)于代碼中應(yīng)用程序接口(application?programming?interface,api)的功能測(cè)試,通常情況下,開發(fā)人員設(shè)計(jì)代碼中api的內(nèi)容,測(cè)試人員基于測(cè)試用例測(cè)試api的功能。當(dāng)開發(fā)人員對(duì)代碼的api進(jìn)行修改后,由于api輸入輸出字段的類型、數(shù)據(jù)表示方法、計(jì)算公式等內(nèi)容發(fā)生變化,可能造成現(xiàn)存的測(cè)試用例失效。然而,如果簡(jiǎn)單舍棄失效的現(xiàn)存測(cè)試用例,并針對(duì)新的api的功能來設(shè)計(jì)全新的測(cè)試用例,將會(huì)浪費(fèi)現(xiàn)存的成果,并造成重復(fù)、冗余的設(shè)計(jì)工作,效率低下。為此,測(cè)試人員需要人工理解api功能的改動(dòng)邏輯,然后手動(dòng)修改那些受到代碼改動(dòng)影響的測(cè)試用例,直到其測(cè)試通過,而這個(gè)過程易錯(cuò)、耗時(shí),且成本高。
2、因此,當(dāng)代碼發(fā)生改動(dòng)時(shí),如何對(duì)測(cè)試用例進(jìn)行自動(dòng)更新,仍需要進(jìn)一步研究。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明實(shí)施例提供一種測(cè)試用例的更新方法及裝置,當(dāng)代碼發(fā)生改動(dòng)時(shí),根據(jù)第一api的輸入?yún)?shù)與第二api的輸入?yún)?shù)之間的關(guān)系、第一api的輸出參數(shù)與第二api的輸出參數(shù)之間的關(guān)系,將受第一api變化影響的語句中的第一api修改為第二api,無需人工理解改動(dòng)邏輯并重新編寫測(cè)試用例,實(shí)現(xiàn)測(cè)試用例的自動(dòng)更新,提高測(cè)試效率。
2、第一方面,本發(fā)明實(shí)施例提供一種測(cè)試用例的更新方法,該方法包括:獲取將代碼中第一應(yīng)用程序接口api修改為第二api的說明信息;根據(jù)所述說明信息,確定所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系;在所述代碼的測(cè)試用例中確定受所述第一api變化影響的至少一個(gè)語句;根據(jù)所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系,將所述至少一個(gè)語句中的所述第一api修改為所述第二api。
3、采用上述方法,當(dāng)代碼發(fā)生改動(dòng)時(shí),導(dǎo)致原始測(cè)試用例的失效,此時(shí)通過獲取將代碼中第一應(yīng)用程序接口api修改為第二api的說明信息,并根據(jù)獲取的說明信息進(jìn)行分析,得到第一api的輸入?yún)?shù)與第二api的輸入?yún)?shù)之間的關(guān)系、第一api的輸出參數(shù)與第二api的輸出參數(shù)之間的關(guān)系,第一api的輸入?yún)?shù)與第二api的輸入?yún)?shù)之間的關(guān)系、第一api的輸出參數(shù)與第二api的輸出參數(shù)之間的關(guān)系準(zhǔn)確的描述了第一api與第二api之間的轉(zhuǎn)換規(guī)則。通過深入分析代碼的語義,不僅僅是簡(jiǎn)單的字符串匹配和替換,實(shí)現(xiàn)對(duì)測(cè)試用例中受第一api變化影響的代碼的自動(dòng)更新。更新后的測(cè)試用例不僅語法和語義的正確性,同時(shí)能夠與改動(dòng)后的api語法相符,編譯通過,能夠使得新的測(cè)試用例與原始測(cè)試邏輯保持一致,提高測(cè)試用例自動(dòng)更新的效率。
4、在一種可選的實(shí)施方式中,根據(jù)所述說明信息,確定所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系,包括:對(duì)所述說明信息進(jìn)行符號(hào)執(zhí)行,得到所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系。
5、采用上述方法,通過對(duì)獲取的將第一api修改為第二api的修改說明進(jìn)行符號(hào)執(zhí)行,可以得到第一api的輸出參數(shù)與第一api的輸出參數(shù)之間的關(guān)系、第一api輸出參數(shù)與第二api輸出參數(shù)之間的關(guān)系。第一api的輸出參數(shù)與第一api的輸出參數(shù)之間的關(guān)系、第一api輸出參數(shù)與第二api輸出參數(shù)之間的關(guān)系精準(zhǔn)的描述了如何用第一api的輸入?yún)?shù)得到第二api的輸入?yún)?shù),第一api的輸出參數(shù)與第二api的輸出參數(shù)之間的轉(zhuǎn)換邏輯,為后續(xù)測(cè)試用例代碼的更新提供關(guān)鍵信息。
6、在一種可選的實(shí)施方式中,所述至少一個(gè)語句包括第一語句,所述第一語句為賦值語句;根據(jù)所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系,將所述至少一個(gè)語句中的所述第一api修改為所述第二api,包括:獲取所述第一語句中所述第一api的輸入?yún)?shù)取值和所述第一語句的返回值;根據(jù)所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第一語句中所述第一api的輸入?yún)?shù)取值,得到所述第二api的輸入?yún)?shù)取值;根據(jù)所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系、所述第一語句的返回值,得到新的返回值;根據(jù)所述第二api的輸入?yún)?shù)取值、所述新的返回值,將所述第一語句中的所述第一api修改為所述第二api。
7、采用上述方法,首先對(duì)原始測(cè)試用例中受第一api影響的語句中的第一語句進(jìn)行分析,獲取第一語句的代碼邏輯,由于第一語句是賦值語句,獲取第一語句中第一api的輸入?yún)?shù)取值和第一語句的返回值,上述信息不僅包含測(cè)試用例中受第一api影響的代碼的位置,還包括了該語句的語義。結(jié)合上述信息和第一api的輸出參數(shù)與第一api的輸出參數(shù)之間的關(guān)系、第一api輸出參數(shù)與第二api輸出參數(shù)之間的關(guān)系,可以得到修改后的測(cè)試邏輯,即第二api的輸入?yún)?shù)取值和新的返回值,根據(jù)第二api的輸入?yún)?shù)取值和新的返回值將第一語句中的第一api修改為第二api,如此生成的修改后的測(cè)試用例,不僅語法正確,語義也正確,修改后的測(cè)試代碼的語義與原始測(cè)試代碼維持一致。
8、在一種可選的實(shí)施方式中,所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系為:所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)滿足第一函數(shù)關(guān)系;根據(jù)所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第一語句中所述第一api的輸入?yún)?shù)取值,得到所述第二api的輸入?yún)?shù)取值,包括:根據(jù)所述第一語句中所述第一api的輸入?yún)?shù)取值和所述第一函數(shù)關(guān)系,得到所述第二api的輸入?yún)?shù)取值。
9、采用上述方法,通過深入分析代碼中的語義,從而能夠自動(dòng)推斷出受影響的測(cè)試用例中第二api的輸入?yún)?shù)取值,提高代碼修改的正確性。
10、在一種可選的實(shí)施方式中,所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系為:所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)滿足第二函數(shù)關(guān)系;根據(jù)所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系、所述第一語句的返回值,得到新的返回值,包括:根據(jù)所述第一語句的返回值中的第一api的輸出參數(shù)和所述第二函數(shù)關(guān)系,得到新的返回值。
11、采用上述方法,通過深入分析代碼中的語義,從而能夠自動(dòng)推斷出受影響的測(cè)試用例中新的返回值,提高代碼修改的正確性。
12、在一種可選的實(shí)施方式中,根據(jù)所述第二api的輸入?yún)?shù)取值、所述新的返回值,將所述第一語句中的所述第一api修改為所述第二api,包括:將所述第一語句中的返回值修改為所述新的返回值;將第二api的輸入?yún)?shù)取值代入所述第二api的輸入?yún)?shù),得到所述第二api,將所述新的返回值中的所述第二api的輸出參數(shù)修改為所述第二api。
13、在一種可選的實(shí)施方式中,所述至少一個(gè)語句包括第二語句,所述第二語句為斷言語句;根據(jù)所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系,將所述至少一個(gè)語句中的所述第一api修改為所述第二api,包括:獲取所述第二語句中所述第一api的輸入?yún)?shù)取值和所述第二語句的斷言邏輯;根據(jù)所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第二語句中所述第一api的輸入?yún)?shù)取值,得到所述第二api的輸入?yún)?shù)取值;根據(jù)所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系、所述第二語句的斷言邏輯,得到新的斷言邏輯;根據(jù)所述第二api的輸入?yún)?shù)取值、所述新的斷言邏輯,將所述第二語句中的所述第一api修改為所述第二api。
14、采用上述方法,首先對(duì)原始測(cè)試用例中受第一api影響的語句中的第二語句進(jìn)行分析,獲取第二語句的代碼邏輯,由于第二語句是賦值語句,獲取第二語句中第一api的輸入?yún)?shù)取值和第二語句的斷言邏輯,上述信息不僅包含測(cè)試用例中受第一api影響的代碼的位置,還包括了該語句的語義。結(jié)合上述信息和第一api的輸出參數(shù)與第一api的輸出參數(shù)之間的關(guān)系、第一api輸出參數(shù)與第二api輸出參數(shù)之間的關(guān)系,可以得到修改后的測(cè)試邏輯,即第二api的輸入?yún)?shù)取值和新的測(cè)試邏輯,根據(jù)第二api的輸入?yún)?shù)取值和新的測(cè)試邏輯將第二語句中的第一api修改為第二api,如此生成的修改后的測(cè)試用例,不僅語法正確,語義也正確,修改后的測(cè)試代碼的語義與原始測(cè)試代碼維持一致。
15、在一種可選的實(shí)施方式中,根據(jù)所述第二api的輸入?yún)?shù)取值、所述新的斷言邏輯,將所述第二語句中的所述第一api修改為所述第二api,包括:將所述第二語句中的斷言邏輯修改為新的斷言邏輯;將第二api的輸入?yún)?shù)取值代入所述第二api的輸入?yún)?shù),得到所述第二api,將所述新的斷言邏輯中的所述第二api的返回值修改為所述第二api。
16、第二方面,本發(fā)明實(shí)施例提供一種測(cè)試用例的更新裝置,該裝置包括:
17、獲取單元,用于獲取將代碼中第一應(yīng)用程序接口api修改為第二api的說明信息;
18、確定單元,用于根據(jù)所述說明信息,確定所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系;在所述代碼的測(cè)試用例中確定受所述第一api變化影響的至少一個(gè)語句;
19、處理單元,用于根據(jù)所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系,將所述至少一個(gè)語句中的所述第一api修改為所述第二api。
20、在一種可選的實(shí)施方式中,所述確定單元具體用于,對(duì)所述說明信息進(jìn)行符號(hào)執(zhí)行,得到所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系。
21、在一種可選的實(shí)施方式中,所述至少一個(gè)語句包括第一語句,所述第一語句為賦值語句;所述處理單元具體用于,獲取所述第一語句中所述第一api的輸入?yún)?shù)取值和所述第一語句的返回值;根據(jù)所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第一語句中所述第一api的輸入?yún)?shù)取值,得到所述第二api的輸入?yún)?shù)取值;根據(jù)所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系、所述第一語句的返回值,得到新的返回值;根據(jù)所述第二api的輸入?yún)?shù)取值、所述新的返回值,將所述第一語句中的所述第一api修改為所述第二api。
22、在一種可選的實(shí)施方式中,所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系為:所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)滿足第一函數(shù)關(guān)系;所述處理單元用于根據(jù)所述第一語句中所述第一api的輸入?yún)?shù)取值和所述第一函數(shù)關(guān)系,得到所述第二api的輸入?yún)?shù)取值。
23、在一種可選的實(shí)施方式中,所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系為:所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)滿足第二函數(shù)關(guān)系;所述處理單元用于,根據(jù)所述第一語句的返回值中的第一api的輸出參數(shù)和所述第二函數(shù)關(guān)系,得到新的返回值。
24、在一種可選的實(shí)施方式中,所述處理單元用于,將所述第一語句中的返回值修改為所述新的返回值;將第二api的輸入?yún)?shù)取值代入所述第二api的輸入?yún)?shù),得到所述第二api,將所述新的返回值中的所述第二api的輸出參數(shù)修改為所述第二api。
25、在一種可選的實(shí)施方式中,所述至少一個(gè)語句包括第二語句,所述第二語句為斷言語句;所述處理單元具體用于,獲取所述第二語句中所述第一api的輸入?yún)?shù)取值和所述第二語句的斷言邏輯;根據(jù)所述第一api的輸入?yún)?shù)與所述第二api的輸入?yún)?shù)之間的關(guān)系、所述第二語句中所述第一api的輸入?yún)?shù)取值,得到所述第二api的輸入?yún)?shù)取值;根據(jù)所述第一api的輸出參數(shù)與所述第二api的輸出參數(shù)之間的關(guān)系、所述第二語句的斷言邏輯,得到新的斷言邏輯;根據(jù)所述第二api的輸入?yún)?shù)取值、所述新的斷言邏輯,將所述第二語句中的所述第一api修改為所述第二api。
26、在一種可選的實(shí)施方式中,所述處理單元用于,將所述第二語句中的斷言邏輯修改為新的斷言邏輯;將第二api的輸入?yún)?shù)取值代入所述第二api的輸入?yún)?shù),得到所述第二api,將所述新的斷言邏輯中的所述第二api的返回值修改為所述第二api。
27、第三方面,本發(fā)明實(shí)施例提供了一種測(cè)試用例的更新裝置,包括:存儲(chǔ)器,用于存放計(jì)算機(jī)程序;處理器,用于執(zhí)行所述存儲(chǔ)器上所存放的計(jì)算機(jī)程序時(shí),按照獲得的程序執(zhí)行上述第一方面所述的方法。
28、第四方面,本發(fā)明實(shí)施例提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)內(nèi)存儲(chǔ)有計(jì)算機(jī)程序,當(dāng)計(jì)算機(jī)讀取并執(zhí)行所述計(jì)算機(jī)程序時(shí),使得上述第一方面所述的方法被執(zhí)行。
29、第五方面,本發(fā)明實(shí)施例提供了一種計(jì)算機(jī)程序產(chǎn)品,當(dāng)計(jì)算機(jī)讀取并執(zhí)行所述計(jì)算機(jī)程序產(chǎn)品時(shí),使得上述第一方面所述的方法被執(zhí)行。