一種ui自動(dòng)化測試方法和系統(tǒng)的制作方法
【專利說明】
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)測試技術(shù)領(lǐng)域,特別涉及一種Π (用戶界面)自動(dòng)化測試方法和系統(tǒng)。
【【背景技術(shù)】】
[0002]目前越來越多的公司或企業(yè)在平時(shí)的質(zhì)量保證工作中引入Π自動(dòng)化來代替人工測試,以提高效率降低人力成本,但是Π自動(dòng)化測試框架不管是通過人工寫代碼還是通過錄制腳本的方式,都是基于頁面上控件的定位,而控件定位的過程是相當(dāng)耗時(shí)的,目前采用的定位方式都是基于控件屬性的,這就會(huì)造成有些控件屬性是隨機(jī)變化或者不存在的,那么定位就更加耗時(shí),并且給UI自動(dòng)化測試框架帶來不穩(wěn)定性。
[0003]另外,現(xiàn)有的UI自動(dòng)化測試框架基于ruby (—種面向?qū)ο蟪绦蛟O(shè)計(jì)的腳本語言),測試代碼與測試用例寫在同一個(gè)文件中,需要額外的代碼對測試用例進(jìn)行解析,編輯起來也很麻煩。
【
【發(fā)明內(nèi)容】
】
[0004]有鑒于此,本發(fā)明提供了一種UI自動(dòng)化測試方法和系統(tǒng),以便于提高測試效率,同時(shí)實(shí)現(xiàn)實(shí)例的更有效組織。
[0005]具體技術(shù)方案如下:
[0006]本發(fā)明提供了一種用戶界面Π自動(dòng)化測試方法,該方法包括:
[0007]測試用例與測試代碼分別存儲(chǔ)于不同的文件,并由測試用例驅(qū)動(dòng)測試代碼的運(yùn)行;
[0008]所述測試代碼在運(yùn)行過程中調(diào)用圖片定位工具提供的應(yīng)用程序編程接口 API來進(jìn)行控件定位。
[0009]根據(jù)本發(fā)明一優(yōu)選實(shí)施方式,在Π自動(dòng)化測試框架中集成testNG插件或者在testNG基礎(chǔ)上的二次封裝工具插件以實(shí)現(xiàn)所述測試用例與測試代碼分別存儲(chǔ)于不同的文件,并由測試用例驅(qū)動(dòng)測試代碼的運(yùn)行;
[0010]所述在testNG基礎(chǔ)上的二次封裝工具包括JSpec、jtester或者Qtester。
[0011]根據(jù)本發(fā)明一優(yōu)選實(shí)施方式,所述由測試用例驅(qū)動(dòng)測試代碼的運(yùn)行包括:
[0012]各測試用例驅(qū)動(dòng)編輯器中各測試用例對應(yīng)的測試代碼進(jìn)行調(diào)試運(yùn)行。
[0013]根據(jù)本發(fā)明一優(yōu)選實(shí)施方式,該方法還包括:
[0014]將調(diào)試通過的測試代碼提交到持續(xù)集成服務(wù)器,由持續(xù)集成服務(wù)器將測試代碼發(fā)送到能夠運(yùn)行該測試代碼的自動(dòng)化執(zhí)行機(jī)器上運(yùn)行。
[0015]根據(jù)本發(fā)明一優(yōu)選實(shí)施方式,所述測試代碼在運(yùn)行過程中調(diào)用圖片定位工具提供的API來進(jìn)行控件定位包括:
[0016]所述測試代碼在運(yùn)行過程中,如果進(jìn)行某控件的定位,則從預(yù)設(shè)目錄下獲取該控件的截圖并調(diào)用圖片定位工具提供的API,獲取圖片定位工具利用該控件的截圖在被測對象上進(jìn)行匹配后得到的控件定位結(jié)果。
[0017]本發(fā)明還提供了一種Π自動(dòng)化測試系統(tǒng),該系統(tǒng)包括:
[0018]用例組織單元,用于將測試用例與測試代碼分別存儲(chǔ)于不同的文件;
[0019]代碼運(yùn)行單元,用于在所述測試用例的驅(qū)動(dòng)下運(yùn)行測試代碼,所述測試代碼在運(yùn)行過程中調(diào)用圖片定位工具提供的API來進(jìn)行控件定位。
[0020]根據(jù)本發(fā)明一優(yōu)選實(shí)施方式,所述用例組織單元采用在UI自動(dòng)化測試框架中集成testNG插件或者在testNG基礎(chǔ)上的二次封裝工具插件以實(shí)現(xiàn)所述測試用例與測試代碼分別存儲(chǔ)于不同的文件;所述在testNG基礎(chǔ)上的二次封裝工具包括JSpec、jtester或者Qtester。
[0021]根據(jù)本發(fā)明一優(yōu)選實(shí)施方式,所述代碼運(yùn)行單元具體包括:代碼調(diào)試子單元,用于在各測試用例的驅(qū)動(dòng)下,在編輯器中對各測試用例對應(yīng)的測試代碼進(jìn)行調(diào)試運(yùn)行。
[0022]根據(jù)本發(fā)明一優(yōu)選實(shí)施方式,所述代碼運(yùn)行單元還包括代碼提交子單元,該系統(tǒng)還包括持續(xù)集成服務(wù)器和自動(dòng)化執(zhí)行機(jī)器;
[0023]所述代碼提交子單元,用于將調(diào)試通過的測試代碼提交到所述持續(xù)集成服務(wù)器;
[0024]所述持續(xù)集成服務(wù)器,用于將測試代碼發(fā)送到能夠運(yùn)行該測試代碼的自動(dòng)化執(zhí)行機(jī)器;
[0025]所述自動(dòng)化執(zhí)行機(jī)器,用于運(yùn)行接收到的測試代碼。
[0026]根據(jù)本發(fā)明一優(yōu)選實(shí)施方式,所述測試代碼在運(yùn)行過程中,如果進(jìn)行某控件的定位,則從預(yù)設(shè)目錄下獲取該控件的截圖并調(diào)用圖片定位工具提供的API,獲取圖片定位工具利用該控件的截圖在被測對象上進(jìn)行匹配后得到的控件定位結(jié)果。
[0027]由以上技術(shù)方案可以看出,在本發(fā)明中控件定位不再依賴控件屬性,而是采用圖片匹配定位的方式,從而提高了測試效率,同時(shí)測試用例與測試代碼分離,無需采用額外的代碼進(jìn)行測試用例的解析,進(jìn)一步提高了測試效率,并且后期對測試用例的刪減、修改或統(tǒng)計(jì)只需要在測試用例的文件中進(jìn)行,不必重新編寫測試代碼,方便進(jìn)行管理和維護(hù)。
【【附圖說明】】
[0028]圖1為本發(fā)明實(shí)施例一提供的UI自動(dòng)化測試方法流程圖;
[0029]圖2為本發(fā)明實(shí)施例一對應(yīng)的系統(tǒng)架構(gòu)示意圖;
[0030]圖3為本發(fā)明實(shí)施例一提供的自動(dòng)化測試的基本代碼結(jié)構(gòu);
[0031]圖4為本發(fā)明實(shí)施例二提供的UI自動(dòng)化測試系統(tǒng)的結(jié)構(gòu)圖。
【【具體實(shí)施方式】】
[0032]為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)描述。
[0033]本發(fā)明的核心思想在于:在組織測試用例時(shí),采用測試用例與測試代碼分離的方式,將測試用例與測試代碼分別存儲(chǔ)于不同的文件,在測試代碼中調(diào)用采用圖片匹配定位工具的API (應(yīng)用程序編程接口)來進(jìn)行控件定位。下面通過實(shí)施例一對本發(fā)明提供的Π自動(dòng)化測試方法進(jìn)行詳細(xì)描述。
[0034]實(shí)施例一、
[0035]圖1為本發(fā)明實(shí)施例一提供的Π自動(dòng)化測試方法流程圖,該流程圖對應(yīng)的系統(tǒng)架構(gòu)如圖2中所示。如圖1中所示,該方法具體包括:
[0036]步驟101:通過在JSpec中編寫的測試用例驅(qū)動(dòng)編輯器中測試代碼的運(yùn)行。
[0037]在本發(fā)明中要實(shí)現(xiàn)測試用例與測試代碼分別存儲(chǔ)于不同的文件,并由測試用例驅(qū)動(dòng)測試代碼的運(yùn)行,需要將testNG或者在testNG基礎(chǔ)上的二次封裝工具引入Π自動(dòng)化測試,即在Π自動(dòng)化測試框架中集成testNG插件或者在testNG基礎(chǔ)上的二次封裝工具插件。testNG (Testing Next Gernerat1n,下一代測試技術(shù))是一種開源工具,根據(jù)JUnit和Nunit思想而構(gòu)建的利用注釋來強(qiáng)化測試功能的測試框架。上述在testNG基礎(chǔ)上的二次封裝工具可以包括但不限于JSpec、jtester或者Qtester。
[0038]在本發(fā)明實(shí)施例中在Π自動(dòng)化測試框架中集成JSpec插件,采用JSpec所提供的story的方式來組織測試用例。在以往的技術(shù)中,JSpec通常用于單元測試,在本發(fā)明實(shí)施例中將單元測試的框架引入Π自動(dòng)化測試框架,在此Π自動(dòng)化測試框架可以采用Eclipse(Eclipse是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺(tái),用于通過插件組件構(gòu)建開發(fā)環(huán)境)。
[0039]舉一個(gè)例子來說明利用JSpec提供的Story方式來組織測試用例的方式,假設(shè)需要在百度搜索框中分別輸入“mp3”、“mp4”、“mp5”關(guān)鍵字進(jìn)行查詢測試,那么利用JSpec組織測試用例的格式如下:
[0040]O Story
[0041]功能描述:測試百度搜索
[0042]作者:***
[0043]修改時(shí)間:2013-12-13
[0044]測試用例集合:
[0045][CaseOl] input:mp3
[0046][Case02] input: mp4
[0047][Case03] input: mp5
[0048]O Scenar1 easel:1nput:mp3
[0049]〇 Given init test data
[0050]〇When testJSpec
[0051][ input= “mp3”】
[0052]〇 Then check result
[0053]〇 Then delete test data
[0054]O Scenar1 case2:1nput:mp4
[0055]〇 Given init test data
[0056]〇When testJSpec
[0057][input= “mp4”】
[0058]〇 Then check result
[0059]〇 Then delete test data
[0060]O Scenar1 case3:1nput:mp5
[0061]O Given init test data
[0062]O When testJSpec
[0063]【input=“mp5”】
[0064]〇Then check result
[0065]〇Then delete test data
[0066]上述格式中,Story到Scenar1中間的部分是測試用例的說明部分,類似注釋,主要說明本次測試用例集合主要測試什么功能,包括哪些測試用例。每一個(gè)Scenar1對應(yīng)一個(gè)測試用例,其中Given部分是測試數(shù)據(jù)準(zhǔn)備部分,如果沒有可以為空;When部分是測試代碼所在部分,方法名,對應(yīng)測試代碼中的測試方法;【】中的部分為傳遞的參數(shù);Then部分是測試后的檢驗(yàn)和校驗(yàn)以及測試數(shù)據(jù)清理,如果沒有可以為空。
[0067]這種組織形式的好處在于,Story中每個(gè)測試用例十分清晰,無需額外的代碼進(jìn)行解析;如果后期需要添加測試用例,只需要在Story中添加一個(gè)Scenar1即可,或者,如果需要?jiǎng)h減、修改或統(tǒng)計(jì)測試用例,也只需要在Story文件中進(jìn)行編輯,給Π自動(dòng)化開發(fā)和維護(hù)帶來很大的方便。
[0068]如果采用jtester,則采用wiki文件來組織測試用例,如果采用Qtester,則可以采用wiki文件或excel文件來組織測試用例,在此不再--贅述。
[0069]步驟102:編輯器中測試代碼的調(diào)試運(yùn)行過程中調(diào)用sikuli提供的API進(jìn)行控件定位。
[0070]在UI自動(dòng)化測試的開發(fā)過程中,自動(dòng)化執(zhí)行測試之前會(huì)在編輯器中對編寫的測試代碼進(jìn)行調(diào)試,調(diào)試過程中的測試代碼運(yùn)行按照測試用例的驅(qū)動(dòng)。在本發(fā)明實(shí)施例中,測試代碼的業(yè)務(wù)邏輯層調(diào)用底層的API進(jìn)行控件定位,該API是采用圖片匹配定位方式的工具提供的,本發(fā)明實(shí)施例中以sikuli為例,還可以采用諸如webdriver等其他工具。
[0071]sikuli是一種圖形腳本語言,可以利用控件截圖在頁面上進(jìn)行匹配的方式進(jìn)行控件定位。本發(fā)明實(shí)施例中在Eclipse中引入sikuli提供的控件截圖包,在測試代碼的業(yè)務(wù)邏輯層中調(diào)用sikuli提供的API實(shí)現(xiàn)控件定位。
[0072]本Π自動(dòng)化測試的基本代碼結(jié)構(gòu)可以如圖3中的目錄結(jié)構(gòu)所示,其中,testJSpec.java是測試代碼,可以根據(jù)自己的需要調(diào)整目錄結(jié)構(gòu)。testJSpec.story是測試用例組織管理文件,一般是和相對應(yīng)的測試代碼放在一起,從而方便實(shí)現(xiàn)測試代碼的驅(qū)動(dòng),可見測試用例和測試代碼是分別放在.story文件和.java文件中的。img目錄中存放的是控件定位時(shí)用到的