Allure快速入門

Surpassme發表於2021-10-31

1.關於Allure

    Allure框架是一個靈活輕量級多語言測試報告工具,它不僅可以以WEB的方式展示簡介的測試結果,而且允許參與開發過程的每個人從日常執行的測試中最大限度的提取有用資訊。
    Allure報告簡化了常見缺陷的統計:失敗的測試可以分為BUG和被中斷的測試,還可以配置日誌、步驟、fixture、附件、計時、執行歷史以及與BUG管理系統整合,所以,通過以上配置,所有負責的開發人員和測試人員可以儘可能的掌握測試資訊。

2.Allure安裝

  • 1.下載JDK,下載地址如下所示:
https://www.oracle.com/java/technologies/downloads/
  • 2.設定環境變數

    以Windows為例,如下所示:

JAVA_HOME=D:\Program Files\Java
Path中新增%JAVA_HOME%\bin

    在命令列中分別輸入以下命令,不報錯,即代表設定成功

C:\Users\admin>java -version
java version "17.0.1" 2021-10-19 LTS
Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing)

C:\Users\admin>javac -version
javac 17.0.1
  • 3.下載Allure命令列,下載地址如下所示:
https://github.com/allure-framework/allure2/releases/
  • 4.將下載到本地的allure壓縮包解壓到指定目錄,並新增相應的環境變數
Path=D:\Program Files\Allure\allure-2.16.0\bin

    在命令列中輸入allure,不出現報錯即可

Usage: allure [options] [command] [command options]
  Options:
    --help
      Print commandline help.
    -q, --quiet
      Switch on the quiet mode.
      Default: false
      ...

3.Allure用法

3.1 語法格式

 allure [options] [command] [command options]

3.2 常用option和command

  • Options

    • -q, --quiet:切換到靜默模式,預設關閉
    • -v, --verbose:切換詳細日誌模式,預設關閉
  • Commands

    • generate:生成allure的HTML報告
      • -c, --clean:在生成新報告前,清理之前生成報告的目錄,預設關閉
      • --config:Allure命令列配置檔案路徑,如果指定將覆蓋--profile和--configDirectory所設定的值
      • --configDirectory:Allure命令列配置檔案目錄,預設值為: ALLURE_HOME目錄
      • --profile:Allure命令列配置檔案
      • -o, --report-dir, --output:指定生成報告的目錄,預設allure-report
    • serve:啟動serve並檢視報告
      • 基本語法:serve [options] allure結果目錄
      • --config:Allure命令列配置檔案路徑,如果指定將覆蓋--profile和--configDirectory所設定的值
      • --configDirectory:Allure命令列配置檔案目錄,預設值為: ALLURE_HOME目錄
      • --profile:Allure命令列配置檔案
      • -h, --host:指定訪問報告的web伺服器地址
      • -p, --port:指定訪問報告的web伺服器地埠,預設為0
    • open:檢視報告
      • 基本語法:open [options] allure報告目錄
      • -h, --host:指定訪問報告的web伺服器地址
      • -p, --port:指定訪問報告的web伺服器地埠,預設為0

1.generate常用引數主要為-c和-o
2.open常用引數主要為-h和-p

4.Allure報告結構

  • Overview

    報告總覽

  • Categories

    類別,允許使用者建立自定義的類別。預設分為失敗和錯誤,在執行結果是其中一類時則被歸到相應的類中。

  • Suites

    測試套件,即所有用例的層級關係,可以按package/module/class/method進行查詢

  • Graphs

    測試結果圖形化,包含測試用例的執行結果分佈圖、耗時、優先順序等

  • Timeline

    時序圖,將測試用例的執行順序和測試時間以視覺化形式展現出來

  • Behaviors

    行為驅動,根據Epic、Feature、Story來對測試用例進行分組

  • Packages

    用例按Package進行分組,根據測試結果按不同的Package進行分組,並以樹形結構進行展示

5.Allure特性

5.1 Flaky

    該特性用來標識不夠穩定的測試用例集,即有些用例執行時,時而成功時而失敗。其用意主要如下所示:

  • 當用例失敗的情況下,能夠獲取足夠詳細的資訊
  • 不標記為Flaky的話,可能就要禁用這些測試

    用法如下所示:

@Flaky
public void aTestWhichFailsFromTimeToTime {
     ...
}

5.2 Environment

    Environment表示環境變數引數,用來顯示本次測試執行環境的引數。在生成allure-result結果前,通過建立environment.propertiesenvironment.xml檔案,並把檔案放置到allure-result目錄中。

environment.properties

Browser=Chrome
Browser.Version=95.0
Stand=Production

environment.xml

<environment>
    <parameter>
        <key>Browser</key>
        <value>Chrome</value>
    </parameter>
    <parameter>
        <key>Browser.Version</key>
        <value>95.0</value>
    </parameter>
    <parameter>
        <key>Stand</key>
        <value>Production</value>
    </parameter>
</environment>

environment.properties和environment.xml不允許存在中文

