用 Pytest+Allure 生成漂亮的 HTML 圖形化測試報告


對於軟件測試來說,測試報告是非常重要的工作產出。一個漂亮、清晰、格式規範的測試報告,能夠減少開發人員和測試人員的溝通成本。


本篇文章將介紹如何使用開源的測試報告生成框架 Allure 生成規範、格式統一、美觀的測試報告。

通過這篇文章的介紹,你將能夠:

  • 將 Allure 與 Pytest 測試框架相結合;
  • 如何定製化測試報告內容
  • 執行測試之後,生成 Allure 格式的測試報告。

1、Allure測試報告介紹

Allure 是一款非常輕量級並且非常靈活的開源測試報告生成框架。它支持絕大多數測試框架, 例如 TestNG、Pytest、JUint 等。它簡單易用,易於集成。下面就 Pytest 如何與 Allure 集成做詳細介紹。


2、Pytest 框架集成 Allure

Pytest 是 Python 的單元測試框架,非常方便和易用。強烈推薦對於用 Python 進行測試工作的小夥伴使用這個測試框架,相比與 Python 自帶的 UnitTest 好用太多太多。今天我們主要是介紹如何將測試報告生成工具 Allure 集成到 Pytest 中。

2.1 安裝 Allure Pytest Adaptor

Allure Pytest Adaptor 是 Pytest 的一個插件,通過它我們可以生成 Allure 所需要的用於生成測試報告的數據。安裝 pytest-allure-adaptor 插件方法:

<code>$ pip install pytest-allure-adaptor/<code>

2.2 使用Allure Pytest Adaptor改造基於Pytest的測試用例

pytest-allure-adaptor 官網中詳細介紹了 pytest-allure-adaptor 所具有的功能。本篇文章不會再翻譯一遍,而是從實際入手,給大家介紹如何將其應用到自己的框架中。

為了使用 Allure 生成報告,需要在 conftest.py 和測試腳本中加入 Allure 特性。

首先,conftest.py 中可以通過 allure.environment 方法將測試環境的信息輸出到報告中,比如將測試時用的 host 和測試用的 browser 添加到測試報告中:

<code>#!/usr/bin/env python
# coding=utf-8

import pytest
import allure
import yaml

@pytest.fixture(scope="session", autouse=True)
def env(request):
    """
    Parse env config info
    """
    root_dir = request.config.rootdir
    config_path = '{0}/config/env_config.yml'.format(root_dir)
    with open(config_path) as f:
        env_config = yaml.load(f) # 讀取配置文件

    allure.environment(host=env_config['host']['domain']) # 測試報告中展示host
    allure.environment(browser=env_config['host']['browser']) # 測試報告中展示browser

    return env_config/<code>

接著,在測試腳本中,添加 allure 特性,直接看下面的腳本,我通過在腳本中添加註釋的方式給大家解釋 allure 特性的用途。比如測試腳本是

test_shopping_trolley.py:

<code>#!/usr/bin/env python
# coding=utf-8

import pytest
import allure


@allure.feature('購物車功能')  # feature定義功能
class TestShoppingTrolley(object):
    @allure.story('加入購物車')  # story定義用戶場景
    def test_add_shopping_trolley(self):
        login('劉春明', '密碼')  # 調用“步驟函數”
        with allure.step("瀏覽商品"):  # 將一個測試用例分成幾個步驟,將步驟打印到測試報告中,步驟2
            allure.attach('商品1', '劉春明')  # attach可以打印一些附加信息
            allure.attach('商品2', 'liuchunming')
        with allure.step("點擊商品"):  # 將一個測試用例分成幾個步驟,將步驟打印到測試報告中,步驟3
            pass
        with allure.step("校驗結果"):
            allure.attach('期望結果', '添加購物車成功')
            allure.attach('實際結果', '添加購物車失敗')

            assert 'success' == 'failed'

    @allure.story('修改購物車')
    def test_edit_shopping_trolley(self):
        pass

    @pytest.mark.skipif(reason='本次不執行')
    @allure.story('刪除購物車')
    def test_delete_shopping_trolley(self):
        pass


@allure.step('用戶登錄')  # 還可以將一個函數作為一個步驟,調用此函數時,報告中輸出一個步驟,步驟名字通常是函數名,我把這樣的函數叫“步驟函數”
def login(user, pwd):
    print(user, pwd)/<code>

上面使用了Allure的幾個特性:

  • @allure.feature # 用於定義被測試的功能,被測產品的需求點
  • @allure.story # 用於定義被測功能的用戶場景,即子功能點
  • with allure.step # 用於將一個測試用例,分成幾個步驟在報告中輸出
  • allure.attach # 用於向測試報告中輸入一些附加的信息,通常是一些測試數據信息
  • @pytest.allure.step # 用於將一些通用的函數作為測試步驟輸出到報告,調用此函數的地方會向報告中輸出步驟

3、生成 Allure 測試報告

