軟件測試,如何彎道超車?

前言

隨着IT和5G技術發展的發展,軟件已經進入每個人的手機,要想客戶滿意,必須保證軟件質量。軟件開發週期越來越短,軟件測試任務越來越重,而測試中的許多功能測試都是重複行非智力的,這些工作最適合計算機代替人工完成。

自動化測試是一個非常廣泛的技術,需要多年努力學習才能精通,有些做了四五年功能測試的工程師也沒有熟練掌握,所以自動化測試是測試新手彎道超車老測試的好機會。

一、自動化測試概述

1. 概念

軟件自動化測試就是通過測試工具或者其他手段,按照測試人員的預定計劃對軟件產品進行自動化測試,他是軟件測試的一個重要組成部分,能夠 完成許多手工測試無法完成或者難以實現的測試工作,正確合理的實施自動化測試,能夠快速,全面的對軟件進行測試,從而提高軟件質量,節省經費,縮短軟件的發佈週期。

2. 爲什麼要進行自動化測試

  1. 縮短測試周期
    計算機行業更新迭代快速,大量頻繁的迴歸測試消耗時間,自動化測試能夠將重複的實行交給計算機去做,加快測試速度。
  2. 避免人爲出錯
    測試人員不可能持續高度集中,並且人類易受外界影響(頭疼腦熱,精神不振),可能會造成人爲錯誤
  3. 測試信息存儲
    自動化測試將測試信息和數據儲存在文件中,思路清晰明確,交接方便
  4. 輕易獲取覆蓋率
    自動化測試能夠解放測試人員,使測試人員能夠有更多的精力做那些非重複性的工作。
  5. 其他
    自動化測試可以是實現自動或者定時執行
    注意:自動化測試的方向是對的,而且趨勢也是如此,但是有些自動化實現不了的還是會手動測試的。

3. 自動化測試條件和使用場景

條件:

  1. 手動測試已經完成,後期再不影響進度的前提下逐漸實現自動化
  2. 項目週期長,重複性的工作都交給機器去實現
  3. 需求穩定,項目變動不大
  4. 自動化測試腳本複雜度比較低
  5. 可重複利用

場景:

  1. 頻繁的迴歸測試
  2. 冒煙測試
  3. 傳統行業需求變化不大,應用頻繁
  4. 性能測試

5. 自動化測試流程

①分析測試需求

需求文檔是我們展開一切工作的根本,也是測試工程師的測試目標。測試工程師分析測試需求,使用思維導圖提取測試點,以便用例設計時能夠覆蓋所有的需求點。這裏舉一個例子,App功能測試需要覆蓋一下幾個方面:

  1. 頁面控件測試,確保各個控件可靠;
  2. 頁面功能測試,確保各項操作正常;
  3. 數據處理測試,確保數據顯示準確、處理精確可靠;
  4. 模塊業務邏輯測試,確保各個業務流程暢通。

②制定測試計劃

不管是手動測試還是自動化測試前,必須做個測試計劃,明確測試對象、測試目的、測試的項目內容、測試的方法、測試的進度,預估測試風險。制定好測試計劃後,下發給用例設計者。

③設計測試用例

根據測試點,設計出能夠覆蓋所有需求點的測試用例,形成測試用例文檔。由於不是所有的測試用例都能用自動化來執行,所以需要將能夠執行自動化測試的用例彙總成自動化測試用例。必要時,要將登陸系統的用戶、密碼、產品、客戶等參數信息獨立出來形成測試數據,便於腳本開發。

④搭建測試環境

自動化測試人員在用例設計工作開展的同時即可着手搭建測試環境。因爲自動化測試的腳本編寫需要錄製頁面控件,添加對象。測試環境的搭建,包括被測系統的部署、測試硬件的調用、測試工具的安裝盒設置、網絡環境的佈置等。

⑤編寫並執行測試腳本

根據自動化測試用例和問題的難易程度,採取適當的腳本開發方法編寫測試腳本。
①先通過錄制的方式獲取測試所需要的頁面控件;
②然後再用結構化語句控制腳本的執行,插入檢查點和異常判定反饋語句,將公共普遍的功能獨立成共享腳本,必要時對數據驚醒參數化;
③還可以用其他高級功能編輯腳本。
腳本編寫好了之後,需要反覆執行,不斷調試,直到運行正常爲止。

⑥分析測試結果、記錄測試問題

建議測試工程師及時分析自動化測試結果,每天抽出一定時間分析結果,更早地發現問題。如果採用開源自動化測試工具,建議對其進行二次開發,以便與測試部門選定的缺陷管理工具緊密結合。理想情況下,自動化測試案例運行失敗後,自動化測試平臺就會自動上報一個缺陷。測試人員只需每天抽出一地你該時間,確認這些自動上報的缺陷,是否是真實的系統缺陷。如果是系統缺陷就提交開發人員修復,如果不是系統缺陷,就檢查自動化測試腳本或者測試環境。

⑦跟蹤測試BUG

測試記錄的BUG要記錄到缺陷管理工具中去,以便定期跟蹤處理。開發人員修復後,需要對此問題執行迴歸測試,就是重複執行一次該問題對應的較薄,執行通過則關閉,否則繼續修改。如果問題的修改方案與客戶達成一致,但與原來的需求有所偏離,那麼在迴歸測試前,還需要對腳本進行必要的修改和調試。

⑧自動化腳本的維護

如果需求發生變更時,測試腳本和相關文檔《自動化測試用例》、《自動化腳本設計說明書》進行維護。

4. 自動化測試構成

①接口自動化測試
②UI自動化測試
③持續集成

三、 接口自動化測試

API接口測試介於單元測試和界面測試之間,是一種灰盒測試方法,主要測試內部接口功能的完成性。相較於UI自動化測試,它具有自動化成本低和測試效率高的特點。

接口測試的工作原理是接口測試工具模擬客戶端向服務器發送報文請求,服務器接受請求並做出響應。然後向客戶端返回應答信息,接口測試工具對應答信息進行解析的一個過程。

常用的接口測試工具有:
①Apache JMeter:是一款基於Java的開源測試工具,主要應用於WEB應用程序的負載測試,同時也支持單元測試和接口測試;
②Postman:是一款功能強大的網頁測試工具,支持WEB API和HTTP請求,能夠發送任何類型的HTTP請求(GET、HEAD、POST、PUT等)。Postwomen與其近似的一款免費開源、輕量級測試工具;
③SoapUI,是一款用於SOAP和REST的開源API測試自動化框架,可以集成到Eclipse等開發工具中,支持用戶二次開發;
④Robot Framework,是一款基於Python3的開源自動化測試框架,具有良好的可擴展性,支持關鍵字驅動,運行用戶二次開發。

基於這些接口測試工具,測試人員可以根據自身業務需要開發適合自己的接口自動化測試工具。有了接口自動化測試工具,我們就可以開展自動化測試工作。

自己搭建框架
使用測試工具自動化測試比較有侷限,所以我們可以自己搭建一套自動化框架:
①讀取文件中的數據,使用csv或者excel

//讀取csv
import csv
class ReadCsv():
    def readCsv(self):
        item = []
        rr = csv.reader(open("../dataDemo/123.csv"))
        for csv_i in rr:
            item.append(csv_i)
        item =item [1:]
        return item

//讀取excel
from openpyxl import load_workbook
class Readxcel():
    def getTestExcel(self):
        # 打開表
        workbook = load_workbook("G:\python\pythonProject\pytest05a\\requestdemo\\a.xlsx")
        # 定位表單
        sheet = workbook['Sheet1']
        print(sheet.max_row)  # 3 行
        print(sheet.max_column)  # 3 列
        test_data = []  # 把所有行的數據放到列表中
        for i in range(2, sheet.max_row + 1):
            sub_data = {}  # 把每行的數據放到字典中
            for j in range(1, sheet.max_column + 1):
                sub_data[sheet.cell(1, j).value] = sheet.cell(i, j).value
            test_data.append(sub_data)  # 拼接每行單元格的數據
        return test_data
t = Readxcel()
f = t.getTestExcel()
print(f)

②requests拿到數據請求接口返回狀態碼

import requests
from requestdemo.readexcel import Readxcel
class GetStatusCode():
    def getStatusCode(self):
        t = Readxcel()
        f = t.getTestExcel()
        item = []
        for excel_i in f:
            if excel_i["method"] == "get":
                rr = requests.get(excel_i["url"], params=excel_i["params"])
                item.append(rr.status_code)
            else:
                rr = requests.post(excel_i["url"], data=excel_i["params"])
                item.append(rr.status_code)
        return item
print(GetStatusCode().getStatusCode())

③通過斷言驗證返回狀態碼和200對比

import allure, pytest, os
from requestdemo.getStatusCode import GetStatusCode

get = GetStatusCode()
statusCodes = get.getStatusCode()

class TestReadExcel():
    def testReadExcel(self):
        for code in statusCodes:
            assert code == 200
if __name__ == "__main__":
    # 生成測試報告json
    pytest.main(["-s", "-q", '--alluredir', 'report/result', 'testreadexcel.py'])
    # 將測試報告轉爲html格式
    split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'
    os.system(split)

