pytest-測試報告

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目錄中抛姑。

注意:

  1. allure-pytest模塊只能幫我們將測試報告的數(shù)據(jù)創(chuàng)建出來,但是無法生成HTML格式的測試報告艳狐。
  2. 生成的數(shù)據(jù)當(dāng)再次運(yùn)行的時候定硝,不會清空,而是以追加的方式

allure插件的安裝

前提是毫目,allure插件依賴Java環(huán)境蔬啡。

  1. Windows安裝allure

    1. 將壓縮包解壓合到合適目錄
    2. 將安裝目錄中的bin目錄添加到系統(tǒng)的環(huán)境變量中
    3. 測試:終端執(zhí)行allure --version诲侮,返回版本即可
  2. mac安裝allure

    1. 將tgz壓縮包解壓合到合適目錄
    2. 將安裝目錄中的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

使用

  1. 首先將終端的路徑切換到項目的根目錄下
  1. 使用命令生成測試報告
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
image.png

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
image.png

優(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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末键俱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肚吏,更是在濱河造成了極大的恐慌方妖,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罚攀,死亡現(xiàn)場離奇詭異党觅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)斋泄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門杯瞻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人炫掐,你說我怎么就攤上這事魁莉。” “怎么了募胃?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵旗唁,是天一觀的道長。 經(jīng)常有香客問我痹束,道長检疫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任祷嘶,我火速辦了婚禮屎媳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘论巍。我一直安慰自己烛谊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布嘉汰。 她就那樣靜靜地躺著丹禀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上湃崩,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天荧降,我揣著相機(jī)與錄音,去河邊找鬼攒读。 笑死朵诫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的薄扁。 我是一名探鬼主播剪返,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼邓梅!你這毒婦竟也來了脱盲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤日缨,失蹤者是張志新(化名)和其女友劉穎钱反,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匣距,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡面哥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了毅待。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尚卫。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖尸红,靈堂內(nèi)的尸體忽然破棺而出吱涉,到底是詐尸還是另有隱情,我是刑警寧澤外里,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布怎爵,位于F島的核電站,受9級特大地震影響盅蝗,放射性物質(zhì)發(fā)生泄漏疙咸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一风科、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乞旦,春花似錦贼穆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至玖姑,卻和暖如春愕秫,著一層夾襖步出監(jiān)牢的瞬間慨菱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工戴甩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留符喝,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓甜孤,卻偏偏與公主長得像协饲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子缴川,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容