jinja2模板生成测试报告

最近实现了自动生成测试报告,采用了jinja2模板,向着CI又前进了一步,做一点总结。

背景说明:

  1. 原来测试数据是生成在一个excel文档中,该文档中展示了更详细的数据,而测试报告中只选部分数据放在一个表格中,且针对一个场景,测试多次会有多条数据,要对其进行筛选,取最优数据
  2. 测试时使用的服务器硬件信息,要根据不同的服务器插入对应的数据

方案说明:

  1. 数据筛选处理部分,使用pandas解决
  2. 不同服务器信息做成子html,作为参数传入主模板html中

对数据处理代码:

import pandas as pd

def data_analysis(excel_report_name, sheet_name):
	sheet_df = pd.read_excel(excel_report_name, sheet_name)
	row_num = len(sheet_df.index)
	if row_num != 0:
		# 确定唯一场景列
		uniq_columns = ['前置数据','组件','高可用场景','故障场景']
		# 1. 剔除不合格数据
		fail_data_index = sheet_df[(sheet_df['RPO']>20) & (sheet_df['组件']!='QQ')].index
		success_data_df = sheet_df.drop(fail_data_index)
		# 2. 在步骤1的基础上排序
		sort_df = success_data_df.sort_values(by=['前置数据','组件','高可用场景','故障场景','RPO'])
		
		# 3. 在步骤2的基础上,剔除重复场景数据,取最优数据,并重置index
		uniq_df = sort_df.drop_duplicates(subset=uniq_columns, keep='last').reset_index(drop=True)
		final_df = uniq_df
	return final_df
	

主模板html

template.html

<html>
    <head>
        <meta charset="UTF-8">
        <title>高可用测试报告</title>
        <style>
            body{
                margin:10px 100px 10px 100px;
            }
            p{
                text-indent:2em;
            }
            text_wrong{
                color: red;
            }
        </style>
    </head>
    <body>
    	 <h2>测试服务器信息</h2>
        {{ server_info }}
        <h2>测试数据分析</h2>
        <p>测试数据如下表</p>
        <table border="1">
            <tr>
                <th><b>序号</b></th>
                <th><b>前置数据</b></th>
                <th><b>组件</b></th>
                <th><b>高可用场景</b></th>
                <th><b>故障场景</b></th>
                <th><b>RTO</b></th>
                <th><b>RPO</b></th>
            </tr>
            {% for row_num in range(0,data_row_num) %}
            <tr>
                <td>{{ row_index + 1 }}</td>
                <td>{{ data_df.loc[row_index, '前置数据'] }}</td>
                <td>{{ data_df.loc[row_index, '组件'] }}</td>
                <td>{{ data_df.loc[row_index, '高可用场景'] }}</td>
                <td>{{ data_df.loc[row_index, '故障场景'] }}</td>
                <td>{{ data_df.loc[row_index, 'RTO'] }}</td>
                <td>{{ data_df.loc[row_index, 'RPO'] }}</td>
            </tr>
        </table>
    </body>
</html>

子模板html

sub_module.html

<div>
    <meta charset="utf-8">
    <style>
        table{
            text-align: center;
        }
    </style>
    <table border="1">
        <tr>
            <td class="table" colspan="3">{{ myserverip }}</td>
        </tr>
        <tr>
            <td>类型</td>
            <td>配置</td>
            <td>数量</td>
        </tr>
        <tr>
            <td>处理器</td>
            <td>intel</td>
            <td rowspan="4">1</td>
        </tr>
        <tr>
            <td>内存</td>
            <td>128G</td>
        </tr>
        <tr>
            <td>磁盘</td>
            <td>890G</td>
        </tr>
        <tr>
            <td>管理网络</td>
            <td>1*4端口千兆网卡</td>
        </tr>
    </table>
</div>

对模板进行渲染代码:

from jinja2 import Environment, FileSystemLoader

def html_report_render(test_data_df):
	env = Environment(loder=FileSystemLoader)
	template = env.get_template('template.html')
	# 对子模板html进行渲染
	sub_module = env.get_template('sub_module.html').render(
		myserverip = '127.0.0.1')
	with open("gaokeyong_report.html", "w+", encoding="utf-8") as f:
		out_report = template.render(
		server_info = sub_module, #子模板传入主模板中
		data_row_num = len(test_data_df.index),
		data_df = test_data_df)
		f.write(out_report)
		f.close()

这样就能自动化生成一份测试报告,基本思路就是,对数据处理,使用jinja2写html模板,使用数据对模板进行渲染,最后生成测试报告。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值