Pytest+Allure定製報告

前言:

最近在研究接口自動化的框架,好的測試報告在整個測試框架起到相當重要的部分。終於被我發現一個超好用的報告框架,不只報告美觀,並且方便CI集成。
就是它,就是它:Allure Test Report!!!html

先上一張報告效果圖:Allure Test Report.pngpython


python版本及必要庫

python 3.5
pytest 3.3.3
pytest-allure-adaptor 1.7.9chrome


1、環境配置

安裝Python依賴庫:
pip3 install pytest
pip3 install pytest-allure-adaptor瀏覽器

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

官方參考文檔:https://pypi.org/project/pytest-allure-adaptor/函數


2、生成html報告命令

一、pytest命令基礎上加--alluredir,生成xml報告。測試

pytest -s -q --alluredir [xml_report_path]
//[xml_report_path]根據本身須要定義文件夾,做者定義爲:/report/xml

用例執行完成以後會在[xml_report_path]目錄下生成了一堆xml的report文件,固然這不是咱們最終想要的美觀報告。xml.png3d

二、須要使用 Command Tool 來生成咱們須要的美觀報告。code

allure generate [xml_report_path] -o [html_report_path]
//[html_report_path]根據本身須要定義文件夾,做者定義爲:/report/html

打開 index.html,以前寫的 case 報告就會呈如今你面前html.pngorm

注⚠️:直接用chrome瀏覽器打開報告,報告可能會是空白頁面。
解決辦法:
一、在pycharm中右擊index.html選擇打開方式Open in Browser就能夠了。
二、使用Firefox直接打開index.html。


3、定製報告

Feature: 標註主要功能模塊
Story: 標註Features功能模塊下的分支功能
Severity: 標註測試用例的重要級別
Step: 標註測試用例的重要步驟
Issue和TestCase: 標註Issue、Case,可加入URL

一、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

二、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

三、用例標題和用例描述定製詳解
# -*- 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'])

添加用例標題和用例描述,Report展現見下圖。image.png

4 、Severity定製詳解

Allure中對嚴重級別的定義:
一、 Blocker級別:中斷缺陷(客戶端程序無響應,沒法執行下一步操做)
二、 Critical級別:臨界缺陷( 功能點缺失)
三、 Normal級別:普通缺陷(數值計算錯誤)
四、 Minor級別:次要缺陷(界面錯誤與UI需求不符)
五、 Trivial級別:輕微缺陷(必輸項無提示,或者提示不規範)

# -*- 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

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

@allure.step("字符串相加:{0},{1}")     
# 測試步驟,可經過format機制自動獲取函數參數
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

六、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}")     # 測試步驟,可經過format機制自動獲取函數參數
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

八、attach定製詳解
file = open('../test.png', 'rb').read()
 allure.attach('test_img', file, allure.attach_type.PNG)

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

添加attach參數,Report展現見下圖。image.png


此外,Allure還支持Jenkins Plugin,後面我會專門寫一篇博文介紹,感興趣的話請關注個人我的簡書


以上,對你有幫助的話,點贊吧❤️~~

相關文章
相關標籤/搜索