#-*- 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"))
【Python】抓取页面数据生成测试报告
最新推荐文章于 2024-01-02 23:04:18 发布