自動(dòng)化測(cè)試一直是一個(gè)比較熱門的話題,我不是談怎樣去做自動(dòng)化的框架或具體的自動(dòng)化技術(shù)的細(xì)節(jié),其實(shí)自己在這方面也只是個(gè)外行,主要談一下自動(dòng)化測(cè)試在國際化測(cè)試中應(yīng)用的一些注意點(diǎn)。我所謂的自動(dòng)化指的是基于GUI回放機(jī)制的功能自動(dòng)化。

  以我個(gè)人在自動(dòng)化方面的經(jīng)驗(yàn),指望自動(dòng)化工具去幫你發(fā)現(xiàn)測(cè)試遺漏的問題基本不可能,自動(dòng)化需要測(cè)試的測(cè)試點(diǎn)基本上是從手工測(cè)試的用例中挑選的,在自動(dòng)化測(cè)試中的檢查點(diǎn)在手工測(cè)試用例中肯定都有,如果你的目的是靠自動(dòng)化去發(fā)現(xiàn)問題,建議放棄這個(gè)打算。目前自動(dòng)化測(cè)試應(yīng)用基本上都是在做回歸測(cè)試或者BAT(Build Acceptance Test)測(cè)試。

  當(dāng)維護(hù)一個(gè)已經(jīng)比較成熟的產(chǎn)品時(shí),如果經(jīng)常需要對(duì)當(dāng)前產(chǎn)品做一些小改動(dòng),測(cè)試人員往往關(guān)注的是改動(dòng)的功能點(diǎn)測(cè)試,但是沒有改動(dòng)的部分不會(huì)有問題嗎?沒有經(jīng)過測(cè)試誰也不敢保證。如果每次改動(dòng)都是很小的一部分,而其他功能的核心部分都需要重新測(cè)試一遍,測(cè)試人員的壓力會(huì)相當(dāng)大,而且這樣重復(fù)的工作也會(huì)導(dǎo)致測(cè)試人員工作的積極性下降,如果對(duì)于產(chǎn)品的核心功能中絕大多數(shù)可以自動(dòng)化的測(cè)試點(diǎn)進(jìn)行自動(dòng)化,測(cè)試人員在做測(cè)試時(shí)只重點(diǎn)關(guān)注改動(dòng)的部分和各個(gè)功能之間有關(guān)聯(lián)的部分,這樣測(cè)試人員的精力將更集中,也可以花更多的時(shí)間去考慮改動(dòng)對(duì)關(guān)聯(lián)功能的影響,整個(gè)測(cè)試效率會(huì)大大提高,而且可以保證產(chǎn)品的核心功能沒有問題。

  另一種使用自動(dòng)化的場(chǎng)景是BAT測(cè)試,我們?cè)跍y(cè)試過程中經(jīng)常會(huì)選擇一些非常重要的測(cè)試用例作為BAT的case,如果這些case全部pass,我們才會(huì)進(jìn)行下面的測(cè)試,如果這些Case中有一個(gè)或多個(gè)fail了,我們會(huì)要求開發(fā)人員重新出build,這些case的選擇其實(shí)和維護(hù)產(chǎn)品過程中回歸測(cè)試的核心功能測(cè)試case選擇差不多。這樣出現(xiàn)了一個(gè)問題,我們測(cè)試人員拿到的build可能過不了BAT測(cè)試,而且有時(shí)候是連著幾個(gè)build過不了BAT測(cè)試,這樣會(huì)使測(cè)試人員產(chǎn)生抱怨,也影響大家工作的積極性,如果有可能的話,將這些BAT里面的Case做成自動(dòng)化的Case,這樣新build來的時(shí)候,自動(dòng)化工具可以幫你判斷這個(gè)build是否有問題。如果沒有問題,測(cè)試人員才進(jìn)行正式的測(cè)試。

  其實(shí)國際化的測(cè)試如果想去做自動(dòng)化測(cè)試,也和上面兩種情況類似,而且通常國際化需要自動(dòng)化的case都是基于英文對(duì)應(yīng)的自動(dòng)化case進(jìn)行修改或復(fù)用。我們現(xiàn)在是假設(shè)已經(jīng)有了一套可以在英文上正常運(yùn)行的腳本,怎么讓他們能在本地化的操作系統(tǒng)上運(yùn)行,以自動(dòng)化測(cè)試工具QTP為例,首先,原來的自動(dòng)化腳本是在英文操作系統(tǒng)上面運(yùn)行的,你需要讓腳本能在本地化的操作系統(tǒng)上面運(yùn)行,其次,如果要支持本地化字符的輸入輸出,你要將每一個(gè)和輸入有關(guān)的地方都寫在腳本里,比如輸入框,下拉框的選擇等,因?yàn)橐话阕鯞AT腳本時(shí),輸入框如果有默認(rèn)值,一般會(huì)使用默認(rèn)值,下拉框也是用默認(rèn)值。如果你要測(cè)試輸入本地化字符,用默認(rèn)值肯定是不行的。

  我們以第一個(gè)點(diǎn)為例,要保證腳本能在各種本地化操作系統(tǒng)上運(yùn)行,這個(gè)其實(shí)和手工測(cè)試差不多,你要考慮哪些因素可能會(huì)影響腳本在本地化操作系統(tǒng)上運(yùn)行,比如一般情況下軟件默認(rèn)會(huì)安裝到C:Program Files,但是德語等語言不是這個(gè)目錄,那么你的腳本需要修改,當(dāng)安裝軟件時(shí)腳本要考慮不同的操作系統(tǒng)使用不同的默認(rèn)安裝路徑。還有,對(duì)于messagebox等,在英文下顯示為yes,no, 在中文會(huì)顯示為是(Y),否(N),還有一些其他類似的標(biāo)準(zhǔn)控件,他們都是實(shí)現(xiàn)了MUI的,在不同的操作系統(tǒng)下他們的text屬性不一樣。如果你的對(duì)像識(shí)別屬性中包含了text屬性,腳本在本地化操作系統(tǒng)上運(yùn)行識(shí)別不了針對(duì)這些標(biāo)準(zhǔn)控件的操作,因?yàn)檎也坏綄?duì)象,在QTP中,針對(duì)每一個(gè)需要測(cè)試的本地化的操作系統(tǒng)都必須有自己的object repository,你可以在英文的object repository基礎(chǔ)上,使用update from application功能,直接去更新對(duì)象的屬性可以了。以上兩個(gè)點(diǎn)是我在用QTP做國際化的自動(dòng)化測(cè)試中感覺需要注意的地方。并不是所有的國際化測(cè)試點(diǎn)都適合用自動(dòng)化來做的,比如UI上面的check,如果你去寫腳本去check,腳本的check點(diǎn)會(huì)很多,維護(hù)也不好維護(hù),成本太高,一般可以采用讓QTP運(yùn)行時(shí)將跑過的所有界面都抓圖下來,然后人工檢查的方式,你只要在options-->run里面設(shè)置Save still image captures to results 為always可以了。這樣通過運(yùn)行時(shí)自動(dòng)抓的圖可以發(fā)現(xiàn)一些UI方面的問題。

  其實(shí)在實(shí)際過程中也遇到過一些其他問題,有些可能是QTP自己對(duì)國際化支持的問題,比如一個(gè)輸入框,腳本中有給其輸入值的語句,在英文操作系統(tǒng)下跑沒有問題,但是在日文操作系統(tǒng)下運(yùn)行有問題,通過回放腳本,你可以發(fā)現(xiàn)運(yùn)行時(shí)有輸入的動(dòng)作,但是沒有回車事件,這種情況需要針對(duì)問題出現(xiàn)的問題進(jìn)行特殊處理,這些實(shí)際上又都回到了自動(dòng)化腳本的寫法問題上,不詳細(xì)寫了。至于其他的自動(dòng)化測(cè)試工具如何來做國際化的測(cè)試,可能和用QTP有些細(xì)節(jié)的不同。但是我想核心的東西應(yīng)該是一樣的。

注:本文出自lj1981727的51Testing軟件測(cè)試博客:http://www.51testing.com/?27176