def assertion(self, data, expected): result = [] com_flag = True for i in expected: # 校验接口返回,返回结果是一个以True或False的列表 for k, v in i.items(): if k == "eq": Log.logger( "Equal Assert!!! Expected_value =Actual_value ... ") flag = self.eq_assert(data, v) result.append(flag) elif k == "co": Log.logger( "Contain Assert!!! Actual_value contains Expected_value ... " ) flag = self.co_assert(data, v) result.append(flag) elif k == "nq": Log.logger( "Not Equal Assert!!! Expected_value !=Actual_value ... " ) flag = self.nq_assert(data, v) result.append(flag) for i in result: # 对断言列表进行校验,只要含有Flase测试结果就为False if i == False: com_flag = False break return com_flag
def set_var(self, path, di, res): for k, v in di.items(): if "headers" in v: headers = res.headers temp = v.split('.') for j in range(1, len(temp)): str = temp[j] text = headers[str] elif "body" in v: body = res.text if isinstance(body, dict): # 判断是否为字典 pass else: body = json.loads(body) # Json字符串转换成字典 temp = v.split('.') for j in range(1, len(temp)): str = temp[j] text = body[str] di[k] = text var.update(di) Log.logger("Global Var:" + json.dumps(var)) # print("设定全局变量"+var) return var
def test_api(self, name, method, url, headers, params, expected, export): allure.dynamic.title("请求接口:{i}".format(i=url)) # 设定用例标题 allure.dynamic.description("用例描述:{i}".format(i=name)) # 设定用例描述 # com_flag = True # 设置默认的断言结果 headers = obj.get_var(headers) # 判断请求头中是否有变量,有的话需获取变量值 Log.logger("Request Headers:"+str(headers)) params = obj.get_var(params) # 判断请求消息体中是否有变量,有的话需获取变量值 Log.logger("Request Body:"+str(params)) if method == "GET": data = Base.base_request(url=url, method=method, headers=headers, params=params) elif method == "POST": data = Base.base_request(url=url, method=method, headers=headers, data=params) Log.logger("Response Headers:" + str(data.headers)) Log.logger("Response Body:" + str(data.text)) if export == "NULL": # 接口返回是否需要输出变量供其他接口使用 pass else: obj.set_var(path, export, data) com_flag = Assert.assertion(data,expected) assert data.status_code == 200, "Test Failed!!!" assert com_flag, "Test Failed!!!"
def eq_assert(self, data, expected): expected = expected if expected[0] == "code": Log.logger("Expected_value: {a}".format(a=expected[1])) Log.logger("Actual_value: {a}".format(a=data.status_code)) if data.status_code == expected[1]: return True else: return False if "headers" in expected[0]: headers = data.headers temp = expected[0].split('.') for i in range(1, len(temp)): str = temp[i] text = headers[str] Log.logger("Expected_value: {a}".format(a=expected[1])) Log.logger("Actual_value: {a}".format(a=text)) if text == expected[1]: return True else: return False if "body" in expected[0]: body = data.text # if (type(body).__name__=='dict'): # 判断是否为字典 if isinstance(body, dict): # 判断是否为字典 pass else: body = json.loads(body) # 字符串转换成字典 temp = expected[0].split('.') for i in range(1, len(temp)): str = temp[i] text = body[str] Log.logger("Expected_value: {a}".format(a=expected[1])) Log.logger("Actual_value: {a}".format(a=text)) if text == expected[1]: return True else: return False
def method_logging(self): Log.logger("Start Method...") yield Log.logger("Finnish Method...")
def class_logging(self): Log.logger("Start Class...") yield Log.logger("Finish Class...")