如何實現工具無關化?關于自動化測試腳本的設計
上一篇 / 下一篇 2022-12-09 17:20:42 / 個人分類:自動化測試
1.問題的提出
最近幾年來,我的自動化測試工具之旅大致是這樣的,最早用的是QTP,然后是RFT(IBM的功能測試自動化產品),之后也經歷了Selenium, Watir等,再后還是一些商業工具主要是偏web自動化及移動自動化,如sahi, appnium, Keynote DeviceAnywhere, SeeTest, HP UFT等,這一系列的變化,讓人痛苦的不是學習的過程,也不是各種編程語言的轉換,最痛苦的是我們的自動化測試腳本要因為工具的變化而需要重寫,因為無法重用,我們或是維護多種自動化工具腳本,或是將自動化測試腳本為最近使用的工具進行重寫編寫,有太多的effort花在這些事情上。進入》 軟件測試社群學習交流 加我VX:atstudy-js 回復“測試”,進入 自動化測試學習交流群~~
我們怎么解決這類問題呢?試想,如果我們能夠有這樣一個平臺,如果提供統一的自動化編程API,而且獨立于某種工具,那該 有多好。所以本文的目的要設計 這樣一個平臺,能夠對自動化測試人員提供統一的編程接口,能夠適應測試工具的變化,而無須修改已經基于此平臺編程好的自動化測試腳本。
2. 如何實現工具無關化
首先,我們要考慮工具無關化,如果要實現工具無關化,那么對于使用者(自動化測試腳本實現者)一定是使用一致的api,一致的測試元素,一致的數據訪問方式。那么我們先要考慮一下測試元素的一致性。
這里我們先假設我們未來的待測試應用都是web應用或是mobile應用,而mobile應用我們使用的都是hybrid應用。對于測試元素來講,最重要的是如何能夠識別它,我們在識別元素的時候,都會找到一個唯一id或屬性來標識它。來看我們上邊假設的應用,我們可以使用xpath來做為唯一id來識別元素。你可能根據自已實際場景來設計來定義它。除此之外,為了能夠操作元素,我們需要知道它的名字,因為我們還需要為它命名。除此之外,我們還需要使用一個類型字段來區別不同工具之間可能對測試元素有些特別的要求,我們通常使用type字段來標識它。所以我們從邏輯上來看,一個工具無關的測試元素大致看起來是這樣的。
對于測試數據來講,我認為,每個數據都是有一個列和一個值組成,所有數據看起來比較簡單。
數據有一點需要注意一下,如果我們要實現數據驅動的自動化測試,我們就需要在此平臺提供處理多行數據能力。
有了測試對象和測試數據之后,我們需要了解我們的待測試應用,我們的平臺需要對待測試應用使用之前進行一些配置,使用時還要進行一些初始化等工作,使用完我們還會對些進行一些清理銷毀等工作。。如此一來,我們的平臺需要考慮如何進行測試設置工作,因為未來我們平臺面對可能各種不同的測試工具,那么在這里我們也需要在些考慮好一致的接口。所以此部分看來如下所示:
對于測試元素的操作,我們通常會使用類似 click, setValue 等一些點擊,填值的操作,我們同時還會檢查一些測試元素是否在頁面中存在,也會檢測一個測試元素是否展示在屏幕上。我們可以將些部分統一歸結為 action. 所以對象的 action 看起來如下所示:
除了 action 之外,我們的平臺還要提供 checkpoint 功能,此功能是為了能夠讓我們腳本有能力判斷最近測試結果是通過還是失敗。即有一個 checkpoint 失敗了,整個測試腳本就是失敗狀態。Checkpoint 的功能使用起來極其簡單,我們需要為其輸入兩個參數,一個為 expect,一個為 actual,二者進行比較并返回比較結果。這里需要強調的一點是,我們設計 checkpoint 時,要使其能夠為其二個參數可以自適應到各種數據類型,因為我們實際應用時,有時會使用兩個布爾值進行判斷,有時可能會使用兩個字符串進行判斷,也可能我們可能直接將兩個對象傳過來進行比較。所以這里我們要讓其能夠自適應。
講到這里,我們的平臺還需要至少要有的一個功能是 report, 我們的 report 要能夠展示測試腳本最終是通過了還是失敗了。同時能夠記錄每個步驟的狀態,能夠截屏。當然,如果 report 能夠提供更多的 metric 數據就更好了。方便未來計算 ROI.
講到這里我們都是講的都是對外提供的統一的 API,從使用都角度,這些已經基本夠用了。但是對于工具來講,我們要實現工具無關化,我們要講起來可能會簡單一些,但是實際做的時候還是比較麻煩的。因為我們需要針對我們平臺支持的每一套測試工具編寫接口,使其在外邊看起來是一樣的。所以平臺這邊說起來是簡單的,但實現工作量還是比較大的,因為每套工具都有其復雜性,再次封裝后并提供統一的簡單易用接口并非總是那么容易。所以編寫接口的人,必須 是對其封裝的工具是極其熟悉的,并且有豐富的實際應用經驗,因為這種你們才能為使用者寫出他們真正所需的接口。
3. 總結
在上面我大致講解了要實現一個工具無關的自動化測試平臺所應該具有最少元素集合。在實際應用中,我們所做的工作遠遠大于這個集合。但是有了這個平臺之后,我們自動化腳本的重用率有了很大的提升。對于團隊中的自動化實現者來說,它們不需要再痛苦了學習和掌握每一種新的工具,或是因為工具的變化而重寫自動化測試腳本了。
添加微信:atstudy-js 或者掃描下方二維碼,備注“博客”邀請你進入Python自動化測試學習交流群~
TAG: