程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python pytest - allure 操作教程

編輯:Python

文章目錄

  • 下載安裝
  • 報告內容
    • Overview 報告概述
    • Categories 類別
      • 如何創建自定義缺陷分類
    • Suites 測試套件
    • Graphs 圖表
    • Timeline 時間線
    • Behaviors 行為
    • Packages 包
  • 生成報告的命令
  • 設置報告中的測試環境
  • 設置歷史趨勢文件
  • 開啟端口訪問,分享測試報告
  • 自動獲取測試失敗截圖
  • 常用用法
    • 設置標簽

下載安裝

  • 第三方庫,需要安裝:pip install allure-pytest 或者 easy_install allure-pytest

  • 下載allure 命令工具 : Releases · allure-framework/allure2 · GitHub

  • 配置環境變量path: —目的調用allure

    path環境變量中新增 allure安裝目錄/bin

    cmd命令path

    驗證:


報告內容

Overview 報告概述

“概述”頁包含多個默認小部件,這些小部件表示項目和測試環境的基本特征。

  • 統計 - 整體報告統計。
  • 啟動 - 如果此報告表示多次測試啟動,則此處將顯示每次啟動的統計信息。
  • 行為 - 根據故事和特征聚合的結果信息。
  • 執行程序 - 有關用於運行測試的測試執行程序的信息。
  • 歷史趨勢 - 如果測試積累了一些歷史數據,它將計算其趨勢並顯示在圖表上。
  • 環境 - 有關測試環境的信息(請參閱如何定義環境)。

主頁小部件是可拖動和可配置的。此外,Allure支持它自己的插件系統,因此可以進行完全不同的小部件布局。

導航欄是可折疊的,可用於切換到多個基本結果概述模式。

Categories 類別

“類別”選項卡還可以創建自定義缺陷分類以應用測試結果的方法。

如何創建自定義缺陷分類

默認情況下,有兩類缺陷:

  • 產品缺陷(測試失敗)
  • 測試缺陷(破損的測試)

要創建自定義缺陷分類,請在生成報告之前將categories.json文件添加到目錄allure-results/categories.json中。

  • categories.json 文件內容:

    [
    {
    "name": "Ignored tests",
    "matchedStatuses": ["skipped"]
    },
    {
    "name": "Infrastructure problems",
    "matchedStatuses": ["broken", "failed"],
    "messageRegex": ".*bye-bye.*"
    },
    {
    "name": "Outdated tests",
    "matchedStatuses": ["broken"],
    "traceRegex": ".*FileNotFoundException.*"
    },
    {
    "name": "Product defects",
    "matchedStatuses": ["failed"]
    },
    {
    "name": "Test defects",
    "matchedStatuses": ["broken"]
    }
    ]
    
    參數描述name(必填)類別名稱matchedStatuses(可選)合適的測試狀態列表。違約["failed", "broken", "passed", "skipped", "unknown"]messageRegex(可選)正則表達式模式,用於檢查測試錯誤消息。違約".*"traceRegex(可選)用於檢查堆棧跟蹤的正則表達式模式。違約".*"

如果測試結果的狀態在列表中,並且錯誤消息和堆棧跟蹤都與模式匹配,則測試結果屬於該類別。

categories.json文件可以存儲在測試資源目錄中,以防使用 allure-mavenallure-gradle 插件。

Suites 測試套件

在“套件”選項卡上,可以找到已執行測試的標准結構表示形式,按套件和類分組。簡單來說就是顯示原始的結構,不展示allure 標簽

Graphs 圖表

Timeline 時間線

時間軸選項卡可視化測試執行的回顧,allure適配器收集測試的精確計時,在此選項卡上,它們根據其順序或並行時序結構進行相應安排。

Behaviors 行為

對於行為驅動方法,此選項卡根據 Epic、Feature 和 Story 標簽對測試結果進行分組。

Packages 包

“包”選項卡表示測試結果的樹狀布局,按不同的包分組。


生成報告的命令

  • 方式一 : 在腳本運行目錄運行

    1 、執行用例生成測試數據 pytest.main(['-s','[測試文件.py]','--alluredir','./allure-result'])

    2、生成測試報告 os.system('allure generate ./allure-result -0 ./reports')

  • 方式二: 在命令行或者pycharm終端中運行

    1、生成json文件

    pytest 腳本名稱 --alluredir ./report

    或者

    pytest --alluredir=指定路徑(指定allure報告數據生成路徑)

    2、將json文件轉換為HTML頁面

    allure serve report

    或者

    allure generate [json文件地址] -o [報告地址] --clean

  • 三: 我自己在用的一種方式 :

    這是我的一個構架圖,main 是腳本入口,common 是公共包,我在common 中寫了一個方法運用OS模塊去啟動,

    為什麼要這樣去做呢?

    因為我發現在main 入口中運行方式一的命令 ,調用的是pytest 測試框架,而非是allure-pytest 測試框架,所以只是啟動了腳本,並沒有執行生成報告的程序,通過命令行去運行又太麻煩,我設置了環境文件,設置了歷史文件的配置,在每一次生成腳本的時候都需要去調用,插入到測試數據文件中,需要4行以上的代碼才能執行完畢,所以創建了這個方法,相當於一鍵啟動。

    備注 :tmp 為 測試數據生成目錄, report 為測試報告生成目錄

    1、2、3、4步需要每次都運行,步驟5可以看情況,如果想要別人可以訪問你的 allure 報告則可以開啟
    腳本內容:

    def get_report(self):
    # 1 、 生成json文件
    print("正在生成JSON文件".center(76, '-'))
    cmd = r"pytest C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\main\testmain.py " \
    r"--alluredir=C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\tmp --clean-alluredir "
    os.system(cmd)
    print("正在復制配置信息文件".center(76, '-'))
    # 2、 復制配置文件到json文件中
    cmd1 = r'copy C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\alluer-environment\environment.properties' \
    r' C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\tmp\environment.properties '
    os.system(cmd1)
    print("正在生成報告".center(76, '-'))
    # 3、生成報告
    cmd2 = r"allure generate C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\tmp -o " \
    r"C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\report --clean "
    os.system(cmd2)
    print("報告生成完畢!!!!".center(76, '-'))
    # 4、 替換歷史記錄文件
    print("正在生成歷史趨勢文件".center(76, '-'))
    Get_History().get_history()
    # 5、為報告開啟端口,共享查看
    # print('正在開啟端口,分享報告')
    # cmd3 = r'allure open -h 192.168.81.102 -p 8885 C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\reports'
    # os.system(cmd3)
    

設置報告中的測試環境

要將信息添加到環境小組件,只需在生成報告之前創建(或)文件到 allure-results 目錄即可。

1、創建一個單獨測試環境文件 environment.properties,不要放在 allure 報告中,因為報告可能每次運行的時候帶了 clean 參數則會刪除掉,一般單獨放置在一個位置,例如:

文件內容可以隨便寫 鍵和值用等號連起來就可以

實例:

SystemVersion = Windows 11
javaVersion = 1.8.0_131
pythonVersion=3.9.10
pytestversion=6.2.5
allureVersion=2.17.2
pyVersion =1.11.0
pluggyVersion=1.0.0
pycharmVersion = PyCharm 2021.2.1 (Professional Edition)
Browser = Microsoft Edge
rootdir=C:/Users/admin/PycharmProjects/pythonProject/okmarts_test_front
plugins = allure-pytest-2.9.45

2、 在生成報告前將文件復制到 json文件生成目錄下 一般情況是 allure-results 我這裡用的是 tmp文件夾

# 輸出報告
def get_report(self):
# 1 、 生成json文件
print("正在生成JSON文件".center(76, '-'))
cmd = r"pytest C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\main\testmain.py " \
r"--alluredir=C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\tmp --clean-alluredir "
os.system(cmd)
print("正在復制配置信息文件".center(76, '-'))
# 2、 復制配置文件到json文件中
cmd1 = r'copy C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\alluer-environment\environment.properties' \
r' C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\tmp\environment.properties '
os.system(cmd1)
print("正在生成報告".center(76, '-'))
# 3、生成報告
cmd2 = r"allure generate C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\tmp -o " \
r"C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\report --clean "
os.system(cmd2)
print("報告生成完畢!!!!".center(76, '-'))

3、運行 allure generate 測試數據生成目錄(json文件) 生成報告目錄 結果如下


設置歷史趨勢文件

在 JENKINS 中運行 allure 可能會自動的生成趨勢文件,但是如果在本地跑可能歷史趨勢文件不會自動生成,下面教大家一種手動生成歷史趨勢文件或者也叫保存歷史測試數據的方法:

1、創建一個存放歷史趨勢文件的目錄

2、創建一個保存歷史趨勢文件的py文件,文件內容:

注意:這個腳本需要運行完成腳本,生成測試報告後才運行

