pytest(11)-Allure生成測試報告(一)

給你一頁白紙發表於2022-02-21

Allure是一個開源的測試報告生成框架,提供了測試報告定製化功能,相較於我們之前使用過pytest-html外掛生成的html格式的測試報告,通過Allure生成的報告更加規範、清晰、美觀。

pytest框架支援使用Allure生成測試報告,接下來讓介紹pytest怎樣結合Allure生成測試報告。

環境搭建

安裝allure-pytest

步驟1需要先安裝外掛allure-pytest,可以理解為用於連線pytestallure,使它們可以結合使用。

安裝命令:pip install allure-pytest

安裝Allure

步驟2中需要安裝Allure,需要去github下載,地址為:https://github.com/allure-framework/allure2/releases

根據作業系統在最新版本中選擇對應格式的安裝檔案進行下載,Windows系統選擇allure-2.xx.x.zip下載,如下圖所示:

下載後解壓檔案,並bin檔案所在的路徑加入系統環境變數,再重啟電腦,怎樣加入環境變數這裡不囉嗦,不知道的同學可以百度。

至此,環境搭建完成。

定製報告

Allure提供了很多特性用於定製生成測試報告,指令碼中加入這些特性可以對測試步驟進行詳細的說明,且不會對測試程式碼邏輯產生影響。

接下來以線上購物平臺的購物車功能模組下單模組簡單舉例說明,測試模組test_case.py程式碼如下:

import allure
import pytest
import os

@allure.step("登入獲取token")
def get_token():
    print("請求登入介面獲取token")

@allure.step("加入購物車")
def add_to_shopping_trolley():
    print("請求加入購物車介面")

@allure.step("查詢我的購物車")
def get_shopping_trolley_goods():
    print("請求查詢我的購物車介面")

@allure.step("清空購物車")
def empty_shopping_trolley():
    print("請求清空購物車介面")

@allure.step("下單")
def place_order():
    print("請求下單介面")


@allure.epic("xx線上購物平臺介面測試")
@allure.feature("購物車功能模組")
class TestShoppingTrolley:

    @allure.story("商品加入購物車")
    @allure.title("正向用例--將庫存數>0的商品加入購物車")
    @allure.description("校驗庫存數不為0的商品加入購物車是否正常")
    @allure.severity("critical")
    def test_add_goods(self):
        get_token()
        add_to_shopping_trolley()

    @allure.story("商品加入購物車")
    @allure.title("異常用例--將庫存數=0的商品加入購物車")
    @allure.description("校驗庫存數為0的商品加入購物車是否提示正確的錯誤資訊")
    @allure.severity("normal")
    def test_add_goods_error(self):
        get_token()
        add_to_shopping_trolley()

    @allure.story("查詢購物車商品數量")
    @allure.title("查詢購物車所有商品的總數量")
    @allure.description("校驗查詢購物車所有商品的總數量是否正常")
    @allure.severity("critical")
    def test_get_goods_quantity(self):
        get_token()
        add_to_shopping_trolley()
        get_shopping_trolley_goods()

    @allure.story("查詢購物車商品數量")
    @allure.title("查詢購物車單個商品的數量")
    @allure.description("校驗查詢購物車單個商品的數量是否正常")
    @allure.severity("critical")
    def test_get_goods_quantity(self):
        get_token()
        add_to_shopping_trolley()
        get_shopping_trolley_goods()

    @allure.story("清空購物車")
    @allure.title("加入商品後再清空購物車")
    @allure.description("校驗清空購物車介面功能是否正常")
    @allure.severity("normal")
    def test_empty_shopping_trolley(self):
        get_token()
        add_to_shopping_trolley()
        empty_shopping_trolley()


@allure.epic("xx線上購物平臺介面測試")
@allure.feature("下單模組")
class TestPlaceOrder:

    @allure.story("購物車下單")
    @allure.title("商品加入購物車再下單")
    @allure.description("校驗清購物車下單功能是否正常")
    @allure.severity("critical")
    def test_place_order(self):
        get_token()
        add_to_shopping_trolley()
        place_order()

    @allure.story("立即購買下單")
    @allure.title("選擇商品不加入購物車立即購買下單")
    @allure.description("校驗立即購買下單功能是否正常")
    @allure.severity("critical")
    def test_order(self):
        get_token()
        place_order()

上面測試程式碼中使用了Allure的一些特性,為了更好的理解這些特性的使用,我們可以將測試指令碼由上至下進行分層:

  1. 被測系統,即被測系統的描述,如線上購物商城
  2. 功能模組,一個被測軟體系統包含一個或多個功能模組,如線上購物商城包含登入、購物車、下單、支付、發貨等模組
  3. 使用場景,一個功能模組中包含一個或多個使用者使用場景,如購物車模組包含加入購物車、修改數量、清空購物車的場景
  4. 測試用例,一個場景包含一條或多條測試用例,如加入購物車包含庫存數>0 或 <0等測試用例
  5. 測試步驟,一條測試用例由一個或多個測試步驟構成,如將庫存數>0商品加入購物車,測試步驟為:登入-->商品加入購物車

對照以上分層,我們再來理解程式碼中使用的這些Allure特性,如下:

  • @allure.epic(),用於描述被測軟體系統

  • @allure.feature(),用於描述被測軟體的某個功能模組

  • @allure.story(),用於描述功能模組下的功能點或功能場景,也即測試需求

  • @allure.title(),用於定義測試用例標題

  • @allure.description(),用於測試用例的說明描述

  • @allure.severity(),標記測試用例級別,由高到低分為 blocker、critical、normal、minor、trivial 五級

  • @pytest.allure.step(),標記通用函式使之成為測試步驟,測試方法/測試函式中呼叫此通用函式的地方會向報告中輸出步驟描述

生成報告

生成Allure報告步驟

pytest中Allure生成測試報告需要經過如下兩步操作:

  1. 首先,生成測試結果資料:

    # python程式碼執行
    pytest.main(['testcase/test_case.py', '-s', '-q', '--alluredir', './result'])
    # 命令列形式
    pytest testcase/test_case.py --alluredir ./result
    

    即執行testcase/目錄下的測試用例,將測試結果以json檔案的形式儲存至當前目錄下的result資料夾中。

    引數--alluredir用於指定測試結果儲存路徑。

  2. 然後,生成HTML格式的測試報告:

    # python程式碼執行
    os.system('allure generate ./result -o ./report --clean')
    # 命令列形式
    allure generate ./result -o ./report --clean
    

    即將當前目錄下的result資料夾中的json資料,生成測試報告結果及index.html,並儲存至當前目錄下的report資料夾中。

    --clean表示先清除之前的測試報告,使用與否視情況自行選擇。

執行程式碼

因此,執行模組run.py程式碼編寫如下:

run.py

if __name__ == '__main__':
    pytest.main(['testcase/test_case.py', '-s', '-q', '--alluredir', './result'])
    os.system('allure generate ./result -o ./report --clean')

執行run.py,結果如下:

報告結果展示

執行run.py後,在run.py同級目錄下新增了result資料夾,以及資料夾下的json檔案,有多少條測試用例就生成多少個名稱為xxxx-result.json的結果檔案。

同樣在run.py同級目錄下新增了report資料夾,report資料夾中生成了一些檔案,包括index.html,如下:

在瀏覽器中開啟index.html,開啟後首頁如下:

選擇點選Behaviors後,結果如下:

Allure報告預設語言為英文,可以選擇中文,如下:

總結

可以把epic、feature、story理解為將測試用例按照功能模組進行分類,epic為一級類目,feature為二級類目,story為三級類目。

而title、description、severity、step等則用於測試用例自身相關的描述定義。

當然,Allure還有其他的常用特性,下篇文章我們再繼續學習。

相關文章