request,logging,ConfigParser——接口框架
做一个将参数和用例分开放置,并且输出log的接口测试框架
我的框架如下所示
Log文件用来设置log输出文件,需要时可以在用例内调用输出,config用来填写一切需要的参数信息,jiekou_post_test是我用来写接口测试用例的文件,log是自动输出的log文件,readConfig是读取congfig参数的执行文件
Log.py
#encoding=utf-8
import logging
from datetime import datetime
import threading
class myLog:
def __init__(self):
self.logger = logging.getLogger()
self.logger.setLevel(level = logging.INFO)
handler = logging.FileHandler("log.txt")
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
self.logger.addHandler(handler)
config用来存放参数
readConfig
# encoding=utf-8
import os
import codecs
import ConfigParser
proDir = os.path.split(os.path.realpath(__file__))[0]#os.path.realpath(__file__),获取当前执行脚本的绝对路径
configPath = os.path.join(proDir, "config.ini")
class ReadConfig:
def __init__(self):
fd = open(configPath)
data = fd.read()
# remove BOM
if data[:3] == codecs.BOM_UTF8:#判断是否包含EF BB BF。根据每个字节的开头的固定格式,我们就可以判断是否是UTF8的编码
data = data[3:]
file = codecs.open(configPath, "w")#直接用编码打开,防止open打开的编码不一致报错问题
file.write(data)
file.close()
fd.close()
self.cf = ConfigParser.RawConfigParser()#配置文件的格式是: []包含的叫section, section 下有option=value,可以直接get(section,option)来获取value
self.cf.read(configPath)
def get_http(self, name):
value = self.cf.get("HTTP", name)
return value
测试用例文档如下,用try输入一个不存在的IP,这样抓取错误写到log中
#encoding=utf-8
import sys
reload(sys)
sys.path.append('..')
from readConfig import ReadConfig
from common.Log import myLog
import requests
import json,time
#sys.setdefaultencoding("utf-8")
#print ReadConfig().get_http('url')
session = requests.session()
url=ReadConfig().get_http('url')
#url = "http://home.travelsky.net/publish/zghxnw/index.html"
params=ReadConfig().get_http('params')
#headers=ReadConfig().get_http('headers')
r = session.post(url, data=params,verify=False)
if u'今天我生日' in r.text:
print "login success"
url2=ReadConfig().get_http('url2')
#url2="http://home.travelsky.net/publish/zghxnw/847/860/863/index.html"
s = session.get(url2)
if u'三里屯办公区' in s.text:
print "link success"
try:
response = requests.get(www.dfsfss.com, timeout=float(timeout))#乱写的IP
print 'response'
except:
logger=myLog().logger
logger.error("Time out!")
log如下