前言
相信所有從事著軟體測試或相關工作的同學都會思考一個問題: 如何在持續且部分重複的測試活動中有效的進行測試技術積累?
這個有趣的問題我先不予回答,我們先談談如何有效保證軟體質量。 作為團隊中的質量保證者,需要深刻的意識到,驗證系統原有功能是否高可用 (迴歸測試) 往往比驗證新功能 要重要得多 ( 當然新功能有問題產品小姐姐也是會捶你的 )。這一點在 敏捷開發中更是尤為重要 (不能因為新功能而忽視舊功能) 。
敏捷開發以使用者的需求進化為核心,採用迭代、循序漸進的方法進行軟體開發。在敏捷開發中,軟體專案在構建初期被切分成多個子專案,各個子專案的成果都經過測試,具備可視、可整合和可執行使用的特徵。換言之,就是把一個大專案分為多個相互聯絡,但也可獨立執行的小專案,並分別完成,在此過程中軟體一直處於可使用狀態。 --百度百科
關於敏捷開發這裡不過多介紹,其中的一個特性我比較看好,那就是 持續交付 。
整個業務市場肯定是持續在變化的,支撐業務的軟體如果跟不上市場的節奏,則很有可能導致業務受到影響甚至直接被市場淘汰。 --筆者
持續交付聽起來高大上,說白了就是保證軟體隨時處於一種可上線的狀態, 而這個時候,測試自動化就顯得格外重要了。
舉個例子(比較極端):
一次系統迭代到達了既定的上線日,這時仍然存在著數個不嚴重 (核心功能可用) 但也會影響部分支線業務的缺陷。
這時測試問開發: "你丫的這幾個Bug還能不能修了啊,不修就上了啊" 。
開發回答: "修修修, 我修好這一個Bug你再測一下沒問題就上線" 。
當測試驗證完開發修的Bug並且花了幾個小時手動回測了系統原有功能,剛準備上線時,
開發急急忙忙跑過來說 : "另外一個Bug我也修了, 你再看看沒問題就上線吧"
這時,相信測試心裡是相當難受的,
先不考慮修復一個Bug導致千千萬萬個新Bug的情況出現, 光是回測的工程量就不是一般的大。
於是測試幻想著所有測試都交給機器去做,這樣就可以帶薪發呆了 ......
複製程式碼
眾所周知,機器在某些方面是優於人類的,所以說一些 重複性 的測試工作完全可以交給機器去做,而不應該是堆人數去瘋狂的點點點 ( 雖然該點的時候還是要點 )。 這時候你可能會問,那自動化測試能完全代替手工測試嗎? 答案是 : 不能,因為人類特有的創造性和探索性是目前機器難以模擬的。 雖然說完全用自動化測試代替手工測試是不太現實的, 但是將系統穩定且核心的功能實現測試自動化還是非常可行的。
只有穩定的功能才有資格擁有自動化測試。 --筆者
再聊一點題外話,測試人員作為軟體質量守衛者,系統每一次細微的改動 (包括改Bug),都應該當成一個 全新的版本 去進行測試。但是當 測試 - > 修復缺陷 -> 驗證缺陷 -> 回測 的迴圈次數逐漸增多時,測試人員的測試熱情肯定已經不如第一次測試時那麼高昂了,心裡也是處於一種得過且過的心態。(只要不爆炸,你就給我上)
測試人員對缺陷的容忍度會隨著工作時長而增加。 --筆者
每一次迭代到後期,測試人員更應關注核心功能是否高可用(條件允許的話,系統原有核心功能的測試交給自動化,新核心功能測試則根據實際情況部分自動化部分人工),不然的話專案可能會將無限延期下去。 所以這也就是為什麼軟體上線後不可避免的會出現一些新問題或者是老問題復現。在每一次迭代中,想要完全實現100%自動化測試那是不太可能的,除非有許多專業且精通業務的測試開發人員,然而我們知道這是不現實的(不僅是公司成本問題,市場上也沒那麼多人才)。同時,自動化測試的實現也是開發的一個過程,自動化測試本身也可能會有缺陷,開發自動化測試的難度甚至比被測軟體開發本身還要高,隨著被測軟體不斷迭代,自動化測試也必然要緊跟著被測軟體的腳步進行迭代,測試框架也需要測試人員花精力與時間去維護。 --來自筆者的吐槽
然而吐槽過後,該做的還是要做。言歸正傳, 測試技術積累 無非有幾個大方向: 自動化測試、 效能測試、 安全測試,(其實效能、安全測試都可以包括在自動化測試內)。每一項測試對於一個系統來說都十分重要,但是其中偏功能的自動化測試相對來說更直觀更易上手。以目前主流的Web專案來說,先不考慮單元測試(基本由開發人員負責) ,測試人員能把介面測試以及UI自動化測試做好的話,軟體就基本達到可快速持續交付的標準了, 而介面測試對比UI自動化測試來說環境更 封閉 ,測試覆蓋率也比較容易得到保障。所以說大方向上先把介面測試做起來是沒有任何毛病的。 (但請注意介面測試全通過了軟體也可能存在嚴重的UI介面上的缺陷,筆者吃過虧,別問都是淚)
筆者介面測試學習並實踐了一段時間後,覺得一直堆測試程式碼並不是很優雅,基於這一點,決定自己從零搭建一套 易用輕便(最後估計會變得很臃腫) 的自動化測試平臺 。雖然現在測試開源平臺多如牛毛,但是俗話說的好,只有自己做出來的東西才是最合適、用起來才是最爽的。 做人如果沒夢想,和鹹魚有什麼區別 (筆者可是要將人工智慧與測試結合的人)。於是說幹就幹,雖然過程很艱辛 (從零開始摸爬滾打了 小半年),但勉強算是搭建出了一個簡易可用的測試平臺。
正文將圍繞測試技術壁壘以及筆者正在構建的測試平臺不斷地進行總結與分享,筆者也不是什麼大牛,希望能在持續分享中同讀者共同成長。
覺得這篇東西有點意思的朋友請點個贊哦~
有任何問題或想法歡迎隨時溝通 :)
--2019-5-7
複製程式碼
正文
"智慧"測試平臺初體驗
整個測試平臺技術架構為: Python-Flask + Vue + MongoDB, 其中整個後端程式碼由筆者獨立完成,前端則借鑑了某開源專案,在此感謝該開源專案提供的靈感。
本章將不敘述任何實現思路以及細節,僅僅展示一下平臺目前的一個使用流程。
首先我們通過【登入頁面】進入【平臺首頁】並且在【介面測試】下新建一個名為【測試專案】的專案:
然後進入【測試專案】並 新增一條 【測試用例】
接著進入【測試用例】並 新增一條 【介面測試用例】(筆者的想法是一條測試用例下可對多個介面進行測試):
好的這個時候我們進入【修改】頁面,填入介面測試用例資訊並點選【儲存】:
現在我們需要先去【Host配置】設定測試的host地址(選取當前本機的平臺專案後端作為演示地址):
好的現在回到【測試列表】選取測試用例以及測試環境後點選【執行測試】:
這個時候頁面會自動跳轉至【自動化測試報告】頁面,我們可以點選【檢視詳情】檢視詳細內容:
咦? 怎麼飄紅了?,喔原來是協議選錯了,本機並沒有配置CA證照,並不支援HTTPS訪問。
那麼我們這個時候回到介面用例修改頁面,將HTTPS換成HTTP:
再一次進行測試,這個時候可以看到測試終於通過咯:
下面我們來演示一下【定時任務】功能,首先先新增一個定時任務:
新增完畢後,可自由 編輯/停用/啟用 且 立即生效!:
過一段時間後,我們可以進入【自動化測試報告】檢視定時任務是否正常工作,
在下方動圖可以看到列表中新增了很多執行方式被標記為【定時執行】的測試報告:
有沒有覺得測試都是全通過,一點意思都沒有,好的那我們去修改一下用例的測試結果校驗,讓他成為永遠都通過不了的測試用例:
過一段時間後我們回到【自動化測試報告】頁面,發現多出了很多通過率為0%的測試報告:
同時,系統會向定時任務中設定的告警郵箱傳送警告,相關人員收到告警郵件後,進入系統內搜尋郵件中的報告編號,即可找到存在失敗用例的測試報告:
至此,筆者目前構建的 "智慧"測試平臺 使用主流程就介紹完畢啦,後續將會分享其中一些小細節以及不斷的進行功能迭代。
熱烈祝賀本次介紹圓滿結束 :)
--2019-5-7
複製程式碼