# -*- coding: UTF-8 -*-
"""
保存每次的測試歷史記錄
用於生成趨勢圖
設計思路: 首先進行判斷當前文件夾內是否存在歷史測試記錄文件
如果存在--- 說明不是第一次進行測試,那麼要做的操作為 1、 讀取歷史測試數據 使用一個變量進行保存,
2、讀取最新的測試報告數據,使用另一個變量保存,
3、使用for循環 獲取每次數據,將每次獲取的數據加入到舊的歷史記錄中,
4、將加入新數據後的舊數據覆蓋寫入到歷史文件中,
5、復制文件到報告文件中
如果不存在 --- 說明為第一次執行測試, 具體操作步驟為: 復制測試報告文件到歷史文件中 作為首次記錄
"""
import os
import json
class Get_History:
def get_history(self):
# 先判斷是否為第一次生成(如果該目錄下沒有history-trend.json文件則為第一次)
if os.path.exists(
r"C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\save_report_history\history-trend.json"):
print('文件存在')
#如果存在文件,則讀取現有文件,將新生成的文件加入到現有文件中,再將處理後的文件復制到報告目錄下
#打開json文件獲取數據
f = open(r"C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\save_report_history\history-trend.json")
old_history_list = json.load(f)
# print(f'舊的json文件為{old_history_list}')
#獲取新生成的history文件數據
f1 = open(r"C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\report\history\history-trend.json")
new_history_list = json.load(f1)
# print(f'新的json文件為{new_history_list}')
#遍歷新的history文件,文件處理,依次加入到舊的文件中
for i in new_history_list:
# print(i)
old_history_list.append(i)
# 覆蓋寫入數據至保存歷史數據文件中
with open(r"C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\save_report_history\history-trend.json","w") as f:
json.dump(old_history_list, f)
s = open(r'C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\save_report_history\history-trend.json')
total_history_data = json.load(s)[::-1] #獲取倒序的歷史總文件
filename = r'C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\save_report_history\history-trend_desc.json' #指定文件名創建倒序文件
with open(filename,'w') as f :
json.dump(total_history_data,f)
#將寫入後的倒敘文件復制到報告文件中
cmd = rf'copy {filename} C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\report\widgets\history-trend.json'
os.system(cmd)
else:
print("第一次執行測試?")
if os.path.exists(r'C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\report\widgets\history-trend.json'):
print('獲取最新數據為第一版,從報告目錄復制文件到歷史文件保存目錄')
cmd = r'copy C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\report\widgets\history-trend.json C:\Users\admin\PycharmProjects\pythonProject\Okmarts_test_front\save_report_history\history-trend.json'
os.system(cmd)
else :
print('未找到相關測試記錄文件,請先執行測試')
if __name__ == '__main__':
a = Get_History()
a.get_history()

開啟端口訪問,分享測試報告

allure open -h [ip地址] -p [端口號] [報告地址]

自動獲取測試失敗截圖

創建conftest.py文件,寫入以下內容

文件內容:

@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
"""
獲取每個用例狀態的鉤子函數
:param item:
:param call:
:return:
"""
# 獲取鉤子方法的調用結果
outcome = yield
rep = outcome.get_result()
# 僅僅獲取用例call 執行結果是失敗的情況, 不包含 setup/teardown
if rep.when == "call" and rep.failed:
# 添加allure報告截圖
if hasattr(_driver, "get_screenshot_as_png"):
with allure.step('添加失敗截圖...'):
allure.attach(_driver.get_screenshot_as_png(), "失敗截圖", allure.attachment_type.PNG)

實現效果:


常用用法

設置標簽

設置報告的一些標簽:測試對象名稱、測試模塊名稱、用戶故事名稱、用例步驟名稱、設置測試用例對應的缺陷嚴重程度

  • @allure.epic(‘測試對象,測試集名稱’)

    一般用於測試的大類別下面,有點類似與一篇文章的大標題

    報告中展現的位置 :

  • @allure.feature(‘測試模塊’)

    相當於二級分類

    報告中展現的位置 :

  • @allure.story(‘用戶故事-用例’)

    三級分類,也是最後一級,allure 裡面只存在三級分類


    展現位置:

  • @allure.step(‘用例步驟’)

  • @allure.severity(‘嚴重級別’)

  • @allure.description(‘描述’)

  • @allure.attach(‘添加附件-圖片,數據表等,給地址’)

  • with allure.step(‘測試步驟’):


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved