Allure測(cè)試報(bào)告框架幫助你輕松實(shí)現(xiàn)”高大上”報(bào)告展示。本文通過(guò)示例演示如何從0到1集成Allure測(cè)試框架。重點(diǎn)展示了如何將Allure集成到已有的自動(dòng)化測(cè)試工程中、以及如何實(shí)現(xiàn)報(bào)表的優(yōu)化展示。Allure非常強(qiáng)大,支持多種語(yǔ)言多種測(cè)試框架,無(wú)論是Java/Python還是Junit/TestNG,其他語(yǔ)言或者框架實(shí)現(xiàn)的流程和本文一致,具體配置參照各語(yǔ)言框架規(guī)范
安裝allure
Windows用戶:
MAC用戶:
手動(dòng)安裝:
下載后解壓并配置環(huán)境變量
安裝allure-pytest插件
allure常用特性
希望在報(bào)告中看到測(cè)試功能,子功能或場(chǎng)景,測(cè)試步驟,包括測(cè)試附加信息可以使用@feature,@story,@step,@attach
步驟:
@allure.feature與@allure.store的關(guān)系
step特性
運(yùn)行:
在測(cè)試執(zhí)行期間收集結(jié)果
pytest [測(cè)試文件] -s -q --alluredir=./result --clean-alluredir
查看測(cè)試報(bào)告:
方法一:測(cè)試完成后查看實(shí)際報(bào)告,在線看報(bào)告,會(huì)直接打開默認(rèn)瀏覽器展示當(dāng)前報(bào)告
allure serve ./result
方法二:從結(jié)果生成報(bào)告,這是一個(gè)啟動(dòng)tomcat的服務(wù),需要兩個(gè)步驟
生成報(bào)告:
allure generate ./result -o ./report --clean (注意:--clean用來(lái)清除之前已生成的報(bào)告)
打開報(bào)告:
allure open -h 127.0.0.1 -p 8883 ./report (該方法直接生成一個(gè)tomcat服務(wù),可遠(yuǎn)程訪問)
舉個(gè)例子:
有如下代碼文件
#!/usr/bin/python # -*- coding: UTF-8 -*- """ @author:chenshifeng @file:test_allure.py @time:2020/10/10 """ import allure import pytest @allure.feature('登錄模塊') class TestLogin(): @allure.story('登錄成功') @allure.title('登錄成功標(biāo)題') def test_login_sucess(self): with allure.step('步驟1:打開應(yīng)用'): print('應(yīng)用已打開') with allure.step('步驟2:進(jìn)入登錄頁(yè)面'): print('登錄頁(yè)面已打開') with allure.step('步驟3:輸入用戶名和密碼'): print('用戶名和密碼輸入成功') print('登錄測(cè)試用例:登錄成功') @allure.story('登錄成功') def test_login_sucess2(self): assert '1' == 1 print('登錄測(cè)試用例:登錄成功') @allure.story('登錄失敗') def test_login_failure_a(self): print('登錄測(cè)試用例:登錄失敗,用戶名缺失') @allure.story('登錄失敗') def test_login_failure_b(self): print('登錄測(cè)試用例:登錄失敗,密碼缺失') @allure.story('登錄失敗') def test_login_failure_c(self): with allure.step('輸入用戶名'): print('已輸入用戶名') with allure.step('輸入密碼'): print('已輸入密碼') with allure.step('點(diǎn)擊登錄'): print('已點(diǎn)擊登錄') print('登錄測(cè)試用例:登錄失敗,密碼錯(cuò)誤') @allure.feature('搜索模塊') class TestSearch(): def test_search1(self): print('搜索用例1') TEST_CASE_LINK = 'https://mirrors.huaweicloud.com/' @allure.testcase(TEST_CASE_LINK,'測(cè)試用例連接') def test_search2(self): print('搜索用例2') @allure.step('搜索步驟') def test_search3(self): print('搜索用例3')
依次執(zhí)行命令:
pytest test_allure.py --alluredir=./result --clean-alluredir
allure serve ./result
chenshifengdeMacBook-Pro:testcode chenshifeng$ pytest test_allure.py --alluredir=./result --clean-alluredir ============================================================================= test session starts ============================================================================= platform darwin -- Python 3.9.0, pytest-6.1.1, py-1.9.0, pluggy-0.13.1 rootdir: /Users/chenshifeng/MyCode/PythonCode/SFDSZL/test_pytest, configfile: pytest.ini plugins: allure-pytest-2.8.18 collected 8 items test_allure.py .F...... [100%] ================================================================================== FAILURES =================================================================================== ________________________________________________________________________ TestLogin.test_login_sucess2 _________________________________________________________________________ self = test_allure.TestLogin object at 0x7fef3d5cba90> @allure.story('登錄成功') def test_login_sucess2(self): > assert '1' == 1 E AssertionError: assert '1' == 1 test_allure.py:27: AssertionError =========================================================================== short test summary info =========================================================================== FAILED test_allure.py::TestLogin::test_login_sucess2 - AssertionError: assert '1' == 1 ========================================================================= 1 failed, 7 passed in 0.07s ========================================================================= chenshifengdeMacBook-Pro:testcode chenshifeng$ allure serve ./result Generating report to temp directory... Report successfully generated to /var/folders/p0/3_7fwrvx6n3ftpfd4wjb01300000gn/T/7024790777193223986/allure-report Starting web server... 2020-10-13 21:39:56.174:INFO::main: Logging initialized @6818ms to org.eclipse.jetty.util.log.StdErrLog Server started at http://192.168.12.100:58977/>. Press Ctrl+C> to exit
生成的報(bào)告:
allure特性-testcase
關(guān)聯(lián)測(cè)試用例(可以直接給測(cè)試用例的地址鏈接)
例子:
TEST_CASE_LINK = 'https://mirrors.huaweicloud.com/' @allure.testcase(TEST_CASE_LINK,'測(cè)試用例連接') def test_search(self): print('搜索用例')
通常測(cè)試有P0、冒煙測(cè)試、驗(yàn)證上線測(cè)試。按重要性級(jí)別來(lái)執(zhí)行的,比如上線要把主流程和重要模塊都跑一遍,可通過(guò)以下方法解決
通過(guò)附加@pytest.mark標(biāo)記
通過(guò)allure.feature,allure.story
也可以通過(guò)allure.severity來(lái)附加標(biāo)記
使用方法:
在方法、函數(shù)和類上面加 @allure.severity(allure.severity_level.TRIVIAL)
執(zhí)行:
pytest -s -v 文件名 --allure-severities normal,critical
舉例說(shuō)明:
#!/usr/bin/python # -*- coding: UTF-8 -*- """ @author:chenshifeng @file:test_severity.py @time:2020/10/11 """ import allure import pytest # 不加任何標(biāo)記,默認(rèn)normal def test_with_no_severity(): pass # trivial:不重要,輕微缺陷(必輸項(xiàng)無(wú)提示,或者提示不規(guī)范) @allure.severity(allure.severity_level.TRIVIAL) def test_with_trivial_severity(): pass # minor 級(jí)別 不太重要,次要缺陷(界面錯(cuò)誤與UI需求不符) @allure.severity(allure.severity_level.MINOR) def test_with_minor_severity(): pass # normal:正常問題,普通缺陷(數(shù)值計(jì)算錯(cuò)誤) @allure.severity(allure.severity_level.NORMAL) def test_with_normal_severity(): pass # critical:嚴(yán)重,臨界缺陷(功能點(diǎn)缺失) @allure.severity(allure.severity_level.CRITICAL) def test_with_ritical_severity(): pass # blocker:阻塞,中斷缺陷(客戶端程序無(wú)響應(yīng),無(wú)法執(zhí)行下一步操作) @allure.severity(allure.severity_level.BLOCKER) def test_with_blocker_severity(): pass @allure.severity(allure.severity_level.NORMAL) class TestClassWithNormalSeverity(object): # 不加任何標(biāo)記,默認(rèn)為同class級(jí)別 def test_inside_with_normal_severity(self): pass # 重新設(shè)置了critical級(jí)別 @allure.severity(allure.severity_level.CRITICAL) def test_inside_with_critical_severity(self): pass
執(zhí)行:
chenshifengdeMacBook-Pro:testcode chenshifeng$ pytest test_severity.py --alluredir=./result --clean-alluredir -vs ============================================================================= test session starts ============================================================================= platform darwin -- Python 3.9.0, pytest-6.1.1, py-1.9.0, pluggy-0.13.1 -- /usr/local/bin/python3.9 cachedir: .pytest_cache rootdir: /Users/chenshifeng/MyCode/PythonCode/SFDSZL/test_pytest, configfile: pytest.ini plugins: allure-pytest-2.8.18 collected 8 items test_severity.py::test_with_no_severity PASSED test_severity.py::test_with_trivial_severity PASSED test_severity.py::test_with_minor_severity PASSED test_severity.py::test_with_normal_severity PASSED test_severity.py::test_with_ritical_severity PASSED test_severity.py::test_with_blocker_severity PASSED test_severity.py::TestClassWithNormalSeverity::test_inside_with_normal_severity PASSED test_severity.py::TestClassWithNormalSeverity::test_inside_with_critical_severity PASSED ============================================================================== 8 passed in 0.03s ============================================================================== chenshifengdeMacBook-Pro:testcode chenshifeng$ allure serve ./result Generating report to temp directory... Report successfully generated to /var/folders/p0/3_7fwrvx6n3ftpfd4wjb01300000gn/T/17788207943997663035/allure-report Starting web server... 2020-10-13 22:27:49.842:INFO::main: Logging initialized @6620ms to org.eclipse.jetty.util.log.StdErrLog Server started at http://192.168.12.100:59696/>. Press Ctrl+C> to exit
百度搜索:
#!/usr/bin/python # -*- coding: UTF-8 -*- """ @author:chenshifeng @file:test_baidudemo.py @time:2020/10/13 """ import pytest import allure from selenium import webdriver import time @allure.testcase('https://www.github.com') @allure.feature("百度搜索") @pytest.mark.parametrize('test_data1',['allure','pytest','unittest']) def test_steps_demo(test_data1): with allure.step('打開百度網(wǎng)頁(yè)'): driver=webdriver.Chrome() driver.get('http://www.baidu.com') driver.maximize_window() with allure.step(f'輸入搜索詞:{test_data1}'): driver.find_element_by_id('kw').send_keys(test_data1) time.sleep(2) driver.find_element_by_id('su').click() time.sleep(2) with allure.step('保存圖片'): driver.save_screenshot('./screenshot/baidu.png') allure.attach.file('./screenshot/baidu.png',attachment_type=allure.attachment_type.PNG) with allure.step('關(guān)閉瀏覽器'): driver.quit()
執(zhí)行:
chenshifengdeMacBook-Pro:testcode chenshifeng$ pytest test_baidudemo.py --alluredir=./result --clean-alluredir -vs ============================================================================= test session starts ============================================================================= platform darwin -- Python 3.9.0, pytest-6.1.1, py-1.9.0, pluggy-0.13.1 -- /usr/local/bin/python3.9 cachedir: .pytest_cache rootdir: /Users/chenshifeng/MyCode/PythonCode/SFDSZL/test_pytest, configfile: pytest.ini plugins: allure-pytest-2.8.18 collected 3 items test_baidudemo.py::test_steps_demo[allure] PASSED test_baidudemo.py::test_steps_demo[pytest] PASSED test_baidudemo.py::test_steps_demo[unittest] PASSED ============================================================================= 3 passed in 24.65s ============================================================================== chenshifengdeMacBook-Pro:testcode chenshifeng$ allure serve ./result Generating report to temp directory... Report successfully generated to /var/folders/p0/3_7fwrvx6n3ftpfd4wjb01300000gn/T/18005664130273264423/allure-report Starting web server... 2020-10-13 23:03:39.221:INFO::main: Logging initialized @7360ms to org.eclipse.jetty.util.log.StdErrLog Server started at http://192.168.12.100:60775/>. Press Ctrl+C> to exit
報(bào)告:
到此這篇關(guān)于python自動(dòng)化之如何利用allure生成測(cè)試報(bào)告的文章就介紹到這了,更多相關(guān)python allure生成測(cè)試報(bào)告內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:三沙 臺(tái)灣 宿遷 欽州 景德鎮(zhèn) 濟(jì)南 黃山 喀什
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python自動(dòng)化之如何利用allure生成測(cè)試報(bào)告》,本文關(guān)鍵詞 python,自動(dòng)化,之,如何,利用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。