实现了整个接口框架的大致功能,优化测试报告

This commit is contained in:
liwanlei
2017-06-06 11:05:50 +08:00
parent 5242cf8ca6
commit 826e66bdc7
10 changed files with 394 additions and 266 deletions

View File

@@ -8,8 +8,7 @@ import unittest,os
from Public import BSTestRunner
from Interface.get_excel import datacel
from Interface.testFengzhuang import TestApi
listid,listkey,listconeent,listurl,listfangshi,listqiwang=datacel()
listid,listkey,listconeent,listurl,listfangshi,listqiwang,listname=datacel()
class Testinface(unittest.TestCase):
def setUp(self):
pass
@@ -20,16 +19,37 @@ class Testinface(unittest.TestCase):
list_fail = 0
list_json = []
listrelust=[]
listurls=[]
listkeys=[]
listids=[]
listconeents=[]
listfangshis=[]
listqiwangs=[]
listnames=[]
for i in range(len(listurl)):
api=TestApi(url=listurl[i],key=listkey[i],connent=listconeent[i],fangshi=listfangshi[i])
apicode=api.getcode()
apijson=api.getJson()
if apicode==int(listqiwang[i]):
listids.append(listid[i])
listurls.append(listurl[i])
listkeys.append(listkey[i])
listconeents.append(listconeent[i])
listfangshis.append(listfangshi[i])
listqiwangs.append(listqiwang[i])
listnames.append(listname[i])
list_json.append((apijson))
listrelust.append('pass')
list_pass += 1
else:
listids.append(listid[i])
listurls.append(listurl[i])
listkeys.append(listkey[i])
listconeents.append(listconeent[i])
listfangshis.append(listfangshi[i])
listqiwangs.append(listqiwang[i])
listnames.append(listname[i])
list_fail+=1
listrelust.append('fail')
list_json.append((apijson))
return list_fail,list_pass,list_json
return list_fail,list_pass,list_json,listurls,listkeys,listconeents,listfangshis,listqiwangs,listids,listrelust,listnames

Binary file not shown.

View File

@@ -20,11 +20,13 @@ def datacel():
listfangshi=[]
listqiwang=[]
listrelut=[]
listname=[]
for i in range(1,nrows):
listid.append(me.cell(i,1).value)
listid.append(me.cell(i,0).value)
listkey.append(me.cell(i,2).value)
listconeent.append(me.cell(i,3).value)
listurl.append(me.cell(i,4).value)
listname.append(me.cell(i,1).value)
listfangshi.append((me.cell(i,5).value))
listqiwang.append((me.cell(i,6).value))
return listid,listkey,listconeent,listurl,listfangshi,listqiwang
return listid,listkey,listconeent,listurl,listfangshi,listqiwang,listname

View File

