pytest結合allure

Allure

  • 一、文檔
  • 二、指令
  • 三、裝飾器
    • 3.1 @allure.step裝飾器
    • 3.2 @allure.description裝飾器
    • 3.3 @allure.title裝飾器
    • 3.4 @allure.link、@allure.issue 和 @allure.testcase裝飾器
    • 3.5 @allure.epic、@allure.feature 和 @allure.story裝飾器
    • 3.6 @allure.severity裝飾器

一、文檔

allure文檔

二、指令

1、運行測試并生成 allure 數據

pytest --alluredir=./allure_results

2、生成并打開報告

allure serve ./allure_results

三、裝飾器

3.1 @allure.step裝飾器

將函數或方法標記為測試步驟,并在 Allure 報告中展示步驟層級。
直接在測試方法或函數上添加 @allure.step 裝飾器,并可自定義步驟名稱,支持使用{}占位符。

import allure@allure.step("打開應用首頁")
def open_homepage():print("-----------open--------------")pass# 使用 {} 占位符將變量嵌入步驟名稱,參數自動填充。
@allure.step("輸入用戶名和密碼: {username},{password}")
def input_username(username, password):print(f"-----------{username}--------------")pass# 步驟可以嵌套,形成清晰的邏輯層級
def test_login():open_homepage()input_username("test_user","1234")

conftest.py與@allure.step結合,顯示單獨的“前置/后置”樹,用于配置初始化和銷毀。
conftest.py:

import pytest
import allure@allure.step("step in conftest.py for setup")
def conftest_test():pass@allure.step("step in conftest.py for teardown")
def conftest_test_of_teardown():pass@pytest.fixture(autouse=True)
def fixture_with_conftest_test():conftest_test()yieldconftest_test_of_teardown()

運行結果:
在這里插入圖片描述

3.2 @allure.description裝飾器

為測試用例添加詳細描述

1、@allure.description提供描述字符串
2、@allure.description_html添加html格式的描述
3、僅從測試方法的文檔字符串獲取描述

import pytest
import alluredef test_unicode_in_description():"""unicode描述使用不同的國家語言helloこんにちは你好伙計"""assert 42 == int(6 * 7)@pytest.mark.parametrize("username", ["user1", "user2"])
@allure.description("測試不同用戶名的登錄兼容性:username={username}")
def test_login_compatibility(username):pass@allure.description_html("""
<h1>添加html格式的描述</h1>
""")
def test_description_html():pass@allure.description("動態描述,可替換開始的描述")
def test_login_change():passallure.dynamic.description("測試用例執行完了,更改描述")

在這里插入圖片描述

3.3 @allure.title裝飾器

使測試標題更具可讀性,標題支持占位符并支持動態替換

import pytest
import allure@allure.title("@allure.title使測試標題更具可讀性,標題支持占位符并支持動態替換")
def test_with_a_title():assert 2 + 2 == 4@pytest.mark.parametrize("param1,param2,expected", [(1, 1, 2), (1, 3, 5)])
@allure.title("標題包含動態參數:{param1},{param2}")
def test_with_parametrize_title(param1, param2, expected):assert param1 + param2 == expected@allure.title("動態描述,可替換開始的描述")
def test_title_update():passallure.dynamic.title("測試用例執行完了,更改標題")

運行結果:
在這里插入圖片描述

3.4 @allure.link、@allure.issue 和 @allure.testcase裝飾器

用于在Allure報告中添加可點擊的鏈接,提升測試報告的可追溯性。其中@allure.link表示通用資源鏈接,@allure.issue關聯問題追蹤系統(Bug/任務),@allure.testcase關聯測試用例管理系統

@allure.link("https://github.com/youngyangyang04/leetcode-master", name="項目倉庫")
def test_example_for_link():pass@allure.issue("PROJECT-123", "登錄失敗問題")
def test_login_for_issue():# 假設配置了issue鏈接模板:https://jira.company.com/browse/{issue}# 報告中將自動生成完整鏈接。pass@allure.testcase("TC-456", "登錄功能驗證")
def test_login_for_testcase():# 假設配置了testcase鏈接模板:https://testrail.company.com/index.php?/cases/view/{testcase}pass

運行結果:
在這里插入圖片描述

3.5 @allure.epic、@allure.feature 和 @allure.story裝飾器

Epic、Feature、Story通常用于行為驅動開發(BDD)中的分層結構。Epic是最大的范圍,通常對應大的業務目標;Feature是Epic下面的功能模塊;Story則是更小的用戶故事或功能點。Tag可能更靈活,用于標記測試的其他屬性,比如優先級、模塊等。

