前言
大概兩個月前寫過一篇《【測試設計】使用jenkins 插件Allure生成漂亮的自動化測試報告》的博客,但是其實Allure首先是一個可以獨立運行的測試報告生成框架,然后才有了Jenkins的集成插件。
這一次主要介紹如何把Allure集成到Python的Pytest單元測試框架中。
依賴包安裝
Pytest
Pytest是Python的單元測試框架,非常方便和易用。可以規模化以及編寫更加復雜的測試用例。安裝方法如下:
pip install pytest
Allure Pytest Adaptor
Allure Pytest Adaptor是Pytest的一個插件,通過它我們可以生成Allure所需要的用於生成測試報告的數據。安裝方法如下:
pip install pytest-allure-adaptor
改造基於Pytest的測試用例
為了使用Allure生成報告,需要在conftest.py和測試腳本中加入Allure特性。pytest-allure-adaptor官網中詳細介紹了pytest-allure-adaptor所具有的功能。我們這次從實際入手,給大家介紹如何將其應用到自己的框架中。
首先,conftest.py中可以通過allure.environment方法將測試環境的信息輸出到報告中,比如將測試時用的host和測試用的browser添加到測試報告中:
#!/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
接着,在測試腳本中,添加allure特性,直接看下面的腳本,我通過在腳本中添加注釋的方式給大家解釋allure特性的用途。比如測試腳本是test_shopping_trolley.py:
#!/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)
上面使用了Allure的幾個特性:
- @allure.feature # 用於定義被測試的功能,被測產品的需求點
- @allure.story # 用於定義被測功能的用戶場景,即子功能點
- with allure.step # 用於將一個測試用例,分成幾個步驟在報告中輸出
- allure.attach # 用於向測試報告中輸入一些附加的信息,通常是一些測試數據信息
- @pytest.allure.step # 用於將一些通用的函數作為測試步驟輸出到報告,調用此函數的地方會向報告中輸出步驟
生成測試報告
測試腳本中添加了Allure特性之后,在執行測試的時候需要先生成Allure報告所需要的測試結果數據。在py.test執行測試的時候,指定–alluredir選項及測試數據保存的目錄即可:
運行測試
py.test test/ --alluredir ./result/
./result/中保存了本次測試的結果數據。另外,還可以執行指定features或者stories執行一部分測試用例,比如執行‘購物車功能’下的‘加入購物車’子功能的測試用例:
py.test test/ --allure_features='購物車功能' --allure_stories='加入購物車'
生成測試報告
接下來我們可以利用上面命令產生的測試數據使用命令行生成Allure測試報告了。命令如下:
allure generate ./result/ -o ./report/ --clean
打開測試報告
通過下面的命令打開測試報告:
allure open -h 127.0.0.1 -p 8083 ./report/
測試報告會使用默認的瀏覽器打開,下圖是github上面的一個圖形示例
其他的測試報告可以到我另外一個博客進行查看《【測試設計】使用jenkins 插件Allure生成漂亮的自動化測試報告》詳細的測試報告。
相關的GitHub地址:https://github.com/allure-framework