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
注意:這個級別的關系是"或"