前言
allure可以輸出非常精美的測試報告,也可以和pytest進行完美結合,不僅可以渲染頁面,還可以控制用例的執行。下面就對allure的使用進行一個詳細的介紹和總結。
需要准備的環境:
- python
- pytest
- allure-pytest
- allure工具
一、allure用例描述
使用方法 | 參數值 | 參數說明 |
---|---|---|
@allure.epic() | epic描述 | 敏捷里面的概念,對用例或用例集進行描述分類 |
@allure.feature() | 模塊名稱 | 與epic類似,只是比epic級別低 |
@allure.story() | 用戶故事 | 與epic類似,只是比feature級別低 |
@allure.title(用例的標題) | 用例的標題 | 重命名html報告的用例名稱 |
@allure.testcase() | 測試用例的鏈接地址 | 與link類似 |
@allure.issue() | 缺陷 | 與link類似 |
@allure.description() | 用例描述 | 進行測試用例的描述 |
@allure.step() | 操作步驟 | 進行測試用例的步驟 |
@allure.severity() | 用例等級 | blocker,critical,normal,minor,trivial |
@allure.link() | 鏈接 | 定義一個鏈接,在測試報告展現(推薦使用) |
@allure.attachment() | 附件 | 報告添加附件 |
二、allure實戰demo
# -*- coding:utf-8 -*-
"""
@File: allure_demo.py
@Author: 三叔測試筆記
@Time : 2022/3/18 8:34
@Description: allure使用介紹
"""
import pytest
import allure
from base.log import Logger
logger = Logger(logger_name='allure', level='error').get_logger()
@pytest.fixture(scope="session") # 用例前置操作
def login_fixture():
# 比如登錄獲取token操作
return "token:xx"
@allure.step("用例步驟1")
def step_1():
logger.info("用例操作---------------步驟1")
return True
@allure.step("用例步驟2")
def step_2():
logger.info("用例操作---------------步驟2")
return False
@allure.step("用例步驟3")
def step_3():
logger.info("用例操作---------------步驟3")
return True
@allure.epic("可以對用例或用例集進行描述分類(若出現多個時,內容一致則自動歸為一類)")
@allure.feature("對用例集或用例進行描述分類---與epic類似,只是比epic級別低")
@allure.story("對用例集或用例進行描述分類---與epic類似,只是比feature級別低")
class TestAllureDemo:
@allure.testcase("https://xxx/testcase/list",
name='用例鏈接testcase') # 為了更好的鏈接到問題分類或者bug、測試用例地址中(url、name兩個參數,可不填寫name;可以用@allure.link)
@allure.link("https://xxx/testcase/list", name='用例鏈接link') # 與testcase沒有多大區別,從可讀性角度還是建議選擇@allure.link
@allure.issue("https://xxx/testcase/list", name='用例鏈接issue') # 與testcase區別在於有小蟲子圖標
@allure.title("用例的標題") # 可參數化標題
@allure.story("用例分類:1") # 可參數化標題
@allure.severity("critical") # 用例等級(blocker critical normal minor trivial)
def test_case_1(self, login_fixture):
"""
1.用例描述
2.用例步驟
3.預期結果
"""
logger.info(login_fixture) # 獲取用例前置的信息,比如登錄token
assert step_1()
assert step_2()
@allure.story("用例分類:2")
def test_case_2(self, login_fixture):
logger.info("測試用例2")
assert step_1()
assert step_3()
@allure.epic("冒煙自動化用例")
class TestDemo2:
@allure.story("用例分類:3")
def test_case_3(self, login_fixture):
logger.info("測試用例3")
step_1()
@allure.story("用例分類:4")
def test_case_4(self, login_fixture):
logger.info("測試用例4")
step_3()
三、allure的命令行參數
pytest執行用例時可以加上allure的標記參數,可以控制執行哪些用例。
--allure-severities=SEVERITIES_SET
Comma-separated list of severity names. Tests only
with these severities will be run. Possible values
are: blocker, critical, normal, minor, trivial.
--allure-epics=EPICS_SET
Comma-separated list of epic names. Run tests that
have at least one of the specified feature labels.
--allure-features=FEATURES_SET
Comma-separated list of feature names. Run tests that
have at least one of the specified feature labels.
--allure-stories=STORIES_SET
Comma-separated list of story names. Run tests that
have at least one of the specified story labels.
--allure-link-pattern=LINK_TYPE:LINK_PATTERN
Url pattern for link type. Allows short links in test,
like 'issue-1'. Text will be formatted to full url
with python str.format().
實例如下:
# 選擇運行你要執行epic的用例
pytest --alluredir ./report/allure --allure-epics=epic對大Story的一個描述性標簽
# 選擇運行你要執行features的用例
pytest --alluredir ./report/allure --allure-features=模塊2
# 選擇運行你要執行features的用例
pytest --alluredir ./report/allure --allure-stories="用戶故事:1"
四、執行腳本,allure生成報表,並啟動報告
運行方式一:
-
命令行模式下運行pytest,生產測試結果文件
pytest demo.py --alluredir ./report/allure -
allure程序啟動已經生產的文件
allure serve ./report/allure
運行方式二:
- 編寫啟動方法,運行pytest
pytest.main([allure_demo.py, "--alluredir", "report/result"])
- 使用進程,開啟allure服務
import subprocess
subprocess.call('allure generate report/result/ -o report/html --clean', shell=True)
subprocess.call('allure open -h 127.0.0.1 -p 9999 ./report/html', shell=True)
(兩種方法都需要安裝allure工具)