測試腳本中添加了 Allure 特性之後,在執行測試的時候需要先生成 Allure 報告所需要的測試結果數據。在 py.test 執行測試的時候,指定 –alluredir 選項及測試數據保存的目錄即可:

<code>$ py.test test/ --alluredir ./result//<code>

./result/ 中保存了本次測試的結果數據。另外,還可以執行指定 features 或者 stories 執行一部分測試用例,比如執行‘購物車功能’下的‘加入購物車’子功能的測試用例:

<code>$ py.test test/ --allure_features='購物車功能' --allure_stories='加入購物車'/<code>

接下來我們可以利用上面命令產生的測試數據生成 Allure 測試報告了。生成 Allure 測試報告有兩種方式:一個是命令行方式,一個是利用 Jenkins 插件。下面分別介紹。

3.1 命令行方式

3.1.1 安裝命令行工具

首先需要安裝命令行工具,如果是 Mac 電腦,推薦使用 Homebrew 安裝。

<code>$ brew install allure/<code>
3.1.2 生成測試報告

安裝完成後,通過下面的命令將 ./result/ 目錄下的測試數據生成測試報告:

<code>$ allure generate ./result/ -o ./report/ --clean/<code>

這樣在 ./report/ 目錄下就生成了 Allure 的測試報告了。–clean 目的是先清空測試報告目錄,再生成新的測試報告。

3.1.3 打開測試報告

通過下面的命令打開測試報告:

<code>$ allure open -h 127.0.0.1 -p 8083 ./report//<code>

本機的瀏覽器將打開網頁

http://127.0.0.1:8083/index.html

展示測試報告。

3.1.4 測試報告解讀

打開生成的測試報告後,瀏覽器被自動調起,展示測試報告。下面我們分別看看測試報告的幾個頁面。

1. 首頁

用 Pytest+Allure 生成漂亮的 HTML 圖形化測試報告

首頁中展示了本次測試的測試用例數量,成功用例、失敗用例、跳過用例的比例,測試環境信息,SUITES,FEATURES BY STORIES等基本信息,當與Jenkins做了持續置成後,TREND區域還將顯示,歷次測試的通過情況。

首頁的左邊欄,還從不同的維度展示測試報告的其他信息,大家可以自己點進去看看。


2. Behaviors

接下來,我們點擊一下FEATURES BY STORIES,將進入Behaviors頁面,這個頁面按照FEATURES和 STORIES展示測試用例的執行結果:

用 Pytest+Allure 生成漂亮的 HTML 圖形化測試報告


從這個頁面可以看到“購物車功能”這個FEATURES包含的三個STORIES的測試用例執行情況。


3. SuitesAllure測試報告將每一個測試腳本,作為一個Suite。在首頁點擊Suites區域下面的任何一條Suite,都將進入Suites頁面。

用 Pytest+Allure 生成漂亮的 HTML 圖形化測試報告

這個頁面,將腳本的目錄結果展示本次所有的測試用例執行情況。

4. 測試用例頁面

在Suites頁面上點擊任何一條測試用例,Suites頁面的右側將展示這條用例的詳細執行情況。


用 Pytest+Allure 生成漂亮的 HTML 圖形化測試報告


從這個頁面可以看到測試用例執行的每一個步驟,以及每個步驟的執行結果。測試用例為什麼失敗,這裡一目瞭然。

3.2 利用Jenkins插件方式

3.2.1 安裝 Allure Plugin

首先需要給Jenkins安裝Allure Plugin。在Jenkins的插件管理頁面,搜索“allure”,在搜索結果頁,選擇“Allure Jenkins Plugin”進行安裝。

安裝完成之後重啟一下Jenkins。在Jenkins的“全局工具管理”頁面,找到Allure Commandline模塊進行安裝:

用 Pytest+Allure 生成漂亮的 HTML 圖形化測試報告

點擊後,彈出下面的頁面,輸入Allure的命令別名和版本後,點擊Apply 和Save。


用 Pytest+Allure 生成漂亮的 HTML 圖形化測試報告

3.2.2 配置Job

按照下面的圖示,在Excute Shell和構建後操作部分寫上對應的配置信息,即可。

用 Pytest+Allure 生成漂亮的 HTML 圖形化測試報告

這樣,我們的Jenkins Job執行完測試用例時候,將在Job的主頁面上看到Allure Report圖標,點擊進去就看到了Allure Report報告。

用 Pytest+Allure 生成漂亮的 HTML 圖形化測試報告

4、團隊實踐建議

團隊內部可能不同項目使用的測試框架不一樣,每個測試框架生成的測試報告也不一樣。但由於 Allure 報告支持很多測試框架,通過 Allure 可以生成格式一致的測試報告,這就對外提供格式一致的測試報告提供了方便。

建議:團隊內部都採用 Allure 生成測試報告。由於團隊內部有的項目採用的 Java+TestNG 的測試架構,後面有時間,也介紹一下如何在 TestNG 框架如何集成 Allure。


分享到:


相關文章: