Allure是一個開源的測試報告生成框架,提供了測試報告定製化功能,相較於我們之前使用過pytest-html外掛生成的html格式的測試報告,通過Allure生成的報告更加規範、清晰、美觀。
pytest框架支援使用Allure生成測試報告,接下來讓介紹pytest怎樣結合Allure生成測試報告。
環境搭建
安裝allure-pytest
步驟1
需要先安裝外掛allure-pytest
,可以理解為用於連線pytest
和allure
,使它們可以結合使用。
安裝命令: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的一些特性,為了更好的理解這些特性的使用,我們可以將測試指令碼由上至下進行分層:
- 被測系統,即被測系統的描述,如線上購物商城
- 功能模組,一個被測軟體系統包含一個或多個功能模組,如線上購物商城包含登入、購物車、下單、支付、發貨等模組
- 使用場景,一個功能模組中包含一個或多個使用者使用場景,如購物車模組包含加入購物車、修改數量、清空購物車的場景
- 測試用例,一個場景包含一條或多條測試用例,如加入購物車包含庫存數>0 或 <0等測試用例
- 測試步驟,一條測試用例由一個或多個測試步驟構成,如將庫存數>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生成測試報告需要經過如下兩步操作:
-
首先,生成測試結果資料:
# python程式碼執行 pytest.main(['testcase/test_case.py', '-s', '-q', '--alluredir', './result']) # 命令列形式 pytest testcase/test_case.py --alluredir ./result
即執行
testcase/
目錄下的測試用例,將測試結果以json
檔案的形式儲存至當前目錄下的result
資料夾中。引數
--alluredir
用於指定測試結果儲存路徑。 -
然後,生成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還有其他的常用特性,下篇文章我們再繼續學習。