155 lines
6.2 KiB
Python
155 lines
6.2 KiB
Python
# encoding: utf-8
|
|
"""
|
|
@author: lileilei
|
|
@file: py_Html.py
|
|
@time: 2017/6/5 17:04
|
|
"""
|
|
import os
|
|
titles='接口测试'
|
|
def title(titles):
|
|
title='''<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>%s</title>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<!-- 引入 Bootstrap -->
|
|
<link href="https://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
|
|
<!-- HTML5 Shim 和 Respond.js 用于让 IE8 支持 HTML5元素和媒体查询 -->
|
|
<!-- 注意: 如果通过 file:// 引入 Respond.js 文件,则该文件无法起效果 -->
|
|
<!--[if lt IE 9]>
|
|
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
|
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
|
|
<![endif]-->
|
|
<style type="text/css">
|
|
.hidden-detail,.hidden-tr{
|
|
display:none;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
'''%(titles)
|
|
return title
|
|
connent='''
|
|
<div class='col-md-4 col-md-offset-4'>
|
|
<h1>接口测试的结果</h1>'''
|
|
def shouye(starttime,endtime,passge,fail,excepthions,weizhicuowu):
|
|
beijing='''
|
|
<table class="table table-hover table-condensed">
|
|
<tbody>
|
|
<tr>
|
|
<td><strong>开始时间:</strong> %s</td>
|
|
</tr>
|
|
<td><strong>结束时间:</strong> %s</td></tr>
|
|
<td><strong>耗时:</strong> %s</td></tr>
|
|
<td><strong>结果:</strong>
|
|
<span >Pass: <strong >%s</strong>
|
|
Fail: <strong >%s</strong>
|
|
exception: <strong >%s</strong>
|
|
weizhicuowu : <strong >%s</strong></span></td>
|
|
</tr>
|
|
</tbody></table>
|
|
</div> '''%(starttime,endtime,(endtime-starttime),passge,fail,excepthions,weizhicuowu)
|
|
return beijing
|
|
shanghai='''<div class="row " style="margin:60px">
|
|
<div style=' margin-top: 18%;' >
|
|
<div class="btn-group" role="group" aria-label="...">
|
|
<button type="button" id="check-all" class="btn btn-primary">所有用例</button>
|
|
<button type="button" id="check-success" class="btn btn-success">成功用例</button>
|
|
<button type="button" id="check-danger" class="btn btn-danger">失败用例</button>
|
|
<button type="button" id="check-warning" class="btn btn-warning">错误用例</button>
|
|
<button type="button" id="check-except" class="btn btn-defult">异常用例</button>
|
|
</div>
|
|
<div class="btn-group" role="group" aria-label="...">
|
|
</div>
|
|
<table class="table table-hover table-condensed table-bordered" style="word-wrap:break-word; word-break:break-all; margin-top: 7px;">
|
|
<tr >
|
|
<td ><strong>用例ID </strong></td>
|
|
<td><strong>用例名字</strong></td>
|
|
<td><strong>key</strong></td>
|
|
<td><strong>请求内容</strong></td>
|
|
<td><strong>url</strong></td>
|
|
<td><strong>请求方式</strong></td>
|
|
<td><strong>预期</strong></td>
|
|
<td><strong>实际返回</strong></td>
|
|
<td><strong>结果</strong></td>
|
|
</tr>
|
|
'''
|
|
def passfail(tend):
|
|
if tend =='pass':
|
|
htl='''<td bgcolor="green">pass</td>'''
|
|
elif tend =='fail':
|
|
htl='''<td bgcolor="fail">fail</td>'''
|
|
elif tend=='weizhi':
|
|
htl='''<td bgcolor="red">error</td>'''
|
|
else:
|
|
htl = '<td bgcolor="crimson">exect</td>'
|
|
return htl
|
|
def ceshixiangqing(reslt,id,name,key,coneent,url,meth,yuqi,json,relust):
|
|
xiangqing='''
|
|
<tr class="case-tr %s">
|
|
<td>%s</td>
|
|
<td>%s</td>
|
|
<td>%s</td>
|
|
<td>%s</td>
|
|
<td>%s</td>
|
|
<td>%s</td>
|
|
<td>%s</td>
|
|
<td>%s</td>
|
|
%s
|
|
</tr>
|
|
'''%(reslt,id,name,key,coneent,url,meth,yuqi,json,passfail(relust))
|
|
return xiangqing
|
|
weibu='''</div></div></table><script src="https://code.jquery.com/jquery.js"></script>
|
|
<script src="https://cdn.bootcss.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
|
|
<script type="text/javascript">
|
|
$("#check-danger").click(function(e){
|
|
$(".case-tr").removeClass("hidden-tr");
|
|
$(".success").addClass("hidden-tr");
|
|
$(".warning").addClass("hidden-tr");
|
|
$(".error").addClass("hidden-tr");
|
|
});
|
|
$("#check-warning").click(function(e){
|
|
$(".case-tr").removeClass("hidden-tr");
|
|
$(".success").addClass("hidden-tr");
|
|
$(".danger").addClass("hidden-tr");
|
|
$(".error").addClass("hidden-tr");
|
|
});
|
|
$("#check-success").click(function(e){
|
|
$(".case-tr").removeClass("hidden-tr");
|
|
$(".warning").addClass("hidden-tr");
|
|
$(".danger").addClass("hidden-tr");
|
|
$(".error").addClass("hidden-tr");
|
|
});
|
|
$("#check-except").click(function(e){
|
|
$(".case-tr").removeClass("hidden-tr");
|
|
$(".warning").addClass("hidden-tr");
|
|
$(".danger").addClass("hidden-tr");
|
|
$(".success").addClass("hidden-tr");
|
|
});
|
|
$("#check-all").click(function(e){
|
|
$(".case-tr").removeClass("hidden-tr");
|
|
});
|
|
</script>
|
|
</body></html>'''
|
|
def relust(titles,starttime,endtime,passge,fail,id,name,key,coneent,url,meth,yuqi,json,relust,exceptions,weizhi):
|
|
if type(name) ==list:
|
|
relus=' '
|
|
for i in range(len(name)):
|
|
if relust[i] == "pass":
|
|
clazz = "success"
|
|
elif relust[i]== "fail":
|
|
clazz = "warning"
|
|
elif relust[i]== "weizhi":
|
|
clazz = "danger"
|
|
else:
|
|
clazz='error'
|
|
relus+=(ceshixiangqing(clazz,id[i],name[i],key[i],coneent[i],url[i],meth[i],yuqi[i],json[i],relust[i]))
|
|
text=title(titles)+connent+shouye(starttime,endtime,passge,fail,exceptions,weizhi)+shanghai+relus+weibu
|
|
else:
|
|
text=title(titles)+connent+shouye(starttime,endtime,passge,fail,exceptions,weizhi)+shanghai+ceshixiangqing(id,name,key,coneent,url,meth,yuqi,json,relust)+weibu
|
|
return text
|
|
def createHtml(filepath,titles,starttime,endtime,passge,fail,id,name,key,coneent,url,meth,yuqi,json,relusts,exceptions,weizhi):
|
|
texts=relust(titles,starttime,endtime,passge,fail,id,name,key,coneent,url,meth,yuqi,json,relusts,exceptions,weizhi)
|
|
with open(filepath,'wb') as f:
|
|
f.write(texts.encode('utf-8')) |