④生成allure的測試報告


四、UI自動化測試

UI自動化測試的成本比接口測試要高,不是技術實現難度高,因爲UI是用戶界面,變化比較頻繁,維護成本高。

那麼我們到要不要進行UI自動化測試呢?要要要!對一些大型項目,其功能是處於不斷地迭代地,雖然界面在調整,但是由於項目週期長,在開發和測試過程中,需要頻繁使用自動化測試的腳本進行迴歸測試,可以提高自動化測試的利用率,提高工作效率,降低工作成本。

UI自動化分爲App自動化和Web自動化測試,我們先學習web自動化。

1. Web自動化

推薦工具:推薦使用工具Selenium,主要進行Web自動化測試。
優點:
跨平臺、跨語言
支持多種瀏覽器
支持移動端測試
插件多,擴展性強
缺點:不能直接生成測試報告不能識別動態圖片
工作原理:


環境搭建
1)python3.7
2)Firefox35(大於43)
3)selenium2框架
穩定版 2.48.0 (pip install selenium==2.48.0)
4)瀏覽器驅動
使用:
由於篇幅太長,請閱讀《Web自動化測試,這篇足夠了》


2. App自動化

推薦工具:推薦使用Appium,無論是在市場利用率,還是在功能上,都比其他工具要強。而且,Appium不僅支持Android還支持iOS,所以在這裏,我們應該選擇學習Appium最能滿足市場的需要。
使用:
由於appium使用篇幅太長,請閱讀《App端UI自動化測試,看完還不會找我》

五、持續集成

1. 什麼是真正的自動化?

開發工程師提交新版本代碼,自動構建,我們測試自動執行腳本。
這就是持續集成,持續集成推薦使用Jenkins。

2、持續集成概念

互聯網軟件的開發和發佈,已經形成了一套標準流程,最重要的組成部分就是持續集成(Continuous integration,簡稱CI)

2.1. 持續集成(採蜜)

持續集成指的是,頻繁地(一天多次)將代碼集成到主幹。
它的好處主要有兩個:
(1)快速發現錯誤。每完成一點更新,就集成到主幹,可以快速發現錯誤,定位錯誤也比較容易。
(2)防止分支大幅偏離主幹。如果不是經常集成,主幹又在不斷更新,會導致以後集成的難度變大,甚至難以集成。

持續集成的目的,就是讓產品可以快速迭代,同時還能保持高質量。它的核心措施是,代碼集成到主幹之前,必須通過自動化測試。只要有一個測試用例失敗,就不能集成。

2.2. 持續交付

持續交付(Continuous delivery)指的是,頻繁地將軟件的新版本,交付給質量團隊或者用戶,以供評審。如果評審通過,代碼就進入生產階段。
持續交付可以看作持續集成的下一步。它強調的是,不管怎麼更新,軟件是隨時隨地可以交付的。

2.3. 持續部署

定義:持續部署(continuous deployment)是持續交付的下一步,指的是代碼通過評審以後,自動部署到生產環境。
目標:代碼在任何時刻都是可部署的,可以進入生產階段。
前提:能自動化完成測試、構建、部署等步驟。

3、持續集成工具Jenkins

Jenkins概念: Jenkins 是一個開源軟件項目,是基於Java開發的一種可拓展持續集成工具,主要用於持續、自動地構建 / 測試 / 集成軟件項目以及監控一些定時執行的任務。
Jenkins目的:
①持續、自動地構建/測試軟件項目。
②監控軟件開放流程,快速問題定位及處理,提示開放效率。

Jenkins特性:
• 易於安裝,只要把 jenkins.war 部署到 Tomcat 即可運行
• 易於配置,所有配置都是通過其提供的 web 界面實現
• 集成 RSS/E-mail,通過 RSS 發佈構建結果或當構建完成時通過 e-mail 通知
• 生成 JUnit / TestNG 測試報告
• 分佈式構建,支持 Jenkins 能夠讓多臺計算機一起構建/測試
• 插件支持,支持擴展插件,你可以開發適合自己團隊使用的工具
產品發佈流程:
產品設計成型 → 開發人員開發代碼 → 測試人員測試功能 → 運維人員發佈上線

六、總結

若想真正實現軟件自動化測試,必須包含持續集成、UI自動化和接口自動化。要達到這種水平,各種技術要熟練到一定級別。其實對於測試工程師來講,測試的工作其實相對比較輕鬆,技術難度也不是特別高。我們要保持高度學習精神,成爲行業的高精尖人才!

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