python自動化測試(2)
自動化基本技術原理
1 概述
在之前的文章裡面提到過:做自動化的首要本領就是要會 透過現象看本質 ,落實到實際的IT工作中就是 透過介面看資料。
掌握上面的這樣的本領可不是容易的事情,必須要有紮實的電腦理論基礎,才能看到深層次的本質東西。
2 應用軟體邏輯結構
資料庫應用系統 可能是最典型的網路應用程式了,關於它的軟體架構如下:
一般在邏輯上分為4層:
使用者介面層 UI
為終端使用者提供互動的人機介面
在傳統的 C/S 架構下應用程式(例如,Windows下的用戶端應用程式),一般都是一台中央資料庫伺服器( DB ),然後對應N台用戶端(DAL-BLL-UI )。
對於 初級測試人員 來說,可能對軟體的理解只能停留在 UI 層,於是在測試時候能做到的事情就是:日複一日,年複一年地用滑鼠 點點點了。
3 互連網軟體架構
在前一部分裡面提到的應用軟體的基本架構,雖然是在 “C/S” 時代提出來的,但是後面卻一直延續到現在 。直到今天最普遍的 “ABC/S” 模式:
App/Server
Browser/Server
Client/Server
其實本質上就把UI這一層放在用戶端,把UI以下放在Server端。
用戶端在不同的平台下面有不同的表現形式,就形成了現在流行的所謂的 “ABC/S” 模式的架構,這個基本上已經成為目前的互連網產品的標配了。具體的架構如下:
伺服器端和用戶端之間採用 Http/Https 的通訊協議,資料交換的格式為 Xml/Json 格式。
基於以上模式之後,軟體測試的方法論就發生了一些變化:
有了 性價比 最高的“基于于通訊編碼格式的介面測試”,屬於花20%就能解決80%的工作
介面測試完全可以進行自動化,而且不必強制和開發項目使用相同的語言,可以統一使用效率較高的指令碼語言
介面 天然就具有穩定性的需求,所以自動化測試專案不會存在反覆折騰的現象
介面測試人員成為了眾多平台之間的 球證
介面規範來自設計文檔,可以實行 設計產生測試,測試驅動開發 的規範模式
有了抽象成資料的能力之後,那麼很多看到的東西就可以進行合理的等價轉換了:
按鈕上顯示的字為"Submit"
等價於:按鈕元素的value值為 Submit
在資料層次編程進行比較就變得很容易了,因為這些都是電腦擅長處理的領域了,自動化也很自然地實現了。
4 更底層的原理
前面講到了對把軟體項目從看到的具體的介面往底層一點抽象成資料的方法。其實還有一些更底層,更絕的,對軟體的資料還可以更底層一點和物理世界建立關聯(這已經不好用“抽象”或者“具象”來描述了)。
本部分的內容,已經和應用軟體的測試的話題有點扯遠了,純粹就當科普吧。
從更廣泛的角度來看一個電腦系統,它給人的體驗上本質上是做了如下的處理:
人的所有的直觀體驗都是來自於對類比量(物理量)的體驗,人的互動輸入也是來自於類比量的輸入。
人敲擊鍵盤向電腦系統輸入文字,鍵盤將不同一鍵位產生的脈衝電流傳入電腦系統,電腦系統通過晶片和驅動,將這些電流訊號轉化成數字訊號,然後交付數字晶片處理。這樣人就完成了 資訊的輸入 。
電腦系統對這些資料進行計算,儲存,傳輸等等,最後在LCD顯示器上通過點亮不同位置的點陣,以形成光學的類比量輸出,傳送到人的眼睛裡面,人就完成了 資訊的擷取 。
以上的例子可以簡化為:力學物理量產生電學物理量進行輸入,電腦數字系統處理後,光學物理量進行輸出。
對於電腦系統,輸入和輸出都是多樣的:
這些東西都已經是現在互連網行業很流行的元素了。
由於電子技術和通訊領域往往檢測的都是物理量,肉眼是很難量化的,所以測試門檻會很高,但是各種檢測儀器反而發展得相當好,自動化程度相當高。反觀IT行業的上層的應用軟體層,人卻都過多的依賴於人工去操作,肉眼去觀察了,反而忽視了自動化,導致測試行業一直人員素質不高,技術實力太弱,這顯然是很不可取的,至少是很不符合目前軟體工程行業的時代需求的。
5 小結
本文對應用軟體進行了邏輯上的分層,來闡述了軟體自動化測試和基本原理,在文章的後半部分對目前流行的 智能硬體 所涉及的電子技術的自動化測試也進行了簡單的探討,希望能夠給從來 自動化測試的人也有一點啟發。
後面的系列文章將從技術層次來落地這些理論。
總結起來,對於想入這行而且想有深入發展的人,有如下幾個結論和建議:
軟體的本質不是介面而是資料
要瞭解軟體的本質,必須必須要有良好的電腦基礎
從事互連網行業的人可以熟悉linux,儘早建立這種 軟體即資料 的世界觀
介面做自動化測試是最投入回報比最高的(來自Google的工程師的觀點)
要想做好自動化測試,必須有軟體開發能力和系統的設計能力
寫到這裡,最後容我 “安利” 一下 Linux ,因為相比 MacOS 和 Windows 系統,Linux 在介面這一塊做得不太好,但是卻有強大的CLI互動,支援強大的指令碼編寫,對於實現自動化是很有協助的。
(未完,待續。。。)
後續將開始繼續書寫 python的自動化工具和編程應用了。