人力投入少10倍、一年節省五千個工時:蘇寧Web應用與Client應用系統的自動交互實踐

衆所周知,日益複雜的系統和日漸嚴格的用戶體驗,使得軟件測試人員的任務愈發繁重,人工測試投入隨之增加,也由於測試技能水平差異,導致軟件質量輸出不穩,故而,在實際工作中,我們經常會考慮如何把人爲驅動的測試行爲轉化爲機器自動執行,做到一定程度上的節流提效,保障測試覆蓋度和質量。

蘇寧一直致力於自動化測試能力建設,蘇寧自動化測試工具(Suning Automation Tester),簡稱“SAT”,基於JAVA語言實現,採用自動化測試架構中的關鍵字驅動(Keyword)思想,使測試設計和測試實現分離,將實現不同公共組件類、業務類Keyword集成到一個用例中運行,也最大限度地實現Keyword共享,降低測試組重複開發的工作量;從13年開始逐步實現集WEB頁面、HTTP協議、手機終端應用、數據庫操作、LINUX操作等方面的測試能力支持,產品已相當成熟。

本文涉及到的技術實現不再依賴SAT工具,而是基於Python語言實現的Web應用與Client應用的交互,主要結合數據驅動、結構化、關鍵字驅動等腳本技術思想,進而設計的完整交互方案。

該方案根據我們實際產品框架的情況定製設計了自動化測試框架,主要實現了業務數據交互,執行指令交互,任務執行交互,終端調用管理,腳本版本管理等,在腳本複用、迭代及代碼健壯性上都有極大提升;除實際業務數據外,其他均實現配置化,更容易維護,也可根據業務變化自由配置規則。以下就具體闡述我們的實現過程。

一、我們的目標及現狀分析

1.1我們的現狀和目標

在介紹我們的目標之前,先通過圖1瞭解簡化版產品應用框架(實際產品框架遠比此圖呈現的複雜)、人工測試及自動化測試平臺之間的關係,特別說明SYSTEM-A和B均是無UI界面的底層應用系統。

因爲產品應用架構中存在一些系統是屬於B端底層應用服務器的應用和C端的SAP系統,根本無可視化UI界面提供,測試人員只能被動接收這種無UI界面的底層應用和C端的測試,測試的入口是某個數據接收的接口,但測試結果檢查過程複雜且繁瑣,人工測試要花費大量的時間在底層應用上測試。

所以,我們的目標是要實現B端Web應用系統與C端客戶端應用兩套系統之間的交互,以解決底層應用檢查繁瑣以及與C端交互數據的處理等問題,實時監控測試數據處理過程和結果,具體來說,Web應用與SAP系統之間自動化調用和檢查。

1.2 我們在用的系統

自動化測試平臺系統(testingland),是測試開發團隊完全自研的Python語言編碼實現的B/S架構系統,爲重要產品線提供定製的自動化測試框架及服務,爲B端和C端系統間自動調用交互搭建了橋樑,也作爲測試入口進行自動化測試實施。

SAP,衆所周知,既是全球企業管理軟件與解決方案的技術領袖的公司名稱,又是其產品—企業管理解決方案的軟件名稱;而我們團隊所對接的是SAP R/3系統,涉及財務FI、CO模塊的賬務處理。

1.3我們的調研結果、驗證和分析

現將C端SAP系統部署在OS爲Windows系統上,如何實現B端Web應用調用C端客戶端的自動化操作呢?

調研結果

基於1.1提出的目標,經過調研,當前業內有兩種常用的方案:

  • 方案一:通過IE的ActiveX直接調用本地客戶端,無需配置註冊表,但只僅限支持IE;
  • 方案二:通過Url Protocal協議調用本地客戶端,支持大多數常用瀏覽器(Chrome,IE,FireFox等),但需要配置一系列的註冊表信息;

驗證
經驗證,這兩種方案進行直接調用客戶端軟件,都只是簡單的打開本地軟件而已,是不能讓軟件自動執行後續操作的,例如:讓SAP自動記個賬,並把結果返回給Web端。除非SAP“成精”,否則單單是打開SAP,它是不知道你要幹什麼並自動操作自己的。

