没有连接数据库进行数据准确性验证
很多异常在操作中避免了就没有进行处理(文件不存在、数据格式不匹配、网络超时),给你懒的……
(下一步:…… )
# -*- coding: UTF-8 -*-
__author__ = "XXXX"
__version__ = "1.0"
"""
Myassert函数说明:
type 1 返回值为json,验证data类型为dict
type 2 返回值为json,验证data类型为list
type 3 返回值为json,验证data类型为str
type 4 返回值为json,success为False,message不为空
type 5 返回值为json, success不确定,输出json,不进行其他验证
type 6 返回值不为json,只验证接口200
Get函数说明:
platform 终端
path 接口地址,不可为空
attach 用于get方法url拼接,可为空,只添加特殊参数,基础参数已附加
asstype 可为空,默认为1,断言类型,参考Myassert说明
data Post数据,若为post方法必传,get方法传''即可
contains 关键字验证,将需要验证必须存在的关键字通过此参数传入,以,分隔
"""
import requests
import xlrd
import time
import hashlib
import configparser
import logging,os
#日志模块
log_file = os.path.join(os.getcwd(),'logs.log')
log_format = '[%(asctime)s] [%(levelname)s] %(message)s' #配置log格式
logging.basicConfig(format=log_format, filename=log_file, filemode='w', level=logging.DEBUG)
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
formatter = logging.Formatter(log_format)
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
class Interface():
def __init__(self,config):
logging.info("正在执行基础信息获取")
self.errorflag = 0
self.config = config
self.s = requests.session()
self.X1 = self.Login("X1") #家长端基础数据获取
self.X2 = self.Login("X2") #教师
self.X3 = self.Login("X3") #教室
logging.info("基础信息获取完成,开始执行测试用例")
def GetSign(self,interface, timestamp, method):
if interface == "1":
src = "X" + timestamp
elif interface == "2":
src = "XX" + timestamp
elif interface == "3":
src = "XXX" + timestamp
sign = hashlib.md5(src.encode('utf-8')).hexdigest()
return sign
def Getconfig():
#try:
environment = \
{
"ENV1": ["URL1,URL2"],
"ENV1": ["URL1,URL2"],
"ENV3": ["URL1,URL2"]
}
# 读取配置文件,需与py文件位于同一层
configs = configparser.ConfigParser()
configs.read("Config.ini")
logging.info("读取配置文件成功")
assert configs.get("配置项", "环境") in ["XX","XX","XX"]
config = {}
config["环境"] = configs.get("配置项", "环境")
config["XX"] = configs.get("配置项", "XX")
if len(config) == 10:
logging.info("配置完成",config)
caselist = GetCaseList(config["用例地址"])
return config,caselist
else:
logging.error("部分配置项缺失,可能导致结果异常")
return config
# except:
# logging.error("配置出错")
def GetCaseList(fileName):
readExcel = xlrd.open_workbook(fileName)#读取指定的Excel
table=readExcel.sheet_by_index(1)#获取Excel的第一个sheet
trows = table.nrows #获取Excel的行数
caseList = []
for n in range(1, trows):
if table.cell(n, 0).value == ''\
or table.cell(n, 0).value == 'N'\
or table.cell(n, 1).value == '' \
or table.cell(n, 2).value == '':
pass
else:
tmpdict = {} # 把一行记录写进一个{}
tmpdict['XX1'] = n # n是Excel中的第n行
tmpdict['XX2'] = table.cell(n, 0).value
tmpdict['XX3'] = table.cell(n, 1).value
tmpdict['XX4'] = table.cell(n,2).value
caseList.append(tmpdict)
logging.info("读取用例:" + str(trows - 1)+",即将执行:" + str(len(caseList)))
return caseList
# except:
# logging.error("打开execl文件出错")
def Login(self,platform):
if platform == "XX":
url = "base" + "XXurl" #信息隐藏掉
info = self.s.get(url)
self.Myassert(info, 1, '')
return [info.json()["XXX"]]
elif platform == "XX":
data = {'x': 'x'} # 信息隐藏掉
url = self.config["apiurl"] + "XX"
info = self.s.post(url, data=data)
return [info.json()["XXX"]]
elif platform == "XX":
url = self.config["apiurl"] + "XX"
data = {'x':'x'} # 信息隐藏掉
info = self.s.post(url, data=data)
self.Myassert(info, 1, '')
return [info.json()["xx"]]
def Get(self,Platform,interface,att = '',myassert = 1,data = '',contains = ''):
#data为空为get,否则为post
# try:
timestamp = int(time.time())
sign = self.GetSign(Platform,timestamp, interface)
if Platform == "X1": #家长
url = self.config["apiurl"] + "/" + interface + "?uid=" + self.X1[0] + "&token=" + self.X1[1] + "XXXXXXXXXXXX"
elif Platform == "X2": #教师
url = self.config["apiurl"] + "/" + "XXXXXX"
elif Platform == "X3": # 教室
url = "XXXXXXXXXXXXXXXXXX"
if data == '':
info = self.s.get(url)
else:
info = self.s.post(url, data=data)
self.Myassert(info, myassert, contains)
return info
def Myassert(self, info, t, strin=''):
assert info.status_code == 200
if t < 5:
logging.debug(str(info.json()))
if t == 4:
assert info.json()["success"] == False
assert info.json()["message"] != ''
elif t < 4 :
assert info.json()["success"] == True
assert info.json()["data"] != ''
if t == 1:
assert type(info.json()["data"]) == dict
elif t == 2:
assert type(info.json()["data"]) == list
elif t == 3:
assert type(info.json()["data"]) == str
if strin:
for i in strin.split(","):
assert i in info.text
def Start():
config,caselist,= Getconfig()
print(config,caselist)
if config and caselist:
interface = Interface(config)
for i in caselist:
interface.Get(i["Platform"],i["path"],i["attach"],i["verify"],i["data"],i["contain"])
logging.error("执行完成,异常用例:" + str(interface.errorflag))
if __name__ == "__main__":
Start()