5.3 Categories

    預設分類分為兩種,如下所示:

  • Product defects:產品缺陷,測試結果為失敗(failed tests)
  • Test defects:測試缺陷,測試結果為錯誤(broken tests)

    除了預設分類之外,也可以自定義建立分類。通過建立categories.json檔案,在生成allure-result結果前,提前放置到該目錄即可。

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(可選項):測試用例執行的錯誤堆疊資訊,預設是 .* ,通過正則進行匹配

6.Allure與Pytest整合

6.1 Allure行為驅動

    allure除了支援Pytest自帶的特性之外(fixture、parametrize、xfail、skip),自身也有非常強大的特性,下面來詳細介紹。

6.1.1 @allure.step

    allure報告允許對每個測試用例的執行步驟進行詳細說明,該功能通過@allure.step()裝飾器來實現

@allure.step()只有一個引數,就是title

6.1.2 @allure.attach

    allure報告支援新增附件並進行展示,可用以補充測試結果,第一種基本語法如下所示:

allure.attach(body, name, attachment_type, extension) 
  • body:要顯示的附件內容
  • name:附件名稱
  • attachment_type:附件型別,屬於allure.attachment_type裡面的一種
  • extension:附件副檔名

allure.attachment_type主要有TEXT、CSV、HTML、XML、JSON、YAML、PCAP、PNG、JPG、SVG、GIF、BMP、MP4、OGG、WEBM、PDF等

    第二種基本語法如下所示:

allure.attach.file(source, name, attachment_type, extension) 
  • source:上傳檔案所在路徑
  • 其他引數和上面引數一致

6.1.3 @allure.description

    給用例新增詳細的描述,常見語法有三種:

  • 1.@allure.description(str)

  • 2.在測試用例函式宣告下方新增 """ """

  • 3.@allure.description_html(str)

相當於傳一個HTML程式碼組成的字串,類似 allure.attach()中傳HTML

方式一和方式二作用和效果是一樣的