@@ -3,7 +3,7 @@
@author: lileilei
@site:
@software: PyCharm
@file: pyh.py
@file: py_Html.py
@time: 2017/6/5 17:04
"""
import os
@@ -22,17 +22,18 @@ def title(titles):
'''%(titles)
return title
connent='''
<div style='width: 1170px;margin-left: 10%'>
<div style='width: 1170px;margin-left: 20%'>
<h1>接口测试的结果</h1>'''
def time(starttime,endtime,passge,fail):
beijing='''
<p><strong>开始时间:</strong> %s</p>
<p><strong>花费时间:</strong> %s</p>
<p><strong>结束时间:</strong> %s</p>
<p><strong>耗时:</strong> %s</p>
<p><strong>结果:</strong>
<span >Pass: <strong >%s</strong>
Fail: <strong >%s</strong>
</span></p>
<p ><strong>测试详情如下</strong></p> </div> '''%(starttime,endtime,passge,fail)
<p ><strong>测试详情如下</strong></p> </div> '''%(starttime,endtime,(endtime-starttime),passge,fail)
return beijing
shanghai='''
@@ -43,7 +44,7 @@ shanghai='''
<td ><strong>用例ID&nbsp;</strong></td>
<td><strong>用例名字</strong></td>
<td><strong>key</strong></td>
<td><strong>coneent</strong></td>
<td><strong>请求内容</strong></td>
<td><strong>url</strong></td>
<td><strong>请求方式</strong></td>
<td><strong>预期</strong></td>
@@ -82,21 +83,17 @@ weibu='''
</body>
</html>'''
def relust(titles,starttime,endtime,passge,fail,id,name,key,coneent,url,meth,yuqi,json,relust):
if type(name) ==list:
relus=' '
for i in range(len(name)):
relus+=(ceshixiangqing(id[i],name[i],key[i],coneent[i],url[i],meth[i],yuqi[i],json[i],relust[i]))
relus+=(ceshixiangqing(id[i],name[i],key[i],coneent[i],url[i],meth[i],int(yuqi[i]),json[i],relust[i]))
text=title(titles)+connent+time(starttime,endtime,passge,fail)+shanghai+relus+weibu
else:
text=title(titles)+connent+time(starttime,endtime,passge,fail)+shanghai+ceshixiangqing(id,name,key,coneent,url,meth,yuqi,json,relust)+weibu
text=title(titles)+connent+time(starttime,endtime,passge,fail)+shanghai+ceshixiangqing(id,name,key,coneent,url,meth,int(yuqi),json,relust)+weibu
return text
def createHtml(filepath,titles,starttime,endtime,passge,fail,id,name,key,coneent,url,meth,yuqi,json,relusts):
texts=relust(titles,starttime,endtime,passge,fail,id,name,key,coneent,url,meth,yuqi,json,relusts)
with open(filepath,'wb') as f:
f.write(texts.encode())
if __name__ =='__main__':
createHtml(filepath='..\\report\\relult.html',titles='接口测试报告',starttime='2017',endtime='2012',passge=12,fail=2,id=[1,2,3],
name=[2,3,4],key=['aaa','aaa','aaa'],coneent=['被警','被警','被警'],
url=['http://www.baidu.com','http://www.baidu.com','http://www.baidu.com'],meth=['post','post','post'],yuqi=['121','121',''],
json=['2','3','m'],relusts=['pass','fail','fail'])

View File

@@ -5,4 +5,3 @@
### 产生的测试报告后续需要优化当前生成的测试报告以及对测试用例中的预期进行优化目前使用的yaml管理的用来不能
### 直接运行需要接下来优化的功能。

BIN
img/cebaogaotu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
img/xiangmujiegoutu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

13
main.py
View File

@@ -2,13 +2,14 @@
# @Author : leizi
import os,time,unittest,datetime
from Case.ceshiyongli import Testinface
from Public.pyh import createHtml
from Public.py_Html import createHtml
'''
这里你可以分开执行上面你case里面包含的用例。也可以单独执行里面
的某一个的测试用例
'''
from Public import BSTestRunner
from Interface.emmail import sendemali
from Public.py_Html import createHtml
if __name__ == '__main__':
# suite = unittest.TestSuite()
# suite.addTest(Test_tuling("test_post4"))
@@ -28,14 +29,12 @@ if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(Testinface("testinterface"))
me=Testinface()
list_file, list_pass,list_json=me.testinterface()
print(list_file,list_pass,list_json)
filedir = ".\\report\\"
filename = "pyresult.html"
filepath =filedir+filename
list_fail, list_pass, list_json, listurls, listkeys, listconeents, listfangshis, listqiwangs, listids, listrelust, listnames=me.testinterface()
filepath =r'C:\Users\Administrator\Desktop\jiekou\\report\\relult.html'
if os.path.exists(filepath) is False:
os.system(r'touch %s' % filename)
os.system(r'touch %s' % filepath)
endtime=datetime.datetime.now()
createHtml(titles='接口测试报告',filepath=filepath,starttime=starttime,endtime=endtime,passge=list_pass,fail=list_fail,id=listids,name=listnames,key=listkeys,coneent=listconeents,url=listurls,meth=listfangshis,yuqi=listqiwangs,json=list_json,relusts=listrelust)
# fp = open(filepath, 'wb')
# runner = BSTestRunner.BSTestRunner(stream=fp, title=u'接口测试的结果', description='这是post接口测试报告如下')
# runner.run(suite)

View File

@@ -1,211 +0,0 @@
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>接口测试的结果</title>
<meta name="generator" content="BSTestRunner 0.8.4"/>
<link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css">
<style type="text/css" media="screen">
/* -- css div popup ------------------------------------------------------------------------ */
.popup_window {
display: none;
position: relative;
left: 0px;
top: 0px;
/*border: solid #627173 1px; */
padding: 10px;
background-color: #99CCFF;
font-family: "Lucida Console", "Courier New", Courier, monospace;
text-align: left;
font-size: 10pt;
width: 1200px;
}
/* -- report ------------------------------------------------------------------------ */
#show_detail_line .label {
font-size: 85%;
cursor: pointer;
}
#show_detail_line {
margin: 2em auto 1em auto;
}
#total_row { font-weight: bold; }
.hiddenRow { display: none; }
.testcase { margin-left: 2em; }
</style>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="http://cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="http://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<script language="javascript" type="text/javascript"><!--
output_list = Array();
/* level - 0:Summary; 1:Failed; 2:All */
function showCase(level) {
trs = document.getElementsByTagName("tr");
for (var i = 0; i < trs.length; i++) {
tr = trs[i];
id = tr.id;
if (id.substr(0,2) == 'ft') {
if (level < 1) {
tr.className = 'hiddenRow';
}
else {
tr.className = '';
}
}
if (id.substr(0,2) == 'pt') {
if (level > 1) {
tr.className = '';
}
else {
tr.className = 'hiddenRow';
}
}
}
}
function showClassDetail(cid, count) {
var id_list = Array(count);
var toHide = 1;
for (var i = 0; i < count; i++) {
tid0 = 't' + cid.substr(1) + '.' + (i+1);
tid = 'f' + tid0;
tr = document.getElementById(tid);
if (!tr) {
tid = 'p' + tid0;
tr = document.getElementById(tid);
}
id_list[i] = tid;
if (tr.className) {
toHide = 0;
}
}
for (var i = 0; i < count; i++) {
tid = id_list[i];
if (toHide) {
document.getElementById('div_'+tid).style.display = 'none'
document.getElementById(tid).className = 'hiddenRow';
}
else {
document.getElementById(tid).className = '';
}
}
}
function showTestDetail(div_id){
var details_div = document.getElementById(div_id)
var displayState = details_div.style.display
// alert(displayState)
if (displayState != 'block' ) {
displayState = 'block'
details_div.style.display = 'block'
}
else {
details_div.style.display = 'none'
}
}
function html_escape(s) {
s = s.replace(/&/g,'&amp;');
s = s.replace(/</g,'&lt;');
s = s.replace(/>/g,'&gt;');
return s;
}
/* obsoleted by detail in <div>
function showOutput(id, name) {
var w = window.open("", //url
name,
"resizable,scrollbars,status,width=800,height=450");
d = w.document;
d.write("<pre>");
d.write(html_escape(output_list[id]));
d.write("\n");
d.write("<a href='javascript:window.close()'>close</a>\n");
d.write("</pre>\n");
d.close();
}
*/
--></script>
<div class="container">
<div class='heading'>
<h1>接口测试的结果</h1>
<p><strong>Start Time:</strong> 2017-06-05 21:38:26</p>
<p><strong>Duration:</strong> 0:00:00.767820</p>
<p><strong>Status:</strong> <span class="text text-success">Pass <strong>1</strong></span></p>
<p class='description'>这是post接口测试报告如下</p>
</div>
<p id='show_detail_line'>
<span class="label label-primary" onclick="showCase(0)">Summary</span>
<span class="label label-danger" onclick="showCase(1)">Failed</span>
<span class="label label-default" onclick="showCase(2)">All</span>
</p>
<table id='result_table' class="table">
<thead>
<tr id='header_row'>
<th>Test Group/Test Case</td>
<th>Count</td>
<th>Pass</td>
<th>Fail</td>
<th>Error</td>
<th>View</td>
</tr>
</thead>
<tbody>
<tr class='text text-success'>
<td>Case.ceshiyongli.Testinface</td>
<td>1</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td><a class="btn btn-xs btn-primary"href="javascript:showClassDetail('c1',1)">Detail</a></td>
</tr>
<tr id='pt1.1' class='hiddenRow'>
<td class='text text-success'><div class='testcase'>testinterface</div></td>
<td colspan='5' align='center'>pass</td>
</tr>
</tbody>
<tfoot>
<tr id='total_row'>
<td>Total</td>
<td>1</td>
<td class="text text-success">1</td>
<td class="text text-danger">0</td>
<td class="text text-warning">0</td>
<td>&nbsp;</td>
</tr>
</tfoot>
</table>
<div id='ending'>&nbsp;</div>
</div>
</body>
</html>

View File

@@ -9,13 +9,14 @@
</head>
<body>
<div style='width: 1170px;margin-left: 10%'>
<div style='width: 1170px;margin-left: 20%'>
<h1>接口测试的结果</h1>
<p><strong>开始时间:</strong> 2017</p>
<p><strong>花费时间:</strong> 2012</p>
<p><strong>开始时间:</strong> 2017-06-06 10:49:05.197951</p>
<p><strong>结束时间:</strong> 2017-06-06 10:49:06.661035</p>
<p><strong>耗时:</strong> 0:00:01.463084</p>
<p><strong>结果:</strong>
<span >Pass: <strong >12</strong>
Fail: <strong >2</strong>
<span >Pass: <strong >16</strong>
Fail: <strong >8</strong>
</span></p>
<p ><strong>测试详情如下</strong></p> </div>
@@ -26,7 +27,7 @@
<td ><strong>用例ID&nbsp;</strong></td>
<td><strong>用例名字</strong></td>
<td><strong>key</strong></td>
<td><strong>coneent</strong></td>
<td><strong>请求内容</strong></td>
<td><strong>url</strong></td>
<td><strong>请求方式</strong></td>
<td><strong>预期</strong></td>
@@ -35,50 +36,371 @@
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>1.0</td>
<td>图灵api接口</td>
<td>aaa</td>
<td>被警
<td>aaaa</td>
<td>sasa
</td>
<td>http://www.baidu.com</td>
<td>post</td>
<td>121</td>
<td>2</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40002</td>
<td>{'code': 40001, 'text': '亲爱的key不对哦。'}</td>
<td bgcolor="fail">fail</td>
</tr>
<tr>
<td>2.0</td>
<td>图灵api接口</td>
<td>dfeb1cc8125943d29764a2f2f5c33739</td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api
</td>
<td>POST</td>
<td>40008</td>
<td>{'code': 40002, 'text': '你想说什么就直说,不用藏在心里哈~'}</td>
<td bgcolor="fail">fail</td>
</tr>
<tr>
<td>3.0</td>
<td>图灵api接口</td>
<td></td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40007</td>
<td>{'code': 40007, 'text': '您的请求内容为空。'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>2</td>
<td>3</td>
<td>4.0</td>
<td>图灵api接口</td>
<td>aaa</td>
<td>被警
<td></td>
<td>
</td>
<td>http://www.baidu.com</td>
<td>post</td>
<td>121</td>
<td>3</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40007</td>
<td>{'code': 40007, 'text': '您的请求内容为空。'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>5.0</td>
<td>图灵api接口</td>
<td>aaaa</td>
<td>sasa
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40001</td>
<td>{'code': 40001, 'text': '亲爱的key不对哦。'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>6.0</td>
<td>图灵api接口</td>
<td>dfeb1cc8125943d29764a2f2f5c33739</td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api
</td>
<td>POST</td>
<td>40002</td>
<td>{'code': 40002, 'text': '干哈呀?'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>7.0</td>
<td>图灵api接口</td>
<td></td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>0</td>
<td>{'code': 40007, 'text': '您的请求内容为空。'}</td>
<td bgcolor="fail">fail</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
<td>8.0</td>
<td>图灵api接口</td>
<td>aaa</td>
<td>被警
</td>
<td>http://www.baidu.com</td>
<td>post</td>
<td></td>
<td>m</td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40007</td>
<td>{'code': 40007, 'text': '您的请求内容为空。'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>9.0</td>
<td>图灵api接口</td>
<td>aaaa</td>
<td>sasa
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40001</td>
<td>{'code': 40001, 'text': '亲爱的key不对哦。'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>10.0</td>
<td>图灵api接口</td>
<td>dfeb1cc8125943d29764a2f2f5c33739</td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api
</td>
<td>POST</td>
<td>40002</td>
<td>{'code': 40002, 'text': '有什么话不方便说嘛?'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>11.0</td>
<td>图灵api接口</td>
<td></td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>0</td>
<td>{'code': 40007, 'text': '您的请求内容为空。'}</td>
<td bgcolor="fail">fail</td>
</tr>
<tr>
<td>12.0</td>
<td>图灵api接口</td>
<td></td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40007</td>
<td>{'code': 40007, 'text': '您的请求内容为空。'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>13.0</td>
<td>图灵api接口</td>
<td>aaaa</td>
<td>sasa
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40002</td>
<td>{'code': 40001, 'text': '亲爱的key不对哦。'}</td>
<td bgcolor="fail">fail</td>
</tr>
<tr>
<td>14.0</td>
<td>图灵api接口</td>
<td>dfeb1cc8125943d29764a2f2f5c33739</td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api
</td>
<td>POST</td>
<td>40008</td>
<td>{'code': 40002, 'text': '有什么话不方便说嘛?'}</td>
<td bgcolor="fail">fail</td>
</tr>
<tr>
<td>15.0</td>
<td>图灵api接口</td>
<td></td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40007</td>
<td>{'code': 40007, 'text': '您的请求内容为空。'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>16.0</td>
<td>图灵api接口</td>
<td></td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40007</td>
<td>{'code': 40007, 'text': '您的请求内容为空。'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>17.0</td>
<td>图灵api接口</td>
<td>aaaa</td>
<td>sasa
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40001</td>
<td>{'code': 40001, 'text': '亲爱的key不对哦。'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>18.0</td>
<td>图灵api接口</td>
<td>dfeb1cc8125943d29764a2f2f5c33739</td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api
</td>
<td>POST</td>
<td>40002</td>
<td>{'code': 40002, 'text': '有啥事吗?'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>19.0</td>
<td>图灵api接口</td>
<td></td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>0</td>
<td>{'code': 40007, 'text': '您的请求内容为空。'}</td>
<td bgcolor="fail">fail</td>
</tr>
<tr>
<td>20.0</td>
<td>图灵api接口</td>
<td></td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40007</td>
<td>{'code': 40007, 'text': '您的请求内容为空。'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>21.0</td>
<td>图灵api接口</td>
<td>aaaa</td>
<td>sasa
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40001</td>
<td>{'code': 40001, 'text': '亲爱的key不对哦。'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>22.0</td>
<td>图灵api接口</td>
<td>dfeb1cc8125943d29764a2f2f5c33739</td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api
</td>
<td>POST</td>
<td>40002</td>
<td>{'code': 40002, 'text': '干啥呀?'}</td>
<td bgcolor="green">pass</td>
</tr>
<tr>
<td>23.0</td>
<td>图灵api接口</td>
<td></td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>0</td>
<td>{'code': 40007, 'text': '您的请求内容为空。'}</td>
<td bgcolor="fail">fail</td>
</tr>
<tr>
<td>24.0</td>
<td>图灵api接口</td>
<td></td>
<td>
</td>
<td>http://www.tuling123.com/openapi/api</td>
<td>POST</td>
<td>40007</td>
<td>{'code': 40007, 'text': '您的请求内容为空。'}</td>
<td bgcolor="green">pass</td>
</tr>
</table>
</body>