pytest-html生成測試報告插件
在pytest中,我們使用pytest-html該插件來生成插件。
下載
pip install pytest-html
pip37 install -i https://pypi.doubanio.com/simple pytest-html
python -m pip install -i https://pypi.doubanio.com/simple pytest-html
使用
在配置文件中配置:
[pytest]
addopts = --html=report/report.html
意思是在執(zhí)行測試用例的時候,需要生成HTML報告。將報告生成到項目根目錄下的report文件夾中,報告的名字是report.html
allure生成測試用例報告的框架插件
我們使用pytest框架搭配allure框架,生成一個比pytest-html生成的測試報告,漂亮100倍的測試報告。
下載
pip install -i https://pypi.doubanio.com/simple allure-pytest
使用
在配置文件的addopts參數后,追加
[pytest]
addopts = --alluredir ./report/allure_html
意思,將allure生成的測試報告數據,創(chuàng)建到項目的根目錄下的report/allure_html目錄中。
注意:
-
allure-pytest模塊只能幫我們將測試報告的數據創(chuàng)建出來,但是無法生成HTML格式的測試報告。 - 生成的數據當再次運行的時候,不會清空,而是以追加的方式
allure插件的安裝
前提是,allure插件依賴Java環(huán)境。
-
Windows安裝allure
- 將壓縮包解壓合到合適目錄
- 將安裝目錄中的bin目錄添加到系統(tǒng)的環(huán)境變量中
- 測試:終端執(zhí)行
allure --version,返回版本即可
-
mac安裝allure
- 將tgz壓縮包解壓合到合適目錄
- 將安裝目錄中的bin目錄添加到系統(tǒng)的環(huán)境變量中:/etc/profile
PATH='/usr/local/src/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:C:\Program Files\allure-2.10.0\bin'
allure插件讀取json/txt文件生成測試報告
allure generate report/result -o report/allure_html --clean
使用
- 首先將終端的路徑切換到項目的根目錄下
- 使用命令生成測試報告
allure generate report/allure_html -o report/allure_report
- report/allure_html 數據來源
- -o report/allure_report 生成測試報告到哪個目錄
注意,如果再次運行上述命令,需要加上--clean, --clean就是清空并覆蓋報告
allure generate report/allure_html -o report/allure_report --clean
allure工具的問題及解決
如果生成的報告展示時,無數據,就終端執(zhí)行下面的命令:
allure open report/allure_html
allure工具生成的測試報告在report/allure_html
title和描述
為了allure報告更加美觀,我們可以為用例函數和用例方法,添加title和description,提高可讀性:
import pytest
import allure
@allure.title("主頁用例")
@allure.description("測試主頁的用例")
def test_index():
assert 1
@allure.title("數據庫用例")
@allure.description("測試數據庫的用例")
def test_db():
assert 0
@allure.title("測試登錄功能的類")
class TestCaseLogin:
@allure.title("登錄用例1")
@allure.description("登錄用例1的描述")
def test_login_01(self):
print('test case -01')
assert 1
@allure.title("登錄用例2")
@allure.description("登錄用例2的描述")
def test_login_02(self):
print('test case -02')
assert 1
feature和story
import pytest
import allure
@allure.feature("其他用例")
class TestOthers(object):
@allure.story("其他用例類下的主頁用例")
@allure.title("主頁用例")
@allure.description("測試主頁的用例")
def test_index(self):
assert 1
@allure.story("其他用例類下的數據庫用例")
@allure.title("數據庫用例")
@allure.description("測試數據庫的用例")
def test_db(self):
assert 0
@allure.feature("登錄功能")
@allure.title("測試登錄功能的類")
class TestCaseLogin:
@allure.story("登錄用例1")
@allure.title("登錄用例1")
@allure.description("登錄用例1的描述")
def test_login_01(self):
print('test case -01')
assert 1
@allure.story("登錄用例2")
@allure.title("登錄用例2")
@allure.description("登錄用例2的描述")
def test_login_02(self):
print('test case -02')
assert 1

SEVERITY
allure中對bug的嚴重(severity)級別也有定義,allure使用severity來標識測試用例或者測試類的bug級別,分為blocker,critical,normal,minor,trivial5個級別。一般,bug分為如下幾個級別:
- Blocker級別:中斷缺陷(客戶端程序無響應,無法執(zhí)行下一步操作),系統(tǒng)無法執(zhí)行、崩潰或嚴重資源不足、應用模塊無法啟動或異常退出、無法測試、造成系統(tǒng)不穩(wěn)定。
- Critical級別:即影響系統(tǒng)功能或操作,主要功能存在嚴重缺陷,但不會影響到系統(tǒng)穩(wěn)定性。比如說一個服務直接不可用了,微信不能發(fā)消息,支付寶不能付款這種,打開直接報錯。
- Major:即界面、性能缺陷、兼容性。如操作界面錯誤(包括數據窗口內列名定義、含義是否一致)、長時間操作無進度提示等。
- Normal級別:普通缺陷(數值計算錯誤),是指非核心業(yè)務流程產生的問題,比如說知乎無法變更頭像,昵稱等。這個要看自己的定義。
- Minor/Trivial級別:輕微缺陷(必輸項無提示,或者提示不規(guī)范),比如各種影響體驗,但不影響使用的內容。
import pytest
import allure
@allure.feature("其他用例")
class TestOthers(object):
@allure.severity(allure.severity_level.BLOCKER)
@allure.story("其他用例類下的主頁用例")
@allure.title("主頁用例")
@allure.description("測試主頁的用例")
def test_index(self):
assert 1
@allure.severity(allure.severity_level.CRITICAL)
@allure.story("其他用例類下的數據庫用例")
@allure.title("數據庫用例")
@allure.description("測試數據庫的用例")
def test_db(self):
assert 0
@allure.feature("登錄功能")
@allure.title("測試登錄功能的類")
class TestCaseLogin:
@allure.severity(allure.severity_level.MINOR)
@allure.story("登錄用例1")
@allure.title("登錄用例1")
@allure.description("登錄用例1的描述")
def test_login_01(self):
print('test case -01')
assert 1
@allure.severity(allure.severity_level.TRIVIAL)
@allure.story("登錄用例2")
@allure.title("登錄用例2")
@allure.description("登錄用例2的描述")
def test_login_02(self):
print('test case -02')
assert 1
@allure.severity(allure.severity_level.NORMAL)
@allure.story("登錄用例3")
@allure.title("登錄用例3")
@allure.description("登錄用例3的描述")
def test_login_03(self):
print('test case -03')
assert 0

優(yōu)點:我們能通過查看severity的圖,來清晰看到都不同的bug分布和級別,從而方便我們優(yōu)先修復哪
些bug
dynamic
該參數常用于跟參數化搭配,為用例添加一些相關信息
import pytest
import allure
l = [
{"url": "baidu.com", "title": "百度", "desc": "測試百度接口", 'method':"get", 'severity': "NORMAL"},
{"url": "zhihu.com", "title": "知乎", "desc": "測試知乎接口", 'method':"get", 'severity': "TRIVIAL"},
]
@pytest.mark.parametrize("item", l)
def test_case(item):
print(item['url'])
allure.dynamic.title(item['title'])
allure.dynamic.description(item['desc'])
assert 1