【Python】抓取页面数据生成测试报告

#-*- coding: utf-8 -*-
# coding = utf-8
from bs4 import BeautifulSoup
import string
import re
import urllib3
import requests
import sys, os
import pandas as pd
import time
import importlib
import json

# 登录首页
def login(username, password):
    session = requests.session()
    login_url = 'https://login.com/login/login.do'
    param = {'actionFlag': 'login',
             'lang': 'en',
             'loginMethod': 'login',
             'loginPageType': 'ddd',
             'password': 'password',
             'uid': 'userid'}
    r = session.post(login_url, params=param)
    if re.search('欢迎', r.text):
        print('登录成功')
        return session
    else:
        raise Exception('登录失败')

# 获取页面数据
def get_data(url):
    header = {"Content-Type": "application/json",
              "clienttype": "eessd",
              "requestid": "addss",
              "username": "username"}
    r = login('username', 'password')
    ItemCode = '{"stageList":["1","2","3","4"],"versionUri":"122333"}'
    res = r.post(url, data=ItemCode, verify=False, headers=header)
    reslut = res.json()
    return reslut


# 获取汇总数据
def get_sum():
    Scenario_num = []
    for features in list:
        Name = features["featureName"]
        Scenario_num.append(Name)
    Scenario_num = len(Scenario_num)  # 场景总数
    totalreslut = resluts["result"]["value"]
    caseTotal = totalreslut["caseTotal"]  # 用例总数
    passTotal = totalreslut["passTotal"]  # 通过总数
    failTotal = totalreslut["failTotal"]  # 失败总数
    Exec_num = passTotal + failTotal  # 执行数量
    passTotalRate = '{:.2%}'.format(passTotal / Exec_num)  # 总通过率

    totalhead = ''
    if failTotal > 0:
        totalhead = totalhead + """
            <tr>
                <td align="center">%s</td>
                <td align="center">%s</td>
                <td align="center">%s</td>
                <td id="123" align="center" class = "Failure">%s</td>
                <td align="center">%s</td>
            <td id="234" align="center" class = "Failure">%s</td>
        </tr>
        """ % (Scenario_num, caseTotal, passTotal, failTotal, Exec_num, passTotalRate)
    else:
        totalhead = totalhead + """
            <tr>
                <td align="center">%s</td>
                <td align="center">%s</td>
                <td align="center">%s</td>
                <td id="123" align="center">%s</td>
                <td align="center">%s</td>
                <td id="234" align="center">%s</td>
            </tr>
            """ % (Scenario_num, caseTotal, passTotal, failTotal, Exec_num, passTotalRate)
    return totalhead


# 获取行数据
def get_row():
    scenario_name = []  # 场景名称
    pass_num = []  # 通过数
    fail_num = []  # 失败数
    passRate = []  # 通过率
    listname = ['名字1', '名字2', '名字3', '名字4', '名字5']  # 测试责任人
    for i in list:
        scenario = i["featureName"]
        passTotal = i["result"][0]["passTotal"]
        failTotal = i["result"][0]["failTotal"]
        scenario_name.append(scenario)
        pass_num.append(passTotal)
        fail_num.append(failTotal)
        passRate.append('{:.2%}'.format(passTotal / (passTotal + failTotal)))

    row = ''
    for j in range(len(scenario_name)):
        scenarioname = scenario_name[j]
        num = fail_num[j]
        passnum = pass_num[j]
        passrate = passRate[j]
        testname = listname[j]
        if num > 0:
            row = row + """
                    <tr valign="top">
                        <td align="center">%s</td>
                        <td align="center">%s</td>
                        <td id="t0" align="center" class = "Failure">%s</td>
                        <td align="center">%s</td>
                        <td id="p0" align="center" class = "Failure">%s</td>
                    </tr>""" % (scenarioname, passnum, num, testname, passrate)
        else:
            row = row + """
                                <tr valign="top">
                                    <td align="center">%s</td>
                                    <td align="center">%s</td>
                                    <td id="t0" align="center">%s</td>
                                    <td align="center">%s</td>
                                    <td id="p0" align="center">%s</td>
                                </tr>""" % (scenarioname, passnum, num, testname, passrate)
            return row

# 生成HTML页面
def get_html():
    totalhead = get_sum()
    row = get_row()
    outhtml = """
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css">
        table tr td, table tr th {
                        font-size: 15px;
                        font-family:微软雅黑;
                    }
        table.details tr th{
                        color: #ffffff;
                        font-weight: bold;
                        text-align:center;
                        background:#95b3d7;
                        white-space: nowrap;
                    }
        span{
            color: blue;
            s}
        .Failure {
                font-weight:bold; color:red;
                    }
    </style>
    </head>
    <body>
    <table id="a1" border="1" cellpadding="5" class="details" cellspacing="0"  align="center" width="1330">
        <tr>
            <th colspan="6" style="background-color:rgb(83,141,213);font-size:26px;font-family:微软雅黑">IT <span style="color:rgb(255,192,0)">项目名称</span> API自动化测试日报</th>
        </tr>
        <tr  valign="top">
            <th>场景总数</th>
            <th>用例总数</th>
            <th>通过总数</th>
            <th>失败总数</th>
            <th>执行数量</th>
            <th>通过率</th>
        </tr>
        """ + totalhead + """
    </table>
 
    <table id="a2" align="center" width="1330">
        <tr>
            <td align="left" style="font-weight: bold"><i>用例执行明细</i></td>
            <td align="right"><a href="www.baidu.com"><i>详情请点击查看</i></a> </td>
        </tr>
    </table>
    <table id="a3" align="center" class="details" border="1" cellpadding="5" cellspacing="0" width="1330">
            <tr valign="top" >
                <th>测试场景名称</th>
                <th>成功</th>
                <th>失败</th>
                <th>测试责任人</th>
                <th>通过率</th>
            </tr>
    """ + row + """
    </table>
    <table id="a4" align="center" width="1330">
        <tr>
            <td align="left" style="font-family:微软雅黑;font-size:15px;"><i>如对报告有任何疑问,请随时联系集成与验证中心:<span>测试联系人</span> ,谢谢!</i></td>
        </tr>
    </table>
    </body>
    </html>"""
    return outhtml

# 生成html文件
URL = 'www.baidu.com'
resluts = get_data(URL)
list = resluts["result"]["value"]["features"]
outhtml = get_html()
filename = '{date}_LDM_TestReport.html'.format(date=time.strftime('%Y%m%d'))
dir = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'report')
with open(filename, 'wb') as f: f.write(outhtml.encode("utf8"))



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值