Skip to content

Commit

Permalink
2018/4/18
Browse files Browse the repository at this point in the history
  • Loading branch information
qiangzhouf committed Apr 18, 2018
1 parent cb8c947 commit 0b70adb
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 61 deletions.
2 changes: 0 additions & 2 deletions web/conf/schema.sql

This file was deleted.

19 changes: 1 addition & 18 deletions web/lib/case.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import mylog
import uuid
import time
import json
import logging
from interface import *


Expand All @@ -22,8 +20,6 @@ class Case:
'''

fh = logging.FileHandler('log/'+str(uuid.uuid1())+'_log.txt', mode='w')

def __init__(self, project, name, data=None, assert_data=None,
save_data=None, del_data=None, pre_time=0, g={}, s=''):
self.name = name
Expand All @@ -38,19 +34,6 @@ def __init__(self, project, name, data=None, assert_data=None,
self.s = s

def run(self):
# 日志配置
try:
self.interface.log.removeHandler(Case.fh)
except:
pass
log_file = 'log/'+str(uuid.uuid1())+'-'+str(self.s)+'-'+str(self.name)+'_log.txt'
fh = logging.FileHandler(log_file, mode='w')
formatter = logging.Formatter('[%(levelname)s] - [%(asctime)s] - %(filename)s\n%(message)s\n')
fh.setFormatter(formatter)
fh.setLevel(logging.INFO)
self.interface.log.addHandler(fh)
Case.fh = fh

try:
if self.pre_time:
time.sleep(self.pre_time)
Expand All @@ -77,5 +60,5 @@ def run(self):
except:
pass

return self.name, self.status, log_file
return self.name, self.status, self.interface.log_file

46 changes: 27 additions & 19 deletions web/lib/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
import base64
import random
import os
from mylog import *
import uuid
import logging


class Interface:
Expand All @@ -41,9 +41,12 @@ class Interface:
protocol = 'http://'# https://

# 实例化方法
def __init__(self, method, url, params, headers=None, g={}):
def __init__(self, method, url, params, headers=None, g={}, log=True):
# 基本属性
self.log = log_config()
if log:
self.log_file = 'log/'+str(uuid.uuid1())+'_'+str(int(time.time()*1000))+'_log.txt'
else:
self.log_file = None
self.method = method
self.url = url
self.params = params
Expand All @@ -58,6 +61,11 @@ def __init__(self, method, url, params, headers=None, g={}):
# 接口下发后,响应结果对象
self.result = None
self.g = g

def log(self, msg, content):
if self.log_file:
with open(self.log_file, 'a+') as f:
f.write('['+msg+'] '+time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())+'\n'+content+'\n\n')

# 参数修改
def modify_params(self,k_v):
Expand All @@ -71,7 +79,7 @@ def modify_params(self,k_v):
k_v[k] = img_b64(os.getcwd() + '/image/'+ k_v[k].replace('*base64.', ''))
self.params[k] = k_v[k]
except:
self.log.info('Modify_params failed! '+str(k_v))
self.log('info','Modify_params failed! '+str(k_v))

# 下发接口
def request(self):
Expand All @@ -98,25 +106,25 @@ def request(self):
json=self.params, headers=self.headers)
self.result = r
assert(self.result.status_code == 200)
self.log.info('Interface %s requested success!' % self.url)
self.log.info('Interface %s request and response info:' % self.url+'\n'+
self.log('info','Interface %s requested success!' % self.url)
self.log('info','Interface %s request and response info:' % self.url+'\n'+
'请求:'+'\n'+'*'*60+'\n'+self.method+' '+Interface.host+' '+self.url+'\n'+
'头部\n'+str(self.result.request.headers)+'\n参数\n'+str(self.params)+'\n'+
'响应: '+str(self.result.status_code)+'\n'+'*'*60+'\n'+
'头部\n'+str(self.result.headers)+'\n'+'参数\n'+str(self.result.json()))
return True
except Exception as e:
self.result = None
self.log.error('Interface %s requested failed!' % self.url + '\n' + str(e))
self.log.info('Interface %s request and response info:' % self.url+'\n'+
self.log('error','Interface %s requested failed!' % self.url + '\n' + str(e))
self.log('info','Interface %s request and response info:' % self.url+'\n'+
'请求:'+'\n'+'*'*60+'\n'+self.method+' '+Interface.host+' '+self.url+'\n'+'头部\n'+
str(self.headers)+'\n'+'参数\n'+str(self.params))
return False

# 响应结果校验
def assert_response(self, k_v):
if self.result == None:
self.log.error('Request failed. Assert operation is invailed!')
self.log('info','Request failed. Assert operation is invailed!')
return False
k_v = self.g_replace(k_v)
for k in k_v:
Expand All @@ -131,10 +139,10 @@ def assert_response(self, k_v):
obj = self.get_json(k)
o_obj = k_v[k]
assert(str(obj) == str(o_obj))
self.log.info('Assert success! '
self.log('info','Assert success! '
+k+': '+str(o_obj)+' | '+str(o_obj))
except:
self.log.error('Assert failed! '
self.log('error','Assert failed! '
+k+' : '+str(o_obj)+' | '+str(obj))
return False
return True
Expand All @@ -145,7 +153,7 @@ def get_json(self, key):
tmp = self.result.json()
except:
return None
self.log.error('Get_json! '+ str(self.result.content))
self.log('error','Get_json! '+ str(self.result.content))
try:
for elem in key.split('.'):
if elem == '*r':
Expand All @@ -168,13 +176,13 @@ def g_push(self, key_list):
self.g[k] = [self.g[k], 1]
self.g[k+'1'] = self.g[k][0]
self.g[k+str(self.g[k][1]+1)] = self.get_json(k)
self.log.info('G push values: ' + str(k)+':' + str(self.g[k+str(self.g[k][1]+1)]))
self.log('info','G push values: ' + str(k)+':' + str(self.g[k+str(self.g[k][1]+1)]))
self.g[k][1] = self.g[k][1] + 1
else:
self.g[k] = self.get_json(k)
self.log.info('G push values: ' + str(k)+':'+str(self.g[k]))
self.log('info','G push values: ' + str(k)+':'+str(self.g[k]))
except:
self.log.error('G_push failed! '+ str(key_list) + str(self.g))
self.log('error','G_push failed! '+ str(key_list) + str(self.g))


# 全局参数替换
Expand Down Expand Up @@ -204,7 +212,7 @@ def g_replace(self, k_v):
return k_v
except:
return c_
self.log.error('G_replace failed! '+ str(c_) + str(k_v))
self.log('error','G_replace failed! '+ str(c_) + str(k_v))

# 特殊参数动态生成(主要是时间类)
@staticmethod
Expand Down Expand Up @@ -235,7 +243,7 @@ def dynamic_params(params):

# 登陆获取cookie,并保存到Interfa的类变量中
def set_cookie(interface_name, project, data=None):
i = interf(interface_name, project)
i = interf(interface_name, project, g={}, log=False)
if data:
i.modify_params(data)
i.request()
Expand All @@ -244,7 +252,7 @@ def set_cookie(interface_name, project, data=None):


# 从数据库api表中读取接口参数,并实例化对象
def interf(interface_name, project, g={}):
def interf(interface_name, project, g={}, log=True):
db = sqlite3.connect(Interface.db_path)
result = db.execute('select method,url,data'
' from api where project_name="%s" and name="%s"'
Expand All @@ -253,7 +261,7 @@ def interf(interface_name, project, g={}):
tmp[2] = json.loads(tmp[2])
for key in tmp[2]:
tmp[2][key] = tmp[2][key]['value']
return Interface(*tmp, g=g)
return Interface(*tmp, g=g, log=log)


# 图片base64编码
Expand Down
18 changes: 0 additions & 18 deletions web/lib/mylog.py

This file was deleted.

3 changes: 2 additions & 1 deletion web/lib/scene.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ def run(self):
try:
c = Case(*elem, g=self.g, s=self.name)
result.append(c.run())
except:
except Exception as e:
print(e)
result.append((elem[1], 0, ''))
self.status.append(result[-1][1][0] and result[-1][1][1])
return self.name, result, 1 if all(self.status) else 0
Expand Down
Binary file modified web/web.db
Binary file not shown.
7 changes: 4 additions & 3 deletions web/web.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#!python -u
import sys
import os
sys.path.append(os.getcwd()+'/lib')
Expand Down Expand Up @@ -642,7 +643,7 @@ def api_test():
if req_auth == '"none"':
t = time.time()
req = requests.get(req_url, params=req_data, headers=req_headers)
print('\n', "\033[1;32;40m%s\033[0m" % '[GET]', req.url)
print('\n', '[GET]', req.url)
delt_t = str(round((time.time() - t)*1000, 1)) + ' ms'
else:
req_auth = json.loads(req_auth)
Expand All @@ -669,7 +670,7 @@ def api_test():
req = requests.post(req_url, params=req_data, files=files, headers=req_headers)
else:
req = requests.post(req_url, json=req_data, headers=req_headers)
print('\n', "\033[1;32;40m%s\033[0m" % '[POST]', req.url, req_data)
print('\n', '[POST]', req.url, req_data)
delt_t = str(round((time.time() - t)*1000, 1)) + ' ms'
else:
req_auth = json.loads(req_auth)
Expand Down Expand Up @@ -1063,4 +1064,4 @@ def project_m():
g.db.commit()
return jsonify(code=200)
except Exception as e:
return jsonify(code=201, msg=repr(e))
return jsonify(code=201, msg=repr(e))

0 comments on commit 0b70adb

Please sign in to comment.