最近老板提出桌面應(yīng)用要上自動化測試狞贱,讓我研究研究。研究了一陣郎仆,這里做一下分享只祠。
我們公司是國產(chǎn)化平臺的軟件企業(yè),主要做國產(chǎn)Linux系統(tǒng)平臺的產(chǎn)品扰肌。本公司產(chǎn)品主要是Qt做的抛寝,跨平臺地圖應(yīng)用,也包括國產(chǎn)平臺曙旭,如銀河麒麟盗舰,搜了一下國內(nèi)外軟件。國外有一家Squish能做桂躏,國內(nèi)有CukeTest能做钻趋。但因?yàn)槭菄a(chǎn)化平臺,所以找了國內(nèi)的這家剂习。申請CukeTest試用版蛮位,看官方的說明是支持全平臺的自動化工具。今天分享一下試用心得鳞绕。
背景介紹
公司環(huán)境主要是銀河麒麟失仁、中標(biāo)麒麟和Ubuntu。我試用電腦上裝了Ubuntu 18.04们何,環(huán)境里面除了從apt安裝的默認(rèn)qt4.8跟5.9萄焦,另外手動安裝了最新版的qt 5.15用于開發(fā)桌面應(yīng)用。
安裝
申請了Linux完整版試用冤竹,拿到了CukeTest 1.5.14.deb
安裝包拂封,直接使用dpkg -i
命令安裝上去茬射,打開了界面如下:
示例學(xué)習(xí)
初見
在歡迎界面右下角提供了幾個(gè)示例,但是一個(gè)個(gè)點(diǎn)開看過去都是Web跟API的示例烘苹,而我要的是Qt也就是桌面自動化的示例躲株,似乎這里還沒有提供。好在官網(wǎng)里面提供了不少Linux平臺Qt測試的文檔跟視頻镣衡,照著視頻教程里面提供的示例代碼霜定,從github拷了一份到電腦準(zhǔn)備跑一跑學(xué)習(xí)一下。
選擇了提供的Qt table的示例廊鸥,看描述是針對表格應(yīng)用的望浩,恰好公司應(yīng)用里面也涉及到很多表格的正確性測試。示例項(xiàng)目內(nèi)容如下:
項(xiàng)目的結(jié)構(gòu)如下:
因?yàn)闆]看到項(xiàng)目文件之類的可以直接關(guān)聯(lián)打開項(xiàng)目的文件惰说,只有一個(gè)package.json
文件磨德,檢查了一下里面是版權(quán)信息跟模版之類的內(nèi)容。所以直接從CukeTest界面打開table示例所在的文件夾吆视,打開后如下所示:
試著點(diǎn)擊一下工具欄上的運(yùn)行按鈕典挑,CukeTest就最小化進(jìn)入運(yùn)行狀態(tài)了,彈出一個(gè)應(yīng)用啦吧,運(yùn)行時(shí)似乎還有字幕顯示您觉。因?yàn)楹芸炀瓦\(yùn)行完了,總共跑了十幾秒授滓,運(yùn)行結(jié)束以后跳出了一個(gè)圖表琳水,應(yīng)該就是描述剛剛的運(yùn)行情況了。
仔細(xì)看了一下跟項(xiàng)目般堆,至少我大概明白了這個(gè)軟件的測試方式在孝,也就是它根據(jù)這一個(gè)個(gè)場景與步驟的定義來執(zhí)行,如果步驟的執(zhí)行有問題淮摔,就會呈現(xiàn)在這個(gè)報(bào)表上私沮,好讓測試人員查看。
模型管理器
接著看教程視頻和橙,了解到這個(gè)軟件還有一個(gè)管理控件識別的模塊仔燕,叫作模型管理器,用于把要操作的控件加進(jìn)去以便進(jìn)行自動化胃碾,而保存這些控件信息的文件就叫作模型文件,位于項(xiàng)目中的features/step_definitions/*.tmodel
文件中筋搏。雙擊該文件打開了模型管理器仆百,如下:
第一次啟動的用模型管理器偵測控件時(shí),我從CukeTest的安裝目錄下找到了被測的表格應(yīng)用奔脐,就是Qt自帶的樣例Dock Widget俄周。手動把它打開了吁讨,但是卻出現(xiàn)了控件識別不到的問題: 識別應(yīng)用中的控件沒有識別到。高亮模型管理器中已有的控件都不生效峦朗,會出現(xiàn)了錯(cuò)誤1003: 無法找到匹配的應(yīng)用
:
接著看視頻建丧,找到了問題的所在,是由于自動化的機(jī)制決定了要通過特殊的方式啟動被測應(yīng)用波势,這里我們通過模型管理器啟動一下這個(gè)表格應(yīng)用翎朱,之后才能識別到。因?yàn)樗鼤诒粶y應(yīng)用中加載一個(gè)名為Qt Agent
的服務(wù)尺铣。之后才看到這篇文檔中有講解:啟動應(yīng)用拴曲。
完美解決了問題!識別跟高亮功能都能正常的運(yùn)作凛忿,如下所示:
并且在模型管理器左下角也出現(xiàn)了被測應(yīng)用的信息:
接著在識別到的控件中控件操作
標(biāo)簽頁澈灼,看到了提供的一些自動化操作,而且工具看起來是針對不同的控件都有不一樣的操作方法店溢,文檔中也提供了這些操作方法的參考手冊對象操作API叁熔。下面是用工具提供的set
方法修改單元格數(shù)據(jù)的結(jié)果:
好了,現(xiàn)在我覺得我已經(jīng)部分掌握了自動化桌面軟件的基礎(chǔ)了床牧,讓我開始來試試完整的自動化流程荣回。
編寫自動化
補(bǔ)課
打開主要的代碼文件definition1.js
,剛了解了一下CucumberJS框架叠赦,所以這個(gè)代碼也比較容易看懂驹马,大致就是每個(gè)場景的步驟對應(yīng)一個(gè)函數(shù)。里面有好多async/await的關(guān)鍵字除秀,之前了解Node.js的語法時(shí)好像沒看到這部分糯累。為了看懂這些代碼,我又把Node.js中的異步調(diào)用一章看了一下册踩,主要是Promise和async/await的用法泳姐,node果然很先進(jìn)啊,async/await可以完成異步調(diào)用暂吉,相當(dāng)于是通過這種方式實(shí)現(xiàn)多線程的效果胖秒,這下漲經(jīng)驗(yàn)了。
再次回去復(fù)習(xí)了視頻教程慕的,發(fā)現(xiàn)里面提到了阎肝,表格控件因?yàn)槭菑?fù)雜控件,CukeTest提供了額外的自動化方法來應(yīng)對不同的自動化場景肮街,這里實(shí)際上只要再掌握一個(gè)getItem
操作方法就可以應(yīng)對了风题。
getItem
操作方法能夠根據(jù)傳入的行列信息獲取目標(biāo)位置的單元格對象(類似Excel中定位單元格的方式),獲取到這個(gè)對象以后再去執(zhí)行它的操作方法即可。更多內(nèi)容可以查看表格的參考手冊沛硅。
自己動手豐衣足食
看完視頻眼刃,腦子說:噢我會了,手說:你會了個(gè)啥摇肌?這大概是自己模仿視頻教程寫一個(gè)自動化項(xiàng)目的真實(shí)感受了擂红。創(chuàng)建項(xiàng)目的第一步就栽了個(gè)跟頭,做到后面發(fā)現(xiàn)我這項(xiàng)目怎么沒有.tmodel
文件呢围小?回頭看了下視頻發(fā)現(xiàn)沒改模版昵骤,選擇了Basic模版,又趕忙重新建了一個(gè)吩抓,選擇Qt模版涉茧。
這回創(chuàng)建的味兒對了:
接著是我自己寫的一個(gè)簡單的自動化流程,或者說自動化劇本疹娶,總體上是跟示例項(xiàng)目的結(jié)構(gòu)一致的伴栓,自己只新建了一個(gè)hooks.js
文件。
開始運(yùn)行
在運(yùn)行的過程中雨饺,因?yàn)楸砀癖容^長钳垮,其中一個(gè)步驟要執(zhí)行很久(因?yàn)槲以诓襟E里面遍歷了整個(gè)表),以至于誤觸了超時(shí)時(shí)間额港。在hooks.js
文件中設(shè)置了超時(shí)時(shí)間為30秒饺窿,所以當(dāng)運(yùn)行某個(gè)步驟時(shí)超過了這個(gè)時(shí)間,就會觸發(fā)timeout
的錯(cuò)誤然后退出移斩。按照文檔超時(shí)里的方法肚医,把hooks.js
文件中設(shè)置的超時(shí)時(shí)間調(diào)為-1來禁用掉超時(shí)(雖然官方不建議這么做)來完整的執(zhí)行完自動化。
自動化的結(jié)果如下:
![被測應(yīng)用的運(yùn)行結(jié)果]https://upload-images.jianshu.io/upload_images/4377716-3830ff1c8074f66e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
運(yùn)行結(jié)束后獲得了一個(gè)運(yùn)行報(bào)告:
總結(jié)
這次的試用體驗(yàn)總體來說還不錯(cuò)向瓷,尤其是現(xiàn)在Linux平臺的自動化測試工具還沒有流行的軟件肠套,CukeTest算是Linux平臺做桌面自動化測試的一種選擇。而且去了解了一下這個(gè)工具的背景猖任,它其實(shí)一直都是支持全平臺的你稚,但是桌面自動化這一塊原先是在Windows平臺耕耘了很久,在不久前才正式宣布支持Linux平臺的Qt桌面自動化朱躺,但是從體驗(yàn)上來說已經(jīng)具有相當(dāng)?shù)某墒斓臋C(jī)制跟體系了刁赖。在我用的國產(chǎn)軟件中算是不錯(cuò)的水平,可以贊一下长搀。后面如果再有些試用心得再跟大家分享宇弛。