注解層級定位典型用途
@allure.epic最高層級,表示宏觀業務目標或大型項目模塊。描述系統級別的業務需求或長期目標。
@allure.feature中間層級,屬于某個epic下的功能模塊。描述一個獨立的功能模塊或子系統。
@allure.story最細層級,屬于某個feature下的具體用戶故事或功能點。描述具體的用戶場景或需求點(通常對應敏捷開發中的User Story)。
@allure.tag獨立標簽,無固定層級,靈活標記任意屬性。補充標記測試的附加屬性(如優先級、測試類型、模塊等)。
import allure@allure.epic("電商平臺")
@allure.feature("訂單管理")
@allure.story("用戶取消訂單")
@allure.tag("smoke", "high-priority")
def test_order_cancellation():pass@allure.feature("feature_1")
def test_example_for_feature():pass@allure.story("story_1")
def test_example_for_story():pass@allure.feature("feature_2")
@allure.story("story_1")
def test_example_mix_feature_and_story():pass@allure.feature("feature_2")
@allure.story("story_2")
def test_example_mix_feature_and_story_2():pass

可以使用如下命令行選項指定不同的測試集(可有多個,以逗號分隔

--allure-epics xx1,xx2
--allure-features xx1,xx2
--allure-stories xx1,xx2

如:

pytest --alluredir=./allure_results --allure-epics "電商平臺"
pytest --alluredir=./allure_results --allure-stories story_1,story_2
pytest --alluredir=./allure_results --allure-features feature_2 --allure-stories story_2 #--allure-features 與 --allure-stories 是“或”關系,滿足其一即被執行

在這里插入圖片描述

3.6 @allure.severity裝飾器

用于按嚴重性級別標記測試用例級別

import allure@allure.severity(allure.severity_level.BLOCKER)
def test_example_for_severity():pass@allure.severity(allure.severity_level.CRITICAL)
def test_example_for_severity():pass

其中severity_level的枚舉值如下:

class Severity(str, Enum):BLOCKER = 'blocker'CRITICAL = 'critical'NORMAL = 'normal'MINOR = 'minor'TRIVIAL = 'trivial'

可以使用如下命令行選項指定不同的測試集(可有多個,以逗號分隔

--allure-severities blocker,critical

注意:這個級別的關系是"或"
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71679.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71679.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端知識點---http.createHttp()的理解(arkts)

通俗易懂的例子&#xff1a;點外賣 &#x1f354;&#x1f964; 想象一下&#xff0c;你在家里點外賣&#xff0c;HTTP 請求就像是你和餐廳之間的溝通方式。 1?? 沒有 http.createHttp()&#xff1a;每次點餐都重新撥電話 &#x1f4de; 如果你每次點餐都重新撥打餐廳的電話…

大模型開發(五):P-Tuning項目——新零售決策評價系統(下)

P-Tuning項目——新零售決策評價系統&#xff08;下&#xff09; 0 前言1 P-Tuning原理2 數據處理 0 前言 上篇文章我們介紹了使用PET方式微調BERT模型&#xff0c;PET屬于提示詞微調的一種&#xff0c;另一種比較常見的提示詞微調是P-Tuning&#xff0c;我們今天在相同的項目…

分布式中間件:Redis介紹

目錄 Redis 概述 Redis 的特點 高性能 豐富的數據結構 持久化 分布式特性 簡單易用 Redis 的數據結構 字符串&#xff08;String&#xff09; 哈希&#xff08;Hash&#xff09; 列表&#xff08;List&#xff09; 集合&#xff08;Set&#xff09; 有序集合&…

在昇騰GPU上部署DeepSeek大模型與OpenWebUI:從零到生產的完整指南

引言 隨著國產AI芯片的快速發展&#xff0c;昇騰&#xff08;Ascend&#xff09;系列GPU憑借其高性能和兼容性&#xff0c;逐漸成為大模型部署的重要選擇。本文將以昇騰300i為例&#xff0c;手把手教你如何部署DeepSeek大模型&#xff0c;并搭配OpenWebUI構建交互式界面。無論…

系統思考—組織診斷

“未經過診斷的行動是盲目的。” — 托馬斯愛迪生 最近和一家教育培訓機構溝通時&#xff0c;發現他們面臨一個有意思的問題&#xff1a;每年招生都挺不錯&#xff0c;但教師的整體績效一直提升緩慢&#xff0c;導致師生之間存在長期的不匹配。管理層試了很多辦法&#xff0c;…

AI大模型學習(五): LangChain(四)

Langchian讀取數據庫 案例&#xff1a;在數據庫中表格數據上的問題系統的基本方法,將涵蓋使用鏈和代理的視線,通過查詢數據庫中的數據并得到自然語言的答案,兩者之間的主要區別在于,我們代理可以根據多次循環查詢數據庫以回答問題 實現思路: 1.將問題轉換成DSL查詢,模型將用…

人工智能與深度學習的應用案例:從技術原理到實踐創新

第一章 引言 人工智能(AI)作為21世紀最具變革性的技術之一,正通過深度學習(Deep Learning)等核心技術推動各行業的智能化進程。從計算機視覺到自然語言處理,從醫療診斷到工業制造,深度學習通過模擬人腦神經網絡的層次化學習機制,實現了對復雜數據的高效分析與決策。本…

支持向量機的深度解析:從理論到C++實現

支持向量機(SVM)是一種強大的監督學習算法,廣泛應用于分類和回歸任務。本文詳細探討了SVM的理論基礎,包括最大間隔分離超平面、軟間隔和核技巧(Kernel Trick)的數學原理,并通過LaTeX公式推導其優化目標。接著,我們用C++實現了一個簡單的線性SVM,包括梯度下降優化求解支…

企業如何選擇研發項目進度管理軟件?盤點15款實用工具

這篇文章介紹了以下工具: 1. PingCode&#xff1b; 2. Worktile&#xff1b; 3. 騰訊 TAPD&#xff1b; 4. 華為 DevCloud&#xff1b; 5. 億方云&#xff1b; 6. 阿里云效&#xff1b; 7. CODING 碼云&#xff1b; 8. 明道云&#xff1b; 9. 進度貓&#xff1b; 10. 輕流等。 …

c++: 容器vector

文章目錄 介紹initializer_list與string的不同底層總代碼 介紹 C 中的 vector 是一種序列容器&#xff0c;它允許你在運行時動態地插入和刪除元素。 vector 是基于數組的數據結構&#xff0c;但它可以自動管理內存&#xff0c;這意味著你不需要手動分配和釋放內存。 與 C 數組相…

Qt常用控件之表格QTableWidget

表格QTableWidget QTableWidget 是一個表格控件&#xff0c;行和列交匯形成的每個單元格&#xff0c;是一個 QTableWidgetItem 對象。 1. QTableWidget屬性 QTableWidget 的屬性只有兩個&#xff1a; 屬性說明rowCount當前行的個數。columnCount當前列的個數。 2. QTableW…

Golang學習筆記_47——訪問者模式

Golang學習筆記_44——命令模式 Golang學習筆記_45——備忘錄模式 Golang學習筆記_46——狀態模式 文章目錄 一、核心概念1. 定義2. 解決的問題3. 核心角色4. 類圖 二、特點分析三、適用場景1. 編譯器實現2. 財務系統3. UI組件系統 四、Go語言實現示例完整實現代碼執行結果 五、…

棧概念和結構

文章目錄 1. 棧的概念2. 棧的分類3. 棧的實現&#xff08;數組棧&#xff09;3.1 接口設計&#xff08;Stack.h&#xff09;3.2 接口實現&#xff08;Stack.c&#xff09;1&#xff09;初始化銷毀2&#xff09;棧頂插入刪除3&#xff09;棧頂元素、空棧、大小 3.3 完整代碼Stac…

GitCode 助力 vue3-element-admin:開啟中后臺管理前端開發新征程

源碼倉庫&#xff1a; https://gitcode.com/youlai/vue3-element-admin 后端倉庫&#xff1a; https://gitcode.com/youlai/youlai-boot 開源助力&#xff0c;開啟中后臺快速開發之旅 vue3-element-admin 是一款精心打造的免費開源中后臺管理前端模板&#xff0c;它緊密貼合…

算法.習題篇

算法 — 地大復試 模擬 while循環和MOD循環計數 1.約瑟夫問題 http://bailian.openjudge.cn/practice/3254 using namespace std;bool isNoPeople(vector<bool> c)//判斷當前數組是否一個小孩都沒有了 {bool nopeople true;for (bool ival : c){if ( ival true)nop…

大白話JavaScript實現一個函數,將字符串中的每個單詞首字母大寫。

大白話JavaScript實現一個函數&#xff0c;將字符串中的每個單詞首字母大寫。 答題思路 理解需求&#xff1a;要寫一個函數&#xff0c;它能接收一個字符串&#xff0c;然后把這個字符串里每個單詞的第一個字母變成大寫。分解步驟 拆分單詞&#xff1a;一般單詞之間是用空格隔…

react中如何使用使用react-redux進行數據管理

以上就是react-redux的使用過程&#xff0c;下面我們開始優化部分&#xff1a;當一個組件只有一個render生命周期&#xff0c;那么我們可以改寫成一個無狀態組件&#xff08;UI組件到無狀態組件&#xff0c;性能提升更好&#xff09;

廣告營銷,會被AI重構嗎?

DeepSeek設計&#xff0c;即夢AI繪圖&#xff0c;剪映成片。 DeepSeek的熱度還在高開瘋走。 用戶對于各個場景下DS應用的探索也還在持續&#xff0c;各種DS的模式被挖掘出來&#xff0c;超級個體們開始給手下的大模型團隊進行分工&#xff0c;實踐出各種場景下最佳的排列組合方…

國產編輯器EverEdit - 宏功能介紹

1 宏 1.1 應用場景 宏是一種重復執行簡單工作的利器&#xff0c;可以讓用戶愉快的從繁瑣的工作中解放出來&#xff0c;其本質是對鍵盤和菜單的操作序列的錄制&#xff0c;并不會識別文件的內容&#xff0c;屬于無差別無腦執行。 特別是對一些有規律的重復按鍵動作&#xff0c;…

vscode離線配置遠程服務器

目錄 一、前提 二、方法 2.1 查看vscode的commit_id 2.2 下載linux服務器安裝包 2.3 安裝包上傳到遠程服務器&#xff0c;并進行文件解壓縮 三、常見錯誤 Failed to set up socket for dynamic port forward to remote port&#xff08;vscode報錯解決方法&#xff09;-C…