關於如何自定義修改pytest-html報告深度學習總結


第一、pytest-html執行命令總結:

pytest test_case.py --html=report.html --self-contained-html 直接html獨立顯示
pytest test_case.py --html=report.html 包含assets樣式文件,htmL顯示需要依賴於此文件

 

 

第二、關於如何修改pytest-html的報告內容:
1、如何修改report.html中的Environment部分,可在conftest.py中實現:

def pytest_configure(config):
    config._metadata['測試地址'] = '192.168.50.XXX'

報告結果變化:

 

 

2、如何修改report.html中的Summary部分,可在conftest.py中實現:

import pytest
from py._xmlgen import html

@pytest.mark.optionalhook
def pytest_html_results_summary(prefix, summary, postfix):
    prefix.extend([html.p("測試人: 龍雄")])

報告結果變化:

 

 

3、如何修改report.html中的results-table部分,可在conftest.py中實現:

from datetime import datetime
import pytest

@pytest.mark.optionalhook
def pytest_html_results_table_header(cells):
    cells.insert(2, html.th('Description'))
    cells.insert(3, html.th('Time', class_='sortable time', col='time'))
    # cells.insert(1,html.th("Test_nodeid"))
    cells.pop()

@pytest.mark.optionalhook
def pytest_html_results_table_row(report, cells):
    cells.insert(2, html.td(report.description))
    cells.insert(3, html.td(datetime.utcnow(), class_='col-time'))
    # cells.insert(1,html.td(report.nodeid))
    cells.pop()

@pytest.mark.hookwrapper
def pytest_runtest_makereport(item, call):
    outcome = yield
    report = outcome.get_result()
    report.description = str(item.function.__doc__)
    report.nodeid = report.nodeid.encode("utf-8").decode("unicode_escape")   #設置編碼顯示中文

報告結果變化:

注意:如果測試用例中,傳遞的@pytest.mark.parametrize中的參數是列表中帶字典的方式,那么報告顯示的結果將為:

若傳遞的@pytest.mark.parametrize中的參數是列表中帶元祖或列表的方式(如: bdata = [(1, "升級專業版本"),(2, "官方網站")];bdata=[[1,2],[3,4]]),那么報告顯示的結果將為:

 

 

 

所以本人之前一直不知道如何將我的這些測試數據展示到report table中,因為本人之前一直用的是字典的方式,今天發現原來傳遞的數據類型會影響報告的展示內容,不知是否還有其他更好的解決方式,

有的話請大家賜教

 

所以本人的解決方案是,將傳遞的列表數組存儲為元祖的方式:

import pytest
from dotest import mytest
import json
import logging
import requests

bdata = mytest()
s = requests.session()
logging.getLogger().setLevel(logging.INFO)

lb = []
for i in bdata:
    print(i)
    print(i['url'])
    yz = (i,i['url'],i['casename'])
    lb.append(yz)

@pytest.mark.parametrize("bdata,f,m", lb)
def testsingle(bdata,f,m):
    '''登錄模塊'''
    ip = bdata['ip']
    url = bdata['url']
    headers = json.loads(bdata['headers'])
    checkpoint = bdata['checkpoint']
    method = bdata['method']
    casename = bdata['casename']
    if bdata['datatype']=='json':
        body = json.loads(bdata['body'])
        result = s.request(method=method,url=ip+url,headers=headers,json=body)
        r = json.loads(result.text)
        assert checkpoint in r['message']
        logging.info("pass     "+casename  +"  "+url)

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM