™优化代码

This commit is contained in:
liwanlei
2018-03-12 21:00:36 +08:00
parent cc42df0af4
commit 407e05690f
17 changed files with 559 additions and 79 deletions

View File

@@ -3,7 +3,6 @@
# @Author : lileilei
# @Site :
# @File : testFengzhuang.py
# @Software: PyCharm
from Interface.test_requests import requ
reques=requ()
class TestApi(object):
@@ -25,4 +24,4 @@ class TestApi(object):
return code
def getJson(self):
json_data = self.testapi()
return json_data
return json_data

View File

@@ -1 +1 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-

View File

@@ -13,4 +13,3 @@ def save_result(testtime,toial,passnum,fail):
f.close()
except:
LOG.info('保存测试结果出错,原因:%s'%Exception)
print('记录测试结果失败')

View File

@@ -41,6 +41,4 @@ def makedata():
for i in range(len(listid)):
make_data.append({'url':listurl[i],'key':listkey[i],'coneent':listconeent[i],'fangshi':listfangshi[i],'qiwang':listqiwang[i]})
i+=1
return make_data
return make_data

View File

@@ -14,13 +14,11 @@ if not os.path.exists(LOG_DIR):
def get_logger(name='jiekou', file_log=file_stream, level=''):
""" get logger Factory function """
logbook.set_datetime_format('local')
ColorizedStderrHandler(bubble=False, level=level).push_thread()
logbook.TimedRotatingFileHandler(
os.path.join(LOG_DIR, '%s.log' % name),
date_format='%Y-%m-%d-%H', bubble=True, encoding='utf-8').push_thread()
os.path.join(LOG_DIR, '%s.log' % name),
date_format='%Y-%m-%d-%H', bubble=True, encoding='utf-8').push_thread()
return logbook.Logger(name)
LOG = get_logger(file_log=file_stream, level='INFO')
def logger(param):
""" fcuntion from logger meta """
@@ -34,5 +32,4 @@ def logger(param):
# LOG.info("全部kwargs参数信息 , {}".format(str(kwargs)))
return function(*args, **kwargs)
return _wrap
return wrap
return wrap

View File

@@ -10,12 +10,12 @@ def assert_in(asserqiwang,fanhuijson):
value1=([(str(fanhuijson[key])) for key in result.keys()])
value2=([(str(value)) for value in result.values()])
if value1==value2:
return 'pass'
return { 'code':2,"result":'pass'}
else:
return 'fail'
return {'code':0,'result':'fail'}
else:
LOG.info('填写测试预期值')
raise ('填写期')
return {"code":1,'result':'填写测试预期值'}
@logger('断言测试结果')
def assertre(asserqingwang):
if len(asserqingwang.split('=')) > 1:
@@ -24,5 +24,4 @@ def assertre(asserqingwang):
return result
else:
LOG.info('填写测试预期值')
raise ('填写期')
raise {"code":1,'result':'填写测试预期值'}

View File

@@ -7,7 +7,7 @@
import os
titles='接口测试'
def title(titles):
title='''<!DOCTYPE html>
title='''<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
@@ -18,12 +18,12 @@ def title(titles):
</head>
<body>
'''%(titles)
return title
return title
connent='''
<div style='width: 1170px;margin-left: 15%'>
<h1>接口测试的结果</h1>'''
def time(starttime,endtime,passge,fail):
beijing='''
beijing='''
<p><strong>开始时间:</strong> %s</p>
<p><strong>结束时间:</strong> %s</p>
<p><strong>耗时:</strong> %s</p>
@@ -32,10 +32,8 @@ def time(starttime,endtime,passge,fail):
Fail: <strong >%s</strong>
</span></p>
<p ><strong>测试详情如下</strong></p> </div> '''%(starttime,endtime,(endtime-starttime),passge,fail)
return beijing
return beijing
shanghai='''
<p>&nbsp;</p>
<table border='2'cellspacing='1' cellpadding='1' width='1100'align="center" >
<tr >
@@ -90,6 +88,6 @@ def relust(titles,starttime,endtime,passge,fail,id,name,key,coneent,url,meth,yuq
text=title(titles)+connent+time(starttime,endtime,passge,fail)+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):
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())
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())

View File

@@ -4,7 +4,7 @@
@file: pyreport_excel.py
@time: 2017/6/7 8:47
"""
import xlrd ,os,xlwt,yaml,xlsxwriter #导入库
import xlwt,yaml
from xlwt import *
def yangshi1():
style = XFStyle()

View File

@@ -1,59 +1,32 @@
# 接口测试框架基于json格式、http请求,python3,不兼容python2.x版本
## 注现在基于Excel文件管理测试用例基本实现,)
## (目前在部分window上会出现FileNotFoundError [Errno 2] No such file or directory这个bug是路径过长,解决方案为吧log日志放在当前目录或者修改动态生成的文件的名字给了第一种方式测试日志放在当前目录
## qq交流群194704520  一群 683894834 二群
### 使用的库 requests绝大部分是基于Python原有的库进行的这样简单方便
### 使用脚本参数分离等思想,尽可能降低代码的耦合度。
# 2017-11-1版本修改
## 引入ddt数据驱动和BSTestRunner并且测试过程使用python的unittest库运行可以使用run_new来运行测试新的运行更加简单对预期结果进行了自定义
## 并且对预期结果的自定义格式进行转换,升级后的接口测试框架提供了两套的运行模式,一套是封装后基于自定义的断言格式的接口测试的框架,比较简单粗糙,但是
## 定义的报告更加具有代表性一套是封装好完全基于python库的接口测试。使用起来简单可以供大家选择新增加测试用例格式为ddt_case.py的格式。
# 运行后的测试报告如下
![Alt text](https://github.com/liwanlei/jiekou-python3/blob/master/img/%E6%96%B0%E7%89%88%E6%9C%AC%E6%B5%8B%E8%AF%95%E6%8A%A5%E5%91%8A.png)
# log日志
![Alt text](https://github.com/liwanlei/jiekou-python3/blob/master/img/xinbanbenlog.png)
# 新增后可以提供两个入口让供你选择,
## 一自定义断言方式自定义测试报告提供Excelhtml格式报告均为自定义。
## 二引用unittestddt和BSTestRunner等让测试用例更加简单明了代码更加简洁。通俗易懂且使用更多成熟的框架。
# ---------------旧版本内容---------
# 首先我们来看下我们的目录
##
![Alt text](https://github.com/liwanlei/jiekou-python3/blob/master/img/xiangmujiegoutu.png)
##
### 1.Case文件夹用来存放我们的测试用例相关的
### 2.test_case用来存储我们的测试数据Excel管理测试用例yaml文件管理测试用例后续要把yaml管理测试用例的也封装出来。
### 3.Interface对测试接口相关的封装包括requests库发送测试报告的email的封装从Excel取测试数据的封装
### 4.Public 展示测试报告相关的脚本,这里可以自己封装,也可以使用现成的,我这里是基于我自己封装的,最后生成的测试报告更加易懂,出错可以尽快排查相关原因
### 5.report 存放测试报告,
### 6.run_excel_re.py/run_html.py 主运行文件。运行后可以生成相应的测试报告
##
## 产生的html测试报告如下
![Alt text](https://github.com/liwanlei/jiekou/blob/master/img/cebaogaotu.png)
##

View File

@@ -0,0 +1,38 @@
[2017-12-09 18:15:33.955360] INFO: jiekou: 当前模块 requests封装
[2017-12-09 18:16:43.485683] INFO: jiekou: 当前模块 requests封装
[2017-12-09 18:16:43.532483] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2017-12-09 18:16:43.532483] INFO: jiekou: 当前模块 解析测试用例文件
[2017-12-09 18:17:16.059540] INFO: jiekou: 当前模块 requests封装
[2017-12-09 18:17:16.106340] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2017-12-09 18:17:16.106340] INFO: jiekou: 当前模块 解析测试用例文件
[2017-12-09 18:20:02.579929] INFO: jiekou: 当前模块 requests封装
[2017-12-09 18:20:03.219530] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2017-12-09 18:20:03.219530] INFO: jiekou: 当前模块 解析测试用例文件
[2017-12-09 18:20:47.820008] INFO: jiekou: 当前模块 requests封装
[2017-12-09 18:20:47.898009] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2017-12-09 18:20:47.898009] INFO: jiekou: 当前模块 解析测试用例文件
[2017-12-09 18:21:20.751666] INFO: jiekou: 当前模块 requests封装
[2017-12-09 18:21:21.204067] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2017-12-09 18:21:21.204067] INFO: jiekou: 当前模块 解析测试用例文件
[2017-12-09 18:23:26.887169] INFO: jiekou: 当前模块 requests封装
[2017-12-09 18:23:27.089970] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2017-12-09 18:23:27.089970] INFO: jiekou: 当前模块 解析测试用例文件
[2017-12-09 18:23:27.105570] INFO: jiekou: 当前模块 执行测试用例
[2017-12-09 18:23:48.478607] INFO: jiekou: 当前模块 requests封装
[2017-12-09 18:23:48.541007] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2017-12-09 18:23:48.541007] INFO: jiekou: 当前模块 解析测试用例文件
[2017-12-09 18:23:48.541007] INFO: jiekou: 当前模块 执行测试用例
[2017-12-09 18:24:06.779444] INFO: jiekou: 当前模块 requests封装
[2017-12-09 18:24:06.826244] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2017-12-09 18:24:06.826244] INFO: jiekou: 当前模块 解析测试用例文件
[2017-12-09 18:24:06.841844] INFO: jiekou: 当前模块 执行测试用例
[2017-12-09 18:24:25.171876] INFO: jiekou: 当前模块 requests封装
[2017-12-09 18:24:25.218676] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2017-12-09 18:24:25.218676] INFO: jiekou: 当前模块 解析测试用例文件
[2017-12-09 18:24:25.234276] INFO: jiekou: 当前模块 执行测试用例
[2017-12-09 18:25:04.967546] INFO: jiekou: 当前模块 requests封装
[2017-12-09 18:25:05.014346] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2017-12-09 18:25:05.014346] INFO: jiekou: 当前模块 解析测试用例文件
[2017-12-09 18:25:40.161208] INFO: jiekou: 当前模块 requests封装
[2017-12-09 18:25:40.208008] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2017-12-09 18:25:40.208008] INFO: jiekou: 当前模块 解析测试用例文件

View File

@@ -0,0 +1,189 @@
[2018-02-01 12:13:31.768228] INFO: jiekou: 当前模块 requests封装
[2018-02-01 12:13:32.744284] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2018-02-01 12:13:32.745284] INFO: jiekou: 当前模块 解析测试用例文件
[2018-02-01 12:13:32.965296] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:13:32.966296] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式POST
[2018-02-01 12:13:32.966296] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式None
[2018-02-01 12:13:33.035300] INFO: jiekou: 返回结果:{'code': 40001, 'text': '亲爱的key不对哦。'}
[2018-02-01 12:13:33.036300] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:13:33.036300] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:13:33.037300] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:13:33.037300] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式POST
[2018-02-01 12:13:33.038301] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式None
[2018-02-01 12:13:33.067302] INFO: jiekou: 返回结果:{'code': 40002, 'text': '此时无声胜有声?'}
[2018-02-01 12:13:33.068302] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:13:33.069302] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:13:33.069302] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:13:33.070302] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式GET
[2018-02-01 12:13:33.070302] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式None
[2018-02-01 12:13:33.071302] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:13:54.637536] INFO: jiekou: 当前模块 requests封装
[2018-02-01 12:13:54.729541] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2018-02-01 12:13:54.730541] INFO: jiekou: 当前模块 解析测试用例文件
[2018-02-01 12:13:54.750542] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:13:54.750542] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式POST
[2018-02-01 12:13:54.751542] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式None
[2018-02-01 12:13:54.784544] INFO: jiekou: 返回结果:{'code': 40001, 'text': '亲爱的key不对哦。'}
[2018-02-01 12:13:54.785544] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:13:54.785544] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:13:54.786544] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:13:54.787544] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式POST
[2018-02-01 12:13:54.787544] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式None
[2018-02-01 12:13:54.840548] INFO: jiekou: 返回结果:{'code': 40002, 'text': '有些话,难以说出口?'}
[2018-02-01 12:13:54.841548] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:13:54.841548] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:13:54.842548] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:13:54.842548] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式GET
[2018-02-01 12:13:54.843548] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式None
[2018-02-01 12:13:54.843548] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:16:35.866758] INFO: jiekou: 当前模块 requests封装
[2018-02-01 12:16:35.962763] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2018-02-01 12:16:35.963763] INFO: jiekou: 当前模块 解析测试用例文件
[2018-02-01 12:16:35.981764] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:16:35.982764] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式POST
[2018-02-01 12:16:35.982764] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式None
[2018-02-01 12:16:36.020767] INFO: jiekou: 返回结果:{'code': 40001, 'text': '亲爱的key不对哦。'}
[2018-02-01 12:16:36.021767] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:16:36.022767] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:16:36.022767] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:16:36.023767] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式POST
[2018-02-01 12:16:36.023767] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式None
[2018-02-01 12:16:36.055769] INFO: jiekou: 返回结果:{'code': 40002, 'text': '是不是有什么难言之隐呢?'}
[2018-02-01 12:16:36.056769] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:16:36.057769] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:16:36.057769] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:16:36.058769] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式GET
[2018-02-01 12:16:36.059769] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式None
[2018-02-01 12:16:36.059769] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:19:06.126352] INFO: jiekou: 当前模块 requests封装
[2018-02-01 12:19:06.222358] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2018-02-01 12:19:06.222358] INFO: jiekou: 当前模块 解析测试用例文件
[2018-02-01 12:19:06.241359] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:19:06.242359] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式POST
[2018-02-01 12:19:06.242359] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式None
[2018-02-01 12:19:06.274361] INFO: jiekou: 返回结果:{'code': 40001, 'text': '亲爱的key不对哦。'}
[2018-02-01 12:19:06.274361] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:19:06.275361] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:19:06.276361] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:19:06.276361] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式POST
[2018-02-01 12:19:06.277361] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式None
[2018-02-01 12:19:06.311363] INFO: jiekou: 返回结果:{'code': 40002, 'text': '是不是有什么难言之隐呢?'}
[2018-02-01 12:19:06.312363] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:19:06.313363] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:19:06.314363] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:19:06.315363] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式GET
[2018-02-01 12:19:06.316363] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式None
[2018-02-01 12:19:06.317363] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:19:35.810050] INFO: jiekou: 当前模块 requests封装
[2018-02-01 12:19:35.904055] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2018-02-01 12:19:35.904055] INFO: jiekou: 当前模块 解析测试用例文件
[2018-02-01 12:19:35.923056] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:19:35.924056] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式POST
[2018-02-01 12:19:35.924056] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式None
[2018-02-01 12:19:35.960058] INFO: jiekou: 返回结果:{'code': 40001, 'text': '亲爱的key不对哦。'}
[2018-02-01 12:19:35.960058] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:19:35.961059] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:19:35.962059] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:19:35.962059] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式POST
[2018-02-01 12:19:35.963059] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式None
[2018-02-01 12:19:35.994060] INFO: jiekou: 返回结果:{'code': 40002, 'text': '是不是有什么难言之隐呢?'}
[2018-02-01 12:19:35.995060] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:19:35.997061] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:19:35.998061] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:19:36.000061] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式GET
[2018-02-01 12:19:36.001061] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式None
[2018-02-01 12:19:36.002061] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:19:56.665243] INFO: jiekou: 当前模块 requests封装
[2018-02-01 12:19:56.761248] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2018-02-01 12:19:56.762248] INFO: jiekou: 当前模块 解析测试用例文件
[2018-02-01 12:19:56.782249] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:19:56.783249] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式POST
[2018-02-01 12:19:56.784250] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式None
[2018-02-01 12:19:56.824252] INFO: jiekou: 返回结果:{'code': 40001, 'text': '亲爱的key不对哦。'}
[2018-02-01 12:19:56.824252] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:19:56.825252] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:19:56.825252] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:19:56.826252] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式POST
[2018-02-01 12:19:56.826252] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式None
[2018-02-01 12:19:56.861254] INFO: jiekou: 返回结果:{'code': 40002, 'text': '你想和我说什么呢?'}
[2018-02-01 12:19:56.863254] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:19:56.865254] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:19:56.867254] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:19:56.868254] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式GET
[2018-02-01 12:19:56.870254] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式None
[2018-02-01 12:19:56.872255] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:20:06.977833] INFO: jiekou: 当前模块 requests封装
[2018-02-01 12:20:07.069838] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2018-02-01 12:20:07.070838] INFO: jiekou: 当前模块 解析测试用例文件
[2018-02-01 12:20:07.089839] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:20:07.090839] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式POST
[2018-02-01 12:20:07.091839] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式None
[2018-02-01 12:20:07.127841] INFO: jiekou: 返回结果:{'code': 40001, 'text': '亲爱的key不对哦。'}
[2018-02-01 12:20:07.128841] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:20:07.128841] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:20:07.129841] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:20:07.130841] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式POST
[2018-02-01 12:20:07.130841] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式None
[2018-02-01 12:20:07.165843] INFO: jiekou: 返回结果:{'code': 40002, 'text': '干啥呀?'}
[2018-02-01 12:20:07.166843] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:20:07.166843] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:20:07.167843] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:20:07.167843] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式GET
[2018-02-01 12:20:07.168843] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式None
[2018-02-01 12:20:07.168843] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:21:11.709535] INFO: jiekou: 当前模块 requests封装
[2018-02-01 12:21:11.799540] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2018-02-01 12:21:11.800540] INFO: jiekou: 当前模块 解析测试用例文件
[2018-02-01 12:21:11.819541] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:21:11.820541] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式POST
[2018-02-01 12:21:11.821541] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式None
[2018-02-01 12:21:11.991551] INFO: jiekou: 返回结果:{'code': 40001, 'text': '亲爱的key不对哦。'}
[2018-02-01 12:21:11.992551] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:21:11.993551] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:21:11.994551] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:21:11.994551] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式POST
[2018-02-01 12:21:11.995551] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式None
[2018-02-01 12:21:12.077556] INFO: jiekou: 返回结果:{'code': 40002, 'text': '此时无声胜有声?'}
[2018-02-01 12:21:12.078556] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:21:12.079556] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:21:12.079556] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:21:12.080556] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式GET
[2018-02-01 12:21:12.080556] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式None
[2018-02-01 12:21:12.081556] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:35:13.765698] INFO: jiekou: 当前模块 requests封装
[2018-02-01 12:35:13.880704] INFO: jiekou: 当前模块 生成数据驱动所用数据
[2018-02-01 12:35:13.880704] INFO: jiekou: 当前模块 解析测试用例文件
[2018-02-01 12:35:13.901706] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:35:13.902706] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式POST
[2018-02-01 12:35:13.902706] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式None
[2018-02-01 12:35:13.959709] INFO: jiekou: 返回结果:{'code': 40001, 'text': '亲爱的key不对哦。'}
[2018-02-01 12:35:13.960709] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:35:13.960709] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:35:13.961709] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:35:13.961709] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式POST
[2018-02-01 12:35:13.962709] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式None
[2018-02-01 12:35:13.994711] INFO: jiekou: 返回结果:{'code': 40002, 'text': '你想说什么就直说,不用藏在心里哈~'}
[2018-02-01 12:35:13.994711] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:35:13.995711] INFO: jiekou: 测试用例执行完毕
[2018-02-01 12:35:13.996711] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:35:13.996711] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式GET
[2018-02-01 12:35:13.997711] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式None
[2018-02-01 12:35:13.998711] INFO: jiekou: 测试用例执行完毕

View File

@@ -7,7 +7,6 @@
from Public.pyreport_excel import create
import os,threading,datetime
from testCase.case import testinterface
from Public.emmail import sendemali
from Public.get_excel import datacel
from Public.create_report import save_result
def start():
@@ -23,10 +22,5 @@ def start():
create(filename=filepath,list_fail=list_fail, list_pass=list_pass, list_json=list_json, listurls=listurl,
listkeys=listkey,listconeents=listconeent, listfangshis=listfangshi, listqiwangs=listqiwang,
listids=listid, listrelust=listrelust, listnames=listname)
def teThread():
st = datetime.datetime.now()
m = threading.Thread(target=start, args=())
m.run()
end = datetime.datetime.now()
if __name__ == '__main__':
teThread()
start()

View File

@@ -1,12 +1,10 @@
# -*- coding: utf-8 -*-
# @Author : leizi
import unittest,os,datetime,time
import os,datetime,time
from testCase.case import testinterface
from Public.py_Html import createHtml
from Public.get_excel import datacel
from Public.emmail import sendemali
from Public.create_report import save_result
import threading
def stast():
starttime=datetime.datetime.now()
day= time.strftime("%Y%m%d%H%M", time.localtime(time.time()))
@@ -22,13 +20,5 @@ def stast():
endtime=endtime,passge=list_pass,fail=list_fail,
id=listid,name=listname,key=listkey,coneent=listconeent,url=listurl,meth=listfangshi,
yuqi=listqiwang,json=list_json,relusts=listrelust)
# sendemali(filepath)
def tThread():
m=threading.Thread(target=stast,args=())
m.run()
if __name__ == '__main__':
tThread()
stast()

View File

@@ -12,4 +12,4 @@ if __name__=='__main__':
file = os.path.join(file_dir, (now + '.html'))
re_open = open(file, 'wb')
runner = BSTestRunner.BSTestRunner(stream=re_open, title='接口测试报告', description='测试结果')
runner.run(suite)
m=runner.run(suite)

View File

@@ -1,8 +1,8 @@
from Interface.testFengzhuang import TestApi
from Public.get_excel import datacel,makedata
from Public.log import LOG,logger
from Public.get_excel import makedata
from Public.log import LOG
from Public.panduan import assertre
import ddt,unittest,time,os
import ddt,unittest
data_test=makedata()
@ddt.ddt
class MyTest(unittest.TestCase):
@@ -17,4 +17,4 @@ class MyTest(unittest.TestCase):
apijson = api.getJson()
LOG.info('返回结果:%s'%apijson)
qingwang=assertre(asserqingwang=data_test['qiwang'])
self.assertNotEqual(dict(qingwang),dict(apijson),msg='预期和返回不一致')
self.assertNotEqual(dict(qingwang),dict(apijson),msg='预期和返回不一致')

306
test_Report/2018-0201.html Normal file
View File

@@ -0,0 +1,306 @@
<!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> 2018-02-01 12:35:13</p>
<p><strong>Duration:</strong> 0:00:00.099005</p>
<p><strong>Status:</strong> <span class="text text-success">Pass <strong>2</strong></span> <span class="text text-warning">Error <strong>1</strong></span></p>
<p class='description'>测试结果</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-warning'>
<td>testCase.ddt_case.MyTest</td>
<td>3</td>
<td>2</td>
<td>0</td>
<td>1</td>
<td><a class="btn btn-xs btn-primary"href="javascript:showClassDetail('c1',3)">Detail</a></td>
</tr>
<tr id='pt1.1' class='hiddenRow'>
<td class='text text-success'><div class='testcase'>test_api_1</div></td>
<td colspan='5' align='center'>
<!--css div popup start-->
<a class="popup_link btn btn-xs btn-default" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.1')" >
pass</a>
<div id='div_pt1.1' class="popup_window">
<div style='text-align: right;cursor:pointer'>
<a onfocus='this.blur();' onclick="document.getElementById('div_pt1.1').style.display = 'none' " >
[x]</a>
</div>
<pre>
pt1.1: [2018-02-01 12:35:13.901706] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:35:13.902706] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式POST
[2018-02-01 12:35:13.902706] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api,key:aaaa,参数:sasa,请求方式None
[2018-02-01 12:35:13.959709] INFO: jiekou: 返回结果:{'code': 40001, 'text': '亲爱的key不对哦。'}
[2018-02-01 12:35:13.960709] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:35:13.960709] INFO: jiekou: 测试用例执行完毕
</pre>
</div>
<!--css div popup end-->
</td>
</tr>
<tr id='pt1.2' class='hiddenRow'>
<td class='text text-success'><div class='testcase'>test_api_2</div></td>
<td colspan='5' align='center'>
<!--css div popup start-->
<a class="popup_link btn btn-xs btn-default" onfocus='this.blur();' href="javascript:showTestDetail('div_pt1.2')" >
pass</a>
<div id='div_pt1.2' class="popup_window">
<div style='text-align: right;cursor:pointer'>
<a onfocus='this.blur();' onclick="document.getElementById('div_pt1.2').style.display = 'none' " >
[x]</a>
</div>
<pre>
pt1.2: [2018-02-01 12:35:13.961709] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:35:13.961709] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式POST
[2018-02-01 12:35:13.962709] INFO: jiekou: 输入参数url:http://www.tuling123.com/openapi/api
,key:dfeb1cc8125943d29764a2f2f5c33739,参数:,请求方式None
[2018-02-01 12:35:13.994711] INFO: jiekou: 返回结果:{'code': 40002, 'text': '你想说什么就直说,不用藏在心里哈~'}
[2018-02-01 12:35:13.994711] INFO: jiekou: 当前模块 断言测试结果
[2018-02-01 12:35:13.995711] INFO: jiekou: 测试用例执行完毕
</pre>
</div>
<!--css div popup end-->
</td>
</tr>
<tr id='ft1.3' class='none'>
<td class='text text-warning'><div class='testcase'>test_api_3</div></td>
<td colspan='5' align='center'>
<!--css div popup start-->
<a class="popup_link btn btn-xs btn-default" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.3')" >
error</a>
<div id='div_ft1.3' class="popup_window">
<div style='text-align: right;cursor:pointer'>
<a onfocus='this.blur();' onclick="document.getElementById('div_ft1.3').style.display = 'none' " >
[x]</a>
</div>
<pre>
ft1.3: [2018-02-01 12:35:13.996711] INFO: jiekou: 测试用例开始执行
[2018-02-01 12:35:13.996711] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式GET
[2018-02-01 12:35:13.997711] INFO: jiekou: 输入参数url:https://api.douban.com/v2/photo/:id,key:,参数:,请求方式None
[2018-02-01 12:35:13.998711] INFO: jiekou: 测试用例执行完毕
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Roaming\Python\Python36\site-packages\ddt.py", line 139, in wrapper
return func(self, *args, **kwargs)
File "C:\Users\Administrator\Desktop\xuexi\jiejko\testCase\ddt_case.py", line 17, in test_api
apijson = api.getJson()
File "C:\Users\Administrator\Desktop\xuexi\jiejko\Interface\testFengzhuang.py", line 27, in getJson
json_data = self.testapi()
File "C:\Users\Administrator\Desktop\xuexi\jiejko\Interface\testFengzhuang.py", line 21, in testapi
response = reques.get(self.url,self.parem)
TypeError: get() takes 2 positional arguments but 3 were given
</pre>
</div>
<!--css div popup end-->
</td>
</tr>
</tbody>
<tfoot>
<tr id='total_row'>
<td>Total</td>
<td>3</td>
<td class="text text-success">2</td>
<td class="text text-danger">0</td>
<td class="text text-warning">1</td>
<td>&nbsp;</td>
</tr>
</tfoot>
</table>
<div id='ending'>&nbsp;</div>
</div>
</body>
</html>

Binary file not shown.