Pytest+Allure定制報(bào)告

前言:

最近在研究接口自動(dòng)化的框架急迂,好的測(cè)試報(bào)告在整個(gè)測(cè)試框架起到至關(guān)重要的部分影所。終于被我發(fā)現(xiàn)一個(gè)超好用的報(bào)告框架,不僅報(bào)告美觀,而且方便CI集成。
就是它僚碎,就是它:Allure Test Report:锩洹!勺阐!

先上一張報(bào)告效果圖:
Allure Test Report.png

python版本及必要庫

pytest==3.6.0
pytest-allure-adaptor==1.7.10
allure-python-commons==2.7.0


2020-4-30更新
pytest==5.3.1
allure-pytest==2.8.6
allure-python-commons==2.8.6
??注:pytest-allure-adaptor已棄用卷中,改為allure-pytest;
安裝allure-pytest時(shí)渊抽,需將pytest-allure-adaptor卸載


一蟆豫、環(huán)境配置

安裝Python依賴庫:
pip3 install pytest
pip3 install allure-pytest

安裝 Command Tool:
brew tap qatools/formulas
brew install allure-commandline

官方參考文檔:https://docs.qameta.io/allure/#_pytest


二、生成html報(bào)告命令

1懒闷、pytest命令基礎(chǔ)上加--alluredir十减,生成xml報(bào)告。

pytest -s -q --alluredir [xml_report_path]
//[xml_report_path]根據(jù)自己需要定義文件夾愤估,作者定義為:/report/xml

用例執(zhí)行完成之后會(huì)在[xml_report_path]目錄下生成了一堆xml的report文件帮辟,當(dāng)然這不是我們最終想要的美觀報(bào)告。
xml.png

2玩焰、需要使用 Command Tool 來生成我們需要的美觀報(bào)告由驹。

allure generate [xml_report_path] -o [html_report_path]
//[html_report_path]根據(jù)自己需要定義文件夾,作者定義為:/report/html

打開 index.html,之前寫的 case 報(bào)告就會(huì)呈現(xiàn)在你面前
html.png

注??:直接用chrome瀏覽器打開報(bào)告昔园,報(bào)告可能會(huì)是空白頁面蔓榄。
解決辦法:
1闹炉、在pycharm中右擊index.html選擇打開方式Open in Browser就可以了。
2润樱、使用Firefox直接打開index.html渣触。


三、定制報(bào)告

Feature: 標(biāo)注主要功能模塊
Story: 標(biāo)注Features功能模塊下的分支功能
Severity: 標(biāo)注測(cè)試用例的重要級(jí)別
Step: 標(biāo)注測(cè)試用例的重要步驟
Issue和TestCase: 標(biāo)注Issue壹若、Case嗅钻,可加入U(xiǎn)RL
attach: 標(biāo)注增加附件
Environment: 標(biāo)注環(huán)境Environment字段

1、Features定制詳解
# -*- coding: utf-8 -*-
# @Time    : 2018/8/17 上午10:10
# @Author  : WangJuan
# @File    : test_case.py
import allure
import pytest


@allure.feature('test_module_01')
def test_case_01():
    """
    用例描述:Test case 01
    """
    assert 0
    
@allure.feature('test_module_02')
def test_case_02():
    """
    用例描述:Test case 02
    """
    assert 0 == 0
    
    
if __name__ == '__main__':
    pytest.main(['-s', '-q', '--alluredir', './report/xml'])

添加feature店展,Report展示見下圖养篓。
feature.png
2、Story定制詳解
# -*- coding: utf-8 -*-
# @Time    : 2018/8/17 上午10:10
# @Author  : WangJuan
# @File    : test_case.py
import allure
import pytest


@allure.feature('test_module_01')
@allure.story('test_story_01')
def test_case_01():
    """
    用例描述:Test case 01
    """
    assert 0

@allure.feature('test_module_01')
@allure.story('test_story_02')
def test_case_02():
    """
    用例描述:Test case 02
    """
    assert 0 == 0


if __name__ == '__main__':
    pytest.main(['-s', '-q', '--alluredir', './report/xml'])

添加story赂蕴,Report展示見下圖柳弄。
image.png
3、用例標(biāo)題和用例描述定制詳解
# -*- coding: utf-8 -*-
# @Time    : 2018/8/17 上午10:10
# @Author  : WangJuan
# @File    : test_case.py
import allure
import pytest

@allure.feature('test_module_01')
@allure.story('test_story_01')
#test_case_01為用例title
def test_case_01():
    """
    用例描述:這是用例描述概说,Test case 01碧注,描述本人
    """
    #注釋為用例描述
    assert 0

if __name__ == '__main__':
    pytest.main(['-s', '-q', '--alluredir', './report/xml'])

添加用例標(biāo)題和用例描述,Report展示見下圖糖赔。
image.png
4 萍丐、Severity定制詳解

Allure中對(duì)嚴(yán)重級(jí)別的定義:
1、 Blocker級(jí)別:中斷缺陷(客戶端程序無響應(yīng)放典,無法執(zhí)行下一步操作)
2逝变、 Critical級(jí)別:臨界缺陷( 功能點(diǎn)缺失)
3、 Normal級(jí)別:普通缺陷(數(shù)值計(jì)算錯(cuò)誤)
4奋构、 Minor級(jí)別:次要缺陷(界面錯(cuò)誤與UI需求不符)
5壳影、 Trivial級(jí)別:輕微缺陷(必輸項(xiàng)無提示,或者提示不規(guī)范)

# -*- coding: utf-8 -*-
# @Time    : 2018/8/17 上午10:10
# @Author  : WangJuan
# @File    : test_case.py
import allure
import pytest


@allure.feature('test_module_01')
@allure.story('test_story_01')
@allure.severity('blocker')
def test_case_01():
    """
    用例描述:Test case 01
    """
    assert 0

@allure.feature('test_module_01')
@allure.story('test_story_01')
@allure.severity('critical')
def test_case_02():
    """
    用例描述:Test case 02
    """
    assert 0 == 0

@allure.feature('test_module_01')
@allure.story('test_story_02')
@allure.severity('normal')
def test_case_03():
    """
    用例描述:Test case 03
    """
    assert 0

@allure.feature('test_module_01')
@allure.story('test_story_02')
@allure.severity('minor')
def test_case_04():
    """
    用例描述:Test case 04
    """
    assert 0 == 0

    
if __name__ == '__main__':
    pytest.main(['-s', '-q', '--alluredir', './report/xml'])

添加Severity弥臼,Report展示見下圖宴咧。
image.png
5、Step定制詳解
# -*- coding: utf-8 -*-
# @Time    : 2018/8/17 上午10:10
# @Author  : WangJuan
# @File    : test_case.py
import allure
import pytest

@allure.step("字符串相加:{0}醋火,{1}")     
# 測(cè)試步驟悠汽,可通過format機(jī)制自動(dòng)獲取函數(shù)參數(shù)
def str_add(str1, str2):
    if not isinstance(str1, str):
        return "%s is not a string" % str1
    if not isinstance(str2, str):
        return "%s is not a string" % str2
    return str1 + str2

@allure.feature('test_module_01')
@allure.story('test_story_01')
@allure.severity('blocker')
def test_case():
    str1 = 'hello'
    str2 = 'world'
    assert str_add(str1, str2) == 'helloworld'


if __name__ == '__main__':
    pytest.main(['-s', '-q', '--alluredir', './report/xml'])

添加Step箱吕,Report展示見下圖芥驳。
image.png
6、Issue和TestCase定制詳解
# -*- coding: utf-8 -*-
# @Time    : 2018/8/17 上午10:10
# @Author  : WangJuan
# @File    : test_case.py
import allure
import pytest


@allure.step("字符串相加:{0}茬高,{1}")     # 測(cè)試步驟兆旬,可通過format機(jī)制自動(dòng)獲取函數(shù)參數(shù)
def str_add(str1, str2):
    print('hello')
    if not isinstance(str1, str):
        return "%s is not a string" % str1
    if not isinstance(str2, str):
        return "%s is not a string" % str2
    return str1 + str2

@allure.feature('test_module_01')
@allure.story('test_story_01')
@allure.severity('blocker')
@allure.issue("http://www.baidu.com")
@allure.testcase("http://www.testlink.com")
def test_case():
    str1 = 'hello'
    str2 = 'world'
    assert str_add(str1, str2) == 'helloworld'


if __name__ == '__main__':
    pytest.main(['-s', '-q', '--alluredir', './report/xml'])

添加Issue和TestCase,Report展示見下圖怎栽。
image.png
7丽猬、Environment定制詳解
# 具體Environment參數(shù)可自行設(shè)置
allure.environment(app_package='com.mobile.fm')
allure.environment(app_activity='com.mobile.fm.activity')
allure.environment(device_name='aad464')
allure.environment(platform_name='Android')

添加Environment參數(shù)宿饱,Report展示見下圖。
Environment.png
8脚祟、attach定制詳解
 file = open('../test.png', 'rb').read()
 allure.attach(name='cart_pay_err', body=file, attachment_type=allure.attachment_type.PNG)

在報(bào)告中增加附件:allure.attach(’arg1’,’arg2’,’arg3’):
arg1:表示添加附件的內(nèi)容
arg2:是在報(bào)告中顯示的附件名稱
arg3:表示添加的類型(支持:HTML,JPG,PNG,JSON,OTHER,TEXTXML)

添加attach參數(shù)谬以,Report展示見下圖。
image.png

此外由桌,Allure還支持Jenkins Plugin~
感興趣的話为黎,請(qǐng)移步Jenkins構(gòu)建Allure Report


以上,對(duì)你有幫助的話行您,點(diǎn)贊吧??~~
歡迎關(guān)注我的簡書,博客,TesterHome,Github~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末铭乾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子娃循,更是在濱河造成了極大的恐慌炕檩,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捌斧,死亡現(xiàn)場(chǎng)離奇詭異笛质,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)捞蚂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門经瓷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洞难,你說我怎么就攤上這事舆吮。” “怎么了队贱?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵色冀,是天一觀的道長。 經(jīng)常有香客問我柱嫌,道長锋恬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任编丘,我火速辦了婚禮与学,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嘉抓。我一直安慰自己索守,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布抑片。 她就那樣靜靜地躺著卵佛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上截汪,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天疾牲,我揣著相機(jī)與錄音,去河邊找鬼衙解。 笑死阳柔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚓峦。 我是一名探鬼主播盔沫,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼枫匾!你這毒婦竟也來了架诞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤干茉,失蹤者是張志新(化名)和其女友劉穎谴忧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體角虫,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沾谓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了戳鹅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片均驶。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖枫虏,靈堂內(nèi)的尸體忽然破棺而出妇穴,到底是詐尸還是另有隱情,我是刑警寧澤隶债,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布腾它,位于F島的核電站,受9級(jí)特大地震影響死讹,放射性物質(zhì)發(fā)生泄漏瞒滴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一赞警、第九天 我趴在偏房一處隱蔽的房頂上張望妓忍。 院中可真熱鬧,春花似錦愧旦、人聲如沸世剖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搁廓。三九已至,卻和暖如春耕皮,著一層夾襖步出監(jiān)牢的瞬間境蜕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工凌停, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粱年,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓罚拟,卻偏偏與公主長得像台诗,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赐俗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344