如果你還想從頭學起Pytest,可以看看這個系列的文章哦!
https://www.cnblogs.com/poloyy/category/1690628.html
前言
- 前面幾篇文章主要介紹了allure的特性,這篇文章我們就來講下allure的標記用法
- 有時候我們寫pytest的時候,會用到 @pytest.mark 但並不會顯示在allure報告上
- 而allure也提供了三種類型的標記裝飾器,它們是可以顯示在allure報告上的
allure的標記裝飾器
- BDD樣式的標記裝飾器
- 優先級(嚴重程度)標記裝飾器
- 自定義標記裝飾器
BDD標記裝飾器
提供了三個裝飾器
- @allure.epic:敏捷里面的概念,定義史詩,往下是 feature
- @allure.feature:功能點的描述,理解成模塊往下是 story
- @allure.story:故事,往下是 title
栗子一(story+feature)
測試代碼
#!/usr/bin/env python # -*- coding: utf-8 -*- """ __title__ = __Time__ = 2020-04-19 14:27 __Author__ = 小菠蘿測試筆記 __Blog__ = https://www.cnblogs.com/poloyy/ """ import allure def test_without_any_annotations_that_wont_be_executed(): pass @allure.story('epic_1') def test_with_epic_1(): pass @allure.story('story_1') def test_with_story_1(): pass @allure.story('story_2') def test_with_story_2(): pass @allure.feature('feature_2') @allure.story('story_2') def test_with_story_2_and_feature_2(): pass
無標記裝飾器
我們先看看沒有設置標記裝飾器時,allure報告是咋樣的


添加裝飾器
加了 @allure.feature 和 @allure.story 之后的 allure 報告


知識點
- story 是 feature 的子集,當測試用例有 @allure.feature、@allure.story 時,在報告上會先顯示 feature,點開之后再顯示 story【可以想象成,安徒生童話(feature)有很多個童話故事(story)】
- 如果不加 @allure.feature、@allure.story 時,在Behaviors欄目下,測試用例都不會分類顯示,當用例多的時候可能看的花里胡哨
栗子二
前言
這里應用了包括前面所講的全部裝飾器
測試代碼
#!/usr/bin/env python # -*- coding: utf-8 -*- """ __title__ = __Time__ = 2020/10/27 19:44 __Author__ = 小菠蘿測試筆記 __Blog__ = https://www.cnblogs.com/poloyy/ """ import os import allure import pytest @pytest.fixture(scope="session") def login_fixture(): print("=== 前置登錄 ===") @allure.step("步驟1") def step_1(): print("操作步驟---------------1") @allure.step("步驟2") def step_2(): print("操作步驟---------------2") @allure.step("步驟3") def step_3(): print("操作步驟---------------3") @allure.epic("epic 相當於總體描述") @allure.feature("測試模塊") class TestAllureALL: @allure.testcase("https://www.cnblogs.com/poloyy/", '測試用例,點我一下') @allure.issue("https://www.cnblogs.com/poloyy/p/12219145.html", 'Bug 鏈接,點我一下') @allure.title("用例的標題") @allure.story("story one") @allure.severity("critical") def test_case_1(self, login_fixture): """ 小菠蘿測試筆記地址:https://www.cnblogs.com/poloyy/ """ print("測試用例1") step_1() step_2() @allure.story("story two") def test_case_2(self, login_fixture): print("測試用例2") step_1() step_3() @allure.epic("另一個 epic") @allure.feature("查找模塊") class TestAllureALL2: @allure.story("story three") def test_case_3(self, login_fixture): print("測試用例3") step_1() @allure.story("story four") def test_case_4(self, login_fixture): print("測試用例4") step_3() if __name__ == '__main__': pytest.main(['-s', '-q', '--alluredir', './allure']) os.system('allure -c ./allure') os.system('allure serve ./allure-report')
allure 報告


總結
倘若是用 pytest+allure 寫項目,又想用 @pytest.mark.xxx 來給不同的用例添加標記的話,可以嘗試用 @allure.feature、@allure.story 替換,畢竟可以顯示在報告上
提出問題
用命令行方式運行時,可以指定運行某個story、feature、epic嗎?
自問自答
當然可以,跟 @pytest.mark.xxx 指定標簽運行的方式沒啥區別,添加下面的命令行參數就行
- --allure-epics
- --allure-features
- --allure-stories
舉栗子
# 只運行 epic 名為 test 的測試用例 pytest --alluredir ./report/allure --allure-epics=test # 只運行 feature 名為 模塊 的測試用例 pytest --alluredir ./report/allure --allure-features=模塊 # 只運行 story1、story2 的測試用例(也可以不用=號 空格就行了哦) pytest tests.py --allure-stories story1,story2 # 指定 feature+story pytest tests.py --allure-features feature2 --allure-stories story2