分析

從以上兩種方案來看存在的一些問題,首先,缺乏可持續性的執行,其次,不靈活,只支持本地,不支持遠程Agent終端,也就是說,要打開客戶端,必須先在同一臺機器上打開某個瀏覽器。

針對以上分析結果,我們需要設計新的方案去解決以下問題:如何在Web端自動化操作Windows客戶端,而不是單一啓動?如何自動操作本地或遠程Agent終端?

二、我們的解決方案

針對上述問題,設計了一個自動化應用框架(見下圖),作爲Web應用與SAP系統定製的自動化實現解決方案。

該方案不僅解決了自動啓動SAP系統、後續的關聯繫統操作和檢查,而且實現了用戶自主配置Agent信息以及自主選擇本地或遠程操作Agent終端,還增加實現了持續迭代、管理、應用以及執行自動化腳本,同時也做到了對結果實現閉環檢查和展示。

2.1 該方案具體實現過程:

  1. 用戶從Web端選擇執行終端,發起入參或數據處理請求作爲開始;
  2. Web應用服務器接到請求後,判斷終端類型:公共遠程的Agent還是本地個人PC終端,並檢查是否空閒,連接並鎖定空閒終端;
  3. 按步驟2鎖定終端後,從服務數據庫的指令庫裏獲取執行指令,通過Socket協議進行指令傳輸;
  4. 根據指令檢查基礎環境和待執行腳本/程序版本檢測是否是最新,若不是,執行自動更新指令獲取最新版本,更新後進入下一步驟;
  5. 在步驟4就緒後,執行傳入待執行數據指令傳輸給C端並開始調用SAP自動化腳本;
  6. 將執行結果通過Socket服務傳輸給Web服務器和前端展示。

2.2 具體問題的解決方案

首先,解決SAP客戶端啓動和後續操作的問題。

在Python中,我們可以通過selenium操作瀏覽器,可以通過win32,SAP-API操作SAP(值得一提的是,SAP對自動化操作支持非常友好,比如session.findById的使用),也能通過pywinauto操作常規的客戶端。

在本方案裏,通過Python腳本代碼實現對客戶端的具體操作:使用Python os模塊執行cmd命令和win32模塊的方式打開並連接SAP,當獲取到SAP窗口的session並進行連接後,使用SAP提供的API進行組件的定位、操作(對於未提供API的程序,可以使用Python的pywinatuo模塊,通過title、control等方式定位其組件進行操作),這些操作是在OS爲Windows系統上是可運行的,進而形成相應的腳本和執行指令。這些腳本代碼(或已封裝的可執行程序)也會自動部署到在腳本/程序版本庫中進行管理和使用。

其次,解決遠程操作Agent終端的客戶端。

先準備若干臺OS爲Windows的機器作爲專用的Agent終端,啓動Windows代理機器上的Python Socket服務,根據Web下發的指令自動下載、更新、部署自動化執行程序或腳本代碼到Agent機器本地,之後Socket服務繼續監聽後續指令的到來,根據不同的指令,自動執行後續的步驟,並將執行結果返回服務器直至在Web頁面展示執行結果。

第三,遠程Agent終端機器太少或太忙無空閒,怎麼辦?

在解決方案中完全支持個人本地PC來作爲單體終端,只需要提前做一些初始環境準備工作,比如部署相應版本的Python軟件及模塊等。

有人就會有以下疑問:那不就和C/S架構沒什麼區別了嗎?不還是要人工把代碼/打包好的軟件部署在本機上嗎?項目的改動導致用戶頻繁變更自動化程序帶來的弊端不還是存在嗎?
放在個人PC本地的不是C端運行程序,而是一個已封裝的Socket服務端,與遠程Agent終端同理不同端而已。總之,無論是公共的遠程Agent終端還是個人PC終端都是支持自動調用的,服務調用內容和過程參照下圖:

三、我們用哪些主要核心技術

3.1 Socket服務

利用Python socket模塊實現Socket兩端服務啓動和定製功能,並連接B端Web應用與C端SAP系統,使用pyinstaller進行打包封裝。

Socket服務提供方(也稱服務端)功能: 1.監聽客戶端請求並接收請求數據/指令;2.檢測/下載/更新自動化執行腳本/程序;3.執行自動化腳本/程序並獲取執行結果;4.返回執行結果給客戶端;

Socket服務消費方(也稱客戶端)功能: 1.發送待執行數據/指令給服務端;2.接收服務端返回的執行結果;

通過上圖交互方案中可以看出,在連接時只要滿足服務提供方與服務消費方是一致的ip和port,再設置接發數據格式,就可以啓動相應的消費方服務,最終實現B端的Web應用與C端SAP系統的連接。

3.2 進程指令調用

利用subprocess調用指令執行腳本,保證Socket服務與腳本相互獨立;通過subprocess的PIPE管道進行傳參以及結果/異常的獲取。

3.3 適當運用終端系統的cmd或dos命令

利用Windows系統的cmd命令自動獲取SAP安裝路徑/登錄等操作,安裝路徑獲取具體代碼如下:

# 獲取sap安裝路徑
os.system("start saplogon.exe")  # 打開進程
cmd = 'wmic process where name="saplogon.exe" get executablepath'  # cmd命令
sb = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)  # 執行命令

3.4 SAP腳本編寫

使用win32進行連接SAP並調用SAP GUI Scripting API進行相關自動化腳本編寫;SAP控件的定位路徑可使用SAP錄製的腳本查看,也可使用Scripting Tracker工具(Development Tool for SAP GUI Scripting工具)進行查看。

3.5 整體技術方案

可見下圖,不再詳細贅述。

四、我們對實際場景應用及分析

針對某記賬場景進行實際對比。

4.1 人工測試所需工時

測試人員從打開SAP客戶端並登陸開始生成1個憑證約2min,憑證結果檢查約1min,生成多個憑證會按系統按訂單成倍數增長,截圖並保存整理成word文檔約2min。

4.2 自動化實操

我們先看結果,實操部分日誌如下:

通過日誌可以看到:

  1. 從開始連接SAP到執行生成5個憑證共耗時97秒;
  2. 分別執行GXQ、TXQ兩套SAP系統;
  3. 涉及SAP操作有:數據接入檢查、生成憑證操作、憑證結果校驗、返回Web頁面展示、憑證截圖、過程log展示等。

以下是我們對該記賬場景的實踐過程的展示,如圖1 是涉及的前臺WEB頁面,發起執行請求,圖2 是實現過程動態效果。

圖1

圖2

4.3結果分析

  1. 以上操作均可做到系統自動檢查校驗準確且完整,實際人力投入減少近10倍。
  2. SAP自動化執行效率比人員手工執行檢查提升5倍以上。
  3. 測試人員操作更簡單直接,執行效率高;執行結果無需切換系統查看,查詢更直觀;讓機器替代測試人員檢查及整理執行結果,問題定位和反饋精準,人力資源消耗成本降低。

五、總結

不得不說,自動化的初始成本非常高,從開始決定要解決這個交互問題,到實際框架落地和產品設計,再到最後代碼實現和項目應用,我們測試開發團隊共耗費60多人天,歷時2個多月,但隨之帶來的收益也相當可觀,經初步測算,近一年爲我們團隊節省近5000個工時。

從技術上來講,單純的通過Python代碼實現SAP自動化並非難事,困難的是如何將B端與C端實現自動交互,並將Web應用的執行指令正確傳達給SAP系統執行。在我們實現解決方案中,通過依賴socket通信自建接口和服務功能解決了最直接的交互調用問題,解決了本地或遠程Agent終端調用問題,實現了建立指令庫進行模塊化管理,實現了持續迭代、自動部署腳本功能。

作者介紹:

仲崇瑞,蘇寧科技集團員工平臺研發中心高級測試經理,有多年的業務及產品設計經驗和測試管理經驗,負責蘇寧財務覈算、財務共享、稅務會計及智能應用等產品的測試及管理工作,涉及功能、性能、自動化、安全等測試領域,帶領團隊多次出色完成財務系統變革和切換的測試工作,致力於構建蘇寧財務類自動化測試產品解決方案,打造高效便捷的測試應用產品。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章