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
參數(shù)后瓤逼,追加
[pytest]
addopts = --alluredir ./report/allure_html
意思,將allure生成的測試報告數(shù)據(jù)钝腺,創(chuàng)建到項目的根目錄下的report/allure_html
目錄中抛姑。
注意:
-
allure-pytest
模塊只能幫我們將測試報告的數(shù)據(jù)創(chuàng)建出來,但是無法生成HTML格式的測試報告艳狐。 - 生成的數(shù)據(jù)當(dāng)再次運(yùn)行的時候定硝,不會清空,而是以追加的方式
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 數(shù)據(jù)來源
- -o report/allure_report 生成測試報告到哪個目錄
注意,如果再次運(yùn)行上述命令箱蟆,需要加上--clean
, --clean
就是清空并覆蓋報告
allure generate report/allure_html -o report/allure_report --clean
allure工具的問題及解決
如果生成的報告展示時沟绪,無數(shù)據(jù),就終端執(zhí)行下面的命令:
allure open report/allure_html
allure工具生成的測試報告在report/allure_html
title和描述
為了allure報告更加美觀空猜,我們可以為用例函數(shù)和用例方法绽慈,添加title和description,提高可讀性:
import pytest
import allure
@allure.title("主頁用例")
@allure.description("測試主頁的用例")
def test_index():
assert 1
@allure.title("數(shù)據(jù)庫用例")
@allure.description("測試數(shù)據(jù)庫的用例")
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("其他用例類下的數(shù)據(jù)庫用例")
@allure.title("數(shù)據(jù)庫用例")
@allure.description("測試數(shù)據(jù)庫的用例")
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的嚴(yán)重(severity)級別也有定義辈毯,allure使用severity
來標(biāo)識測試用例或者測試類的bug級別坝疼,分為blocker,critical谆沃,normal钝凶,minor,trivial5個級別唁影。一般耕陷,bug分為如下幾個級別:
- Blocker級別:中斷缺陷(客戶端程序無響應(yīng),無法執(zhí)行下一步操作)据沈,系統(tǒng)無法執(zhí)行哟沫、崩潰或嚴(yán)重資源不足、應(yīng)用模塊無法啟動或異常退出卓舵、無法測試南用、造成系統(tǒng)不穩(wěn)定。
- Critical級別:即影響系統(tǒng)功能或操作掏湾,主要功能存在嚴(yán)重缺陷,但不會影響到系統(tǒng)穩(wěn)定性肿嘲。比如說一個服務(wù)直接不可用了融击,微信不能發(fā)消息,支付寶不能付款這種雳窟,打開直接報錯尊浪。
- Major:即界面、性能缺陷封救、兼容性拇涤。如操作界面錯誤(包括數(shù)據(jù)窗口內(nèi)列名定義、含義是否一致)誉结、長時間操作無進(jìn)度提示等鹅士。
- Normal級別:普通缺陷(數(shù)值計算錯誤),是指非核心業(yè)務(wù)流程產(chǎn)生的問題惩坑,比如說知乎無法變更頭像掉盅,昵稱等也拜。這個要看自己的定義。
- Minor/Trivial級別:輕微缺陷(必輸項無提示趾痘,或者提示不規(guī)范)慢哈,比如各種影響體驗,但不影響使用的內(nèi)容永票。
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("其他用例類下的數(shù)據(jù)庫用例")
@allure.title("數(shù)據(jù)庫用例")
@allure.description("測試數(shù)據(jù)庫的用例")
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)點(diǎn):我們能通過查看severity的圖卵贱,來清晰看到都不同的bug分布和級別,從而方便我們優(yōu)先修復(fù)哪
些bug
dynamic
該參數(shù)常用于跟參數(shù)化搭配侣集,為用例添加一些相關(guān)信息
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