6.1.4 @allure.title

    新增測試用例標題,支援佔位符傳遞關鍵字引數(動態標題,結合(@pytest.mark.parametrize使用)

如果沒有新增 @allure.title()的話,測試用例的標題預設就是函式名

6.1.5 @allure.link&@allure.issue&@allure.testcase

    三個裝飾器原始碼如下所示:

def link(url, link_type=LinkType.LINK, name=None):
    return safely(plugin_manager.hook.decorate_as_link(url=url, link_type=link_type, name=name))


def issue(url, name=None):
    return link(url, link_type=LinkType.ISSUE, name=name)


def testcase(url, name=None):
    return link(url, link_type=LinkType.TEST_CASE, name=name)
  • issue()和testcase()呼叫的也是link(),只是link_type不一樣
  • url:跳轉的連結,必傳引數
  • name:顯示在allure報告的名字,如果不傳就是顯示完整的連結

出現三個裝飾器的原因是為了更好地將連結分類訪問連線Bug連結測試用例連結

6.1.6 BDD標記裝飾器

    在pytest中,可以使用@pytest.mark進行標識,但並不會顯示在allure報告上,而allure也提供了三種型別的標記裝飾器,它們則是可以顯示在allure報告上的,如下所示:

  • @allure.epic:敏捷裡面的概念,往下是 feature
  • @allure.feature:功能點的描述,理解成模組往下是 story
  • @allure.story:故事,往下是 title

1.story 是 feature 的子集,當測試用例有 @allure.feature、@allure.story 時,在報告上會先顯示 feature,點開之後再顯示 story

2.如果不加 @allure.feature、@allure.story 時,在Behaviors欄目下,測試用例都不會分類顯示

    用命令列方式執行時,可以指定執行某個story、feature、epic

--allure-epics
--allure-features
--allure-stories

6.1.7 @allure.severity

    allure提供了用例級別,因此在allure報告可以清晰看到不同級別用例的缺陷數量。詳細等級如下所示:

級別 含義 詳細解釋
blocker 阻塞缺陷 無法執行下一步操作等
critical 嚴重缺陷 功能點缺失或直接崩潰等
normal 一般缺陷 邊界值問題,格式錯誤等
minor 次要缺陷 UI類錯誤等
trivial 輕微缺陷 必填項無提示或提示資訊不規範和統一等

6.2 Allure和Pytest安裝

    執行以下命令安裝即可:

pip install -U allure-pytest pytest

6.3 Allure與Pytest整合示例

6.3.1 allure.step示例

    示例程式碼如下所示:

import pytest
import allure
import os

@allure.step("這是第一步")
def inputUrl(url:str):
    print(f"輸入的網址為:{url}")

@allure.step(title="這是第二步")
def locateElement(xpath:str):
    print(f"查詢元素的xpath是{xpath}")

@allure.step("這是第三步")
def sendElement():
    inputUsernameAndPasswd("Surpass","password")

@allure.step("這是第四步,{username},{password}")
def inputUsernameAndPasswd(username:str,password:str):
    print(f"輸入的使用者名稱和密碼分別為:{username},{password}")

@allure.step("這是第五步")
def test_login():
    inputUrl("https://www.baidu.com")
    locateElement('//*[@id="su"]')
    sendElement()

    生成結果如下所示:

6.3.2 allure.attach示例

    示例程式碼如下所示:

import pytest
import allure
import os

def attach01(body,name,attachment_type=allure.attachment_type.TEXT):
    """
    附件為內容
    """
    allure.attach(body,name,attachment_type=attachment_type)

def attach02(filePath,name,attachment_type=allure.attachment_type.TEXT):
    """
    附件為檔案
    """
    allure.attach.file(filePath,name,attachment_type=attachment_type)

def test_attach01():
    body = "<h3>方法一:測試allure附件內容為HTML</h3>"
    name = "attach-01-test"
    attach01(body,name,attachment_type=allure.attachment_type.HTML)


def test_attach02():
    filePath=os.path.join(os.getcwd(),"attach","sample.png")
    name="attach-02-test"
    attach02(filePath,name,attachment_type=allure.attachment_type.PNG)

    生成結果如下所示:

6.3.3 allure.description示例

    示例程式碼如下所示:

import pytest
import allure


def test_allureDescription01():
    """這是一個allure.description示例01"""
    assert (7+8)==15

@allure.description("這是一個allure.description示例02")
def test_allureDescription02():
    assert (7+8)==15

@allure.description_html("""
  <h2>這是一個
    <font size=15>allure.description </font>示例03
   </h2>
  """)
def test_allureDescription03():
    assert (7+8)==15

    生成結果如下所示:

6.3.4 allure.title示例

    示例程式碼如下所示:

import pytest
import allure

@allure.title("登入")
@pytest.fixture(scope="session")
def loginData(request):
    params=request.param
    name=params.get("name","")
    password=params.get("password","")
    code=params.get("code","")
    print(f"param is {name},{password},{code}")
    yield name,password,code

@allure.title(f"登入成功")
@pytest.mark.parametrize("loginData",[
    {"name":"Surpass","password":"123456","code":"SHCQ"},
    {"name":"Diana","password":"20210227","code":"FKDT"}
  ],indirect=True)
def test_loginSucces(loginData):
    name,password,code=loginData
    body=f"使用者名稱:{name},密碼:{password},驗證碼:{code}"
    name="allure.title.test"
    allure.attach(body,name,attachment_type=allure.attachment_type.TEXT)

    生成結果如下所示:

6.3.5 allure.link&allure.issue&allure.testcase示例

    示例程式碼如下所示:

import pytest
import allure


@allure.link("https://www.google.com")
def test_basicLink():
    pass

@allure.link(url="https://www.surpassme.com",name="basicLink")
def test_basicLinkWithName():
    pass

@allure.issue(url="https://www.baidu.com",name="issueLink")
def test_issueLink():
    pass

@allure.testcase(url="https://www.zentao.net",name="testcaseLink")
def test_testcaseLink():
    pass

    生成結果如下所示:

6.3.6 BDD標記裝飾器示例

    示例程式碼如下所示:

import pytest
import allure

@allure.step("第一步")
def firstStep():
    print("這是第一步")

@allure.step("第二步")
def secondStep():
    print("這是第二步")

@allure.step("第N步")
def nStep():
    print("第N步")

@allure.epic("總體描述")
@allure.feature("測試模組A")
class TestEpicAndFeatureAndStory():
    @allure.issue("http://www.surpamssme.com/issue/id=0227")
    @allure.testcase("http://www.surpassme.com/testcase/id=0227")
    @allure.title("功能A-用例-01")
    @allure.story("測試功能A")
    @allure.description("Surpassme 測試驗證")
    def test_CaseA01(self):
        print("test_Case01")
        firstStep()
        secondStep()

    @allure.story("測試功能A")
    @allure.title("功能A-用例-02")
    def test_CaseA02(self):
        pass

    @allure.story("測試功能A")
    @allure.title("功能A-用例-03")
    def test_CaseA03(self):
        pass

    @allure.story("測試功能B")
    @allure.title("功能B用例-01")
    def test_CaseB01(self):
        pass

    @allure.story("測試功能B")
    @allure.title("功能B用例-03")
    def test_CaseB02(self):
        pass

    生成結果如下所示:

6.3.7 allure.severity

    示例程式碼如下所示:

import allure

@allure.title("blocker")
@allure.severity("blocker")
def test_Case01():
    pass

@allure.title("critical")
@allure.severity("critical")
def test_Case02():
    pass

@allure.title("normal")
@allure.severity("normal")
def test_Case03():
    pass

@allure.title("minor")
@allure.severity("minor")
def test_Case04():
    pass

@allure.title("trivial")
@allure.severity("trivial")
def test_Case05():
    pass

    生成結果如下所示:

原文地址:https://www.cnblogs.com/surpassme/p/15491632.html

本文同步在微信訂閱號上釋出,如各位小夥伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼新增關注: