def __init__(self, id): self.testid = id #获取到上个测试用例id 通过该id执行用例 self.excl = Excel() self.req = BaseConfig() self.sql = BaseQuery() self.Dist = Distribution() # 发送请求的类
def __init__(self): self.sql = BaseQuery() self.excl = Excel() self.req = BaseConfig() self.Dist = Distribution() #发送请求的类
class ForApiget(object): def __init__(self, id): self.testid = id #获取到上个测试用例id 通过该id执行用例 self.excl = Excel() self.req = BaseConfig() self.sql = BaseQuery() self.Dist = Distribution() # 发送请求的类 def runTestid(self): #执行该用例 i = self.excl.get_row_num(self.testid) #找到该id 所在的行 self.req.method = self.excl.getValue( i, getMethod()) # 设置本次请求的方法 ********* responseKey = self.excl.getValue(i, getresponseKey()) #获取存储 接口响应的关键字 responseSave = self.excl.getValue(i, getresponseSave()) #存储接口的方式 key = self.excl.getValue(i, getInputKey()) #获取文本输入值 value = self.excl.getValue(i, getInputValue()) #获取文本输入键 url = self.excl.getValue(i, getUrl()) #获取每个用例的url testid = self.excl.getValue(i, getId()) #获取到case id replayid = self.excl.getValue(i, getRelyID()) #获取到依赖id getvaluemethod = self.excl.getValue(i, getValueMethod()) # 依赖取值方法 keyValue = self.excl.getValue(i, getRelyData2()) # 依赖上一个接口的关键字 forApidata = self.excl.getValue(i, getRelyFied()) # 放入本次接口的数据 reqBody = self.excl.getValue(i, getRequestDate()) # 请求体放置的内容 save = self.excl.getValue(i, getParameter()) #保存文本 if reqBody: # 请求体放置的内容 reqBody = eval(self.excl.getValue(i, getRequestDate())) replaydata = self.excl.getValue(i, getreplayaccount()) # 获取依赖id所需的账号 return self.execute(url, getvaluemethod, replayid, keyValue, forApidata, replaydata, responseKey, responseSave, key, value, testid, save, reqBody) def execute(self, url, getvaluemethod, replayid, keyValue, forApidata, replaydata, responseKey, responseSave, key, value, testid, save, reqBody): if keyValue: keyValue = eval(keyValue) # 依赖上一个接口的关键字 需要做数据类型转换 将excel里面的字符串转成列表 else: keyValue = None if forApidata: forApiData = eval(forApidata) # # 放入本次接口的数据 需要做数据类型转换 将字符串转成字典 else: forApiData = None if replayid: # 如果本次请求需要依赖id 即需要上一个接口的数据 respose = self.finallyresult(getvaluemethod, replayid, keyValue, forApiData, replaydata) # 调用取得依赖数据模块 replayback = respose # 从本地或者接口上次接口获取到的数据 进行请求处理 最终目的是获取到本次接口的所需数据 if replayback: # 如果获取到本地或接口返回的数据 if reqBody: # 请求体需要携带数据 如果为空 则不加入请求体 replayback.update( reqBody ) # 如果请求体放置的内容与放入本次接口的数据同时存在数据 则在本次接口请求数据上加入请求体数据 body = self.req.body( replayback) # 更新jsondata内容 将接口需要的输入加入到body里面 获取本次最新的请求体内容 header = self.req.Header() #本次请求体的头部信息 result = self.Dist.Post(url, body, header) # 将本地或接口获取到的数据 进行发送请求 if responseSave != "": if int(responseSave) == 2: # 处理发送请求后 要保存接口响应的内容 responseKey = eval( responseKey) #对excel读取到的数据进行格式化处理 转换成字典 save = eval(save) try: for i in responseKey: save[i] = result[i] except: # 这里这么写的原因 # 当依赖的接口过多时 有三种解决方案: 1.将某些数据存储在数据库 简化复杂度 2.写复杂代码 3一个接口对应一个方法 此处选择第一个解决方案 for i in responseKey: jsonparse = parse("$..%s" % i) res = [ match.value for match in jsonparse.find(result) ][0] save[i] = res data = self.sql.selectByUsername(replaydata) #查询数据库内容 data.update(save) self.sql.updateByUsername( replaydata, json.dumps(data)) #将数据更新到数据库里面 对应的账号信息里面 result.update( replayback ) #这里做特殊处理在上个接口处理完后 在里面加入usertoken 与userid 用来返回每次必要参数 userid 与 token 只有调用 上次接口返回数据时候 才做的处理 #用于加入token,userid return result #返回本次接口执行后 获取到的数据 else: pass else: if reqBody: # 需要加入请求体则执行这里 if replaydata == "": # 依赖id 不需要账号 if responseSave == "": # 不需要存储 body = self.req.body(reqBody) header = self.req.Header() result = self.Dist.Post(url, body, header) else: pass def finallyresult(self, getvaluemethod, replayid, keyValue, forApidata, replaydata): #获取到本地 或接口数据处理的结果 if getvaluemethod == 1: #如果依赖取值的方式是本地数据库获取 return self.getforlocal(getvaluemethod, replayid, keyValue, forApidata, replaydata) else: ##如果依赖取值的方式是接口返回的数据获取 则执行这里 return self.getforApi(replayid) def getforlocal(self, getvaluemethod, replayid, keyValue, forApidata, replaydata): # 当依赖是从本地获取数据时 进行本地数据获取 try: if replayid: result = self.sql.selectByid_username(replayid, replaydata) except Exception as e: print("依赖id不能为空或不存在或取值错误>>>>>依赖数据模块报错", e) else: try: if type(keyValue) == str and keyValue: forApidata[keyValue] = result[keyValue] # 对api数据进行处理 if type(keyValue) == list and forApidata: #对列表取值的处理 for i in keyValue: forApidata[i] = result[i] except Exception as e: print("本地返回数据异常>>>>", e) else: return forApidata #返回本地数据库获取到的数据 例如 token userid def getforApi(self, replayid): # 从接口返回获取数据 进行处理 获取想要的数据 apireturn = ForApiget(replayid) # 通过上个接口动态返回的数据 try: print(replayid) except Exception as e: print("接口取值出现错误>>>>>>", e)
class TestCase(object): def __init__(self): self.sql = BaseQuery() #sql查询 self.excel = Excel() #excel操作 self.req = API() #接口基本信息 self.post = Distribution() #发送请求的类 def startCase(self): #执行测试用例 self.caseNum = self.excel.allCase() self.Pass = 0 self.no = 0 for i in range(1,self.caseNum): #self.req.method = self.excel.getValue(i, getMethod()) # 设置本次请求的方法 ********* #self.req.url = self.excel.getValue(i, getUrl()) #设置本次请求url self.method = self.excel.getValue(i,getMethod()) #请求方法 self.responseKey = self.excel.getValue(i, getresponseKey()) # 获取存储 接口响应的关键字 self.responseSave = self.excel.getValue(i, getresponseSave()) # 存储接口的方式 self.key = self.excel.getValue(i, getInputKey()) # 获取输入框输入值 self.value = self.excel.getValue(i, getInputValue()) # 获取文本输入键 self.url = self.excel.getValue(i, getUrl()) # 获取每个用例的url self.testid = self.excel.getValue(i, getId()) # 获取到case id self.replayid = self.excel.getValue(i, getRelyID()) # 获取到依赖id self.getvaluemethod = self.excel.getValue(i, getValueMethod()) # 依赖取值方法 self.keyValue = self.excel.getValue(i, getRelyData2()) # 依赖上一个接口的关键字 self.forApidata = self.excel.getValue(i, getRelyFied()) # 放入本次接口的数据 self.reqBody = self.excel.getValue(i, getRequestDate()) # 请求体放置的内容 self.save = self.excel.getValue(i, getParameter()) # 保存文本 self.expect =self.excel.getValue(i,getExpect()) isrun = self.excel.getValue(i, getExecute()) # 是否执行 if isrun == "": print("发现第{0}测试用例是否执行栏出现空格现象".format(self.testid)) break else: if isrun == "yes" or isrun == "Yes" or isrun == "YES": #testid,responseKey,responseSave,url,method,replayid,getvaluemethod,keyValue,forApidata,reqBody,save,key,value self.httpContent() elif isrun == "no" or isrun == "No" or isrun == "NO": pass #print("{0}跳过测试用例的执行".format(self.testid)) else: print("{0}出现未知命令".format(self.testid)) print("通过%d个接口测试,未通过%d个接口测试"%(self.Pass,self.no)) def httpContent(self): #进行内容逻辑处理 function = hasattr(self.req,self.method) """ self.req 请求体内容 self.method 接口地址 """ if function: if self.replayid =="": result = getattr(self.req, self.method)(self.url, method=self.method, thisApi=self.forApidata,args=self.reqBody, extract=self.keyValue, lastApi=self.key) expect = eval(self.expect) try: if result["StateCode"] == expect[0] and result["StateMsg"] == expect[1]: if len(expect) == 3: if result["ResultType"] == expect[2]: print("接口:%s 测试通过 编号:%s" %(self.method,self.testid)) self.Pass += 1 elif result["ResultType"] != expect[2]: print("接口:%s 测试不通过 编号:%s 响应状态:%s" % (self.method, self.testid, result["ResultType"])) self.no += 1 else: print("接口:%s 测试通过 编号:%s" %(self.method,self.testid)) self.Pass += 1 else: print("接口:%s 测试未通过 编号:%s" %(self.method,self.testid)) self.no += 1 except Exception as e: print("主运行模块报错>>>>>\t",e) else: self.replay = RePlay(self.replayid) self.replay.runTest() result = getattr(self.req, self.method)(self.url, method=self.method, thisApi=self.forApidata,args=self.reqBody, extract=self.keyValue, lastApi=self.key) print(result) if type(result) == list: result = result[-1] expect = eval(self.expect) try: if result["StateCode"] == expect[0] and result["StateMsg"] == expect[1]: if len(expect) == 3: if result["ResultType"] == expect[2]: print("接口:%s 测试通过 编号:%s" %(self.method,self.testid)) self.Pass += 1 elif result["ResultType"] != expect[2]: print("接口:%s 测试不通过 编号:%s 响应状态:%s" %(self.method,self.testid,result["ResultType"])) self.no += 1 else: print("接口:%s 测试通过 编号:%s" %(self.method,self.testid)) self.Pass += 1 else: print("接口:%s 测试未通过 编号:%s" %(self.method,self.testid)) self.no += 1 except Exception as e: print("主运行模块报错>>>>>\t", e)
def __init__(self): self.sql = BaseQuery() #sql查询 self.excel = Excel() #excel操作 self.req = API() #接口基本信息 self.post = Distribution() #发送请求的类
def __init__(self): self.sql = BaseQuery() # sql查询 self.excel = Excel() # excel操作 self.req = API() # 接口基本信息
class TestCase(object): def __init__(self): self.sql = BaseQuery() # sql查询 self.excel = Excel() # excel操作 self.req = API() # 接口基本信息 def startCase(self): #执行测试用例 self.caseNum = self.excel.allCase() self.Pass = 0 self.no = 0 for i in range(1,self.caseNum): self.testid = self.excel.getValue(i,getId()) self.url = self.excel.getValue(i,getUrl()) self.method = self.excel.getValue(i,getApiName()) #请求地址的名字 self.function = self.excel.getValue(i,getFunctionName()) #执行的方法名字 self.forApidata = self.excel.getValue(i,getThisapi()) #放入本次接口的名字 self.add1 = self.excel.getValue(i,getAdd1()) #额外参数一 self.add2 = self.excel.getValue(i,getAdd2()) #额外参数二 isrun = self.excel.getValue(i,getExecute()).strip()#是否执行 self.expect = self.excel.getValue(i,getExpect()) self.other = self.excel.getValue(i,getHeader()) self.expect = self.excel.getValue(i,getExpect()) if isrun == "": print("发现第{0}测试用例是否执行栏出现空格现象".format(self.testid)) break else: if isrun == "yes" or isrun == "Yes" or isrun == "YES": self.httpContent() elif isrun == "no" or isrun == "No" or isrun == "NO": pass else: print("{0}出现未知命令".format(self.testid)) print("通过%d个接口测试,未通过%d个接口测试" % (self.Pass, self.no)) def httpContent(self): selectResult = self.sql.selecet(self.testid) function = hasattr(self.req, self.function) if function: result = getattr(self.req, self.function)(self.url, method=self.method, thisApi=self.forApidata,add1=self.add1,add2=self.add2) expects = eval(self.expect) flag = True try: for i in expects: jsonparse = parse("$..%s" % i) ret = [match.value for match in jsonparse.find(result)][0] if ret == expects[i]: pass else: flag = False Pass = "******" print(Pass) if selectResult == None: self.sql.insert(self.testid, self.expect,Pass,json.dumps(result),nowTime) elif selectResult["testid"] == self.testid: self.sql.update(self.testid, self.expect, Pass, json.dumps(result),nowTime) break if flag: Pass = "******" if selectResult == None: self.sql.insert(self.testid,self.expect,Pass,json.dumps(result),nowTime) elif selectResult["testid"] == self.testid: print("update",self.testid) self.sql.update(self.testid,self.expect,Pass,json.dumps(result),nowTime) print(Pass) except Exception as e: print(e)
class TestCase(object): def __init__(self): #self.sql = BaseQuery() # sql查询 self.excel = Excel() # excel操作 self.req = API() # 接口基本信息 def startCase(self): #执行测试用例 self.caseNum = self.excel.allCase() self.Pass = 0 self.no = 0 for i in range(1, self.caseNum): self.testid = self.excel.getValue(i, getId()) self.url = self.excel.getValue(i, getUrl()) self.method = self.excel.getValue(i, getApiName()) #请求地址的名字 self.function = self.excel.getValue(i, getFunctionName()) #执行的方法名字 self.forApidata = self.excel.getValue(i, getThisapi()) #放入本次接口的名字 self.add1 = self.excel.getValue(i, getAdd1()) #额外参数一 self.add2 = self.excel.getValue(i, getAdd2()) #额外参数二 isrun = self.excel.getValue(i, getExecute()) #是否执行 self.expect = self.excel.getValue(i, getExpect()) self.other = self.excel.getValue(i, getHeader()) self.key = self.excel.getValue(i, getKeys()) #依赖参数的关键字 #print(self.testid,self.url,isrun,self.method,self.function,self.forApidata,self.add1,self.add2,self.expect) if isrun == "": print("发现第{0}测试用例是否执行栏出现空格现象".format(self.testid)) break else: if isrun == "yes" or isrun == "Yes" or isrun == "YES": # testid,responseKey,responseSave,url,method,replayid,getvaluemethod,keyValue,forApidata,reqBody,save,key,value self.httpContent() elif isrun == "no" or isrun == "No" or isrun == "NO": pass # print("{0}跳过测试用例的执行".format(self.testid)) else: print("{0}出现未知命令".format(self.testid)) print("通过%d个接口测试,未通过%d个接口测试" % (self.Pass, self.no)) def httpContent(self): function = hasattr(self.req, self.function) if function: print(self.function) result = getattr(self.req, self.function)(method=self.method, thisApi=self.forApidata, need=self.other, key=self.key, add1=self.add1) self.expect = eval(self.expect) flag = True try: for i in self.expect: jsonparse = parse("$..%s" % i) ret = [match.value for match in jsonparse.find(result)][0] if ret == self.expect[i]: pass else: flag = False print("接口测试不通过") break if flag: print("接口测试通过") except Exception as e: print(e)
def __init__(self, replayid): self.replayid = replayid self.excel = Excel() self.req = API()
class RePlay(object): def __init__(self, replayid): self.replayid = replayid self.excel = Excel() self.req = API() def getReplayMethod(self): allmethod = [] allid = [] id = self.replayid #当前依赖的名称 例如test01 allid.append(id) while True: num = self.excel.get_row_num(id) #根据当前依赖id找到编号 id = self.excel.getValue(num, getRelyID()) # 找到所在接口 查看所依赖的名称 用于下一次循环使用 if id == "": #添加最后一个依赖的方法 这里是循环到了 最后一个依赖id 这是添加最后一个依赖id的方法 如果这个接口 依赖的用例编号为空 则在列表加入当前的方法名 allmethod.append(self.excel.getValue(num, getMethod())) break #结束循环 else: #如果当前不为空 则加入当前的 接口 的名称 继续循环查找是否还有依赖的接口 allid.append(id) allmethod.append(self.excel.getValue(num, getMethod())) allmethod.reverse() #翻转列表内容 按顺序发送接口请求 #print("所有的依赖方法",allmethod) #print("所有的依赖id",allid) return [allmethod, allid] def runTest(self): allMethod, allid = self.getReplayMethod()[0], self.getReplayMethod()[ 1] #取得当前接口所有依赖的方法 for j in range(1, self.excel.allCase()): #查询当前exce的用例数量 for i in allMethod: if self.excel.getValue(j, getMethod()) == i: testid = self.excel.getValue(j, getId()) url = self.excel.getValue(j, getUrl()) #获取url method = self.excel.getValue(j, getMethod()) #获取方法 args = self.excel.getValue(j, getRequestDate()) #获取账号 keyvalue = self.excel.getValue( j, getRelyData2()) #提取当前接口的响应数据并保存 forApidata = self.excel.getValue(j, getRelyFied()) #放入本次接口的数据 value = self.excel.getValue( j, getInputKey()) # 提取本次接口需要的数据用以发送给后台 if testid in allid: #进一步判断 当前方法是否属于这个用例id result = getattr(self.req, i)(url, method=method, thisApi=forApidata, args=args, extract=keyvalue, lastApi=value)