def test_volume(self, case_data): for k, v in enumerate(case_dict["test_case"]): # 遍历用例文件中所有用例的索引和值 try: if case_data == v: # 修改方法的__doc__在下一次调用时生效,此为展示在报告中的用例描述 Test_Volume.test_volume.__doc__ = case_dict["test_case"][ k + 1]["info"] except IndexError: pass if not self.result["result"]: # 查看类变量result的值,如果未False,则前一接口校验错误,此接口标记未失败,节约测试时间 pytest.xfail("前置接口测试失败,此接口标记为失败") time.sleep(case_data["sleep_time"]) #send_request(_data, _host, _address,_port, _relevance, path, _success) code, data = requestSend.send_request( case_data, case_dict["testinfo"].get("host"), case_dict["testinfo"].get("address"), str(case_dict["testinfo"].get("port")), self.relevance, CASE_PATH, self.result) expected_code = case_data["check"][0]["expected_code"] volume_id = data["volume"]["id"] self.Assert.assert_code(code, expected_code) if case_data["request_type"] == "post": self.log.info("保存Volume_id到全局配置文件") conf = Config() conf.set_conf("test_data", "volume_id", volume_id) # 完整校验 CheckResult.check(case_data["test_name"], case_data["check"][0], code, data, self.relevance, CASE_PATH, self.result)
def test_project_crate(self, case_data): # 参数化修改test_project_crate注释 for k, v in enumerate(case_dict["test_case"]): # 遍历用例文件中所有用例的索引和值 try: if case_data == v: # 修改方法的__doc__在下一次调用时生效,此为展示在报告中的用例描述 TestAddProject.test_add_project.__doc__ = case_dict[ "test_case"][k + 1]["info"] except IndexError: pass if not self.result["result"]: # 查看类变量result的值,如果未False,则前一接口校验错误,此接口标记未失败,节约测试时间 pytest.xfail("前置接口测试失败,此接口标记为失败") #send_request(_data, _host, _address,_port, _relevance, path, _success) code, data = requestSend.send_request( case_data, case_dict["testinfo"].get("host"), case_dict["testinfo"].get("address"), str(case_dict["testinfo"].get("port")), self.relevance, CASE_PATH, self.result) project_id = data["project"]["id"] project_name = data["project"]["name"] self.Assert.assert_code(code, 201) with allure.step("保存项目信息到全局配置文件"): allure.attach("项目id:%s" % project_id) allure.attach("项目名称:%s" % project_name) self.log.info("保存project_id到全局配置文件") conf = Config() conf.set_conf("test_data", "project_id", project_id) self.log.info("保存项目名称为project_token_name到全局配置文件") conf.set_conf("test_data", "project_token_name", project_name)
def test_delete_subnet(self, case_data): if case_data["request_type"] == "delete": Ports.Ports().delete_all_port() # 参数化修改test_add_project 注释 for k, v in enumerate(case_dict["test_case"]): # 遍历用例文件中所有用例的索引和值 try: if case_data == v: # 修改方法的__doc__在下一次调用时生效,此为展示在报告中的用例描述 Test_Delete_Subnet.test_delete_subnet.__doc__ = case_dict[ "test_case"][k + 1]["info"] except IndexError: pass if not self.result["result"]: # 查看类变量result的值,如果未False,则前一接口校验错误,此接口标记未失败,节约测试时间 pytest.xfail("前置接口测试失败,此接口标记为失败") time.sleep(case_data["sleep_time"]) #send_request(_data, _host, _address,_port, _relevance, path, _success) code, data = requestSend.send_request( case_data, case_dict["testinfo"].get("host"), case_dict["testinfo"].get("address"), str(case_dict["testinfo"].get("port")), self.relevance, CASE_PATH, self.result) CheckResult.check(case_data["test_name"], case_data["check"][0], code, data, self.relevance, CASE_PATH, self.result)
def test_network(self, case_data): # 参数化修改test_network注释 for k, v in enumerate(case_dict["test_case"]): # 遍历用例文件中所有用例的索引和值 try: if case_data == v: # 修改方法的__doc__在下一次调用时生效,此为展示在报告中的用例描述 Test_Network.test_network.__doc__ = case_dict["test_case"][ k + 1]["info"] except IndexError: pass if not self.result["result"]: # 查看类变量result的值,如果未False,则前一接口校验错误,此接口标记未失败,节约测试时间 pytest.xfail("前置接口测试失败,此接口标记为失败") code, data = requestSend.send_request( case_data, case_dict["testinfo"].get("host"), case_dict["testinfo"].get("address"), str(case_dict["testinfo"].get("port")), self.relevance, CASE_PATH, self.result) expected_code = case_data["check"][0]["expected_code"] network_id = data["network"]["id"] network_name = data["network"]["name"] self.log.debug("data:%s" % data) self.Assert.assert_code(code, expected_code) #保存创建的网络id和网络名称 if case_data["request_type"] == "post": self.log.info("保存network_id到全局配置文件") conf = Config() conf.set_conf("test_data", "network_id", network_id) conf.set_conf("test_data", "network_name_for_check", network_name) self.log.debug("保存network_name到全局配置文件,用于虚拟校验") CheckResult.check(case_data["test_name"], case_data["check"][0], code, data, self.relevance, CASE_PATH, self.result)
def test_volume_snap_delete(self, case_data): for k, v in enumerate(case_dict["test_case"]): # 遍历用例文件中所有用例的索引和值 try: if case_data == v: # 修改方法的__doc__在下一次调用时生效,此为展示在报告中的用例描述 Test_Volume_Snap_Delete.test_volume_snap_delete.__doc__ = case_dict[ "test_case"][k + 1]["info"] except IndexError: pass if not self.result["result"]: # 查看类变量result的值,如果未False,则前一接口校验错误,此接口标记未失败,节约测试时间 pytest.xfail("前置接口测试失败,此接口标记为失败") #设置延时,等待快照删除完成 if case_data["request_type"] == "get": sleep(case_data["sleep_time"]) code, data = requestSend.send_request( case_data, case_dict["testinfo"].get("host"), case_dict["testinfo"].get("address"), str(case_dict["testinfo"].get("port")), self.relevance, CASE_PATH, self.result) #结果校验 CheckResult.check(case_data["test_name"], case_data["check"][0], code, data, self.relevance, CASE_PATH, self.result)
def test_login(self, case_data): # 发送测试请求 code, data = send_request(case_data) # # 校验测试结果 with allure.step("校验测试结果"): pass check(case_data, code, data)
def api_send_check(case_data, project_dict, relevance, rel, _path, result): """ 接口请求并校验结果 :param case_data: 单条用例 :param project_dict: 用例文件对象 :param relevance: 关联值实例对象 :param _path: case目录 :param rel: 关联值类对象 :param result: 全局测试结果 :return: """ # 发送请求并获取code, data code, data = requestSend.send_request( case_data, project_dict["testinfo"].get("host"), project_dict["testinfo"].get("address"), relevance, _path, result) # 校验测试结果 with allure.step("校验测试结果"): pass if isinstance(case_data["check"], list): for i in case_data["check"]: CheckResult.check(case_data["test_name"], i, code, data, relevance, _path, result) else: CheckResult.check(case_data["test_name"], case_data["check"], code, data, relevance, _path, result) # 记录关联值 init.get_relevance(data, case_data["relevance"], rel)
def test_os_volume_attachments(self, case_data): # 参数化修改test_os_volume_attachments注释 for k, v in enumerate(case_dict["test_case"]): # 遍历用例文件中所有用例的索引和值 try: if case_data == v: # 修改方法的__doc__在下一次调用时生效,此为展示在报告中的用例描述 Test_Os_Volume_Attachments.test_os_volume_attachments.__doc__ = case_dict[ "test_case"][k + 1]["info"] except IndexError: pass if not self.result["result"]: # 查看类变量result的值,如果未False,则前一接口校验错误,此接口标记未失败,节约测试时间 pytest.xfail("前置接口测试失败,此接口标记为失败") if case_data["request_type"] == "get": time.sleep(case_data["sleep_time"]) #send_request(_data, _host, _address,_port, _relevance, path, _success) code, data = requestSend.send_request( case_data, case_dict["testinfo"].get("host"), case_dict["testinfo"].get("address"), str(case_dict["testinfo"].get("port")), self.relevance, CASE_PATH, self.result) expected_code = case_data["check"][0]["expected_code"] self.Assert.assert_code(code, expected_code) # 完整校验 CheckResult.check(case_data["test_name"], case_data["check"][0], code, data, self.relevance, CASE_PATH, self.result)
def ini_request(case_dict, relevance, _path, result): """ 用例前提条件执行,提取关联键 :param case_dict: 用例对象 :param relevance: 关联对象 :param _path: case路径 :param result: 全局结果 :return: """ if isinstance(case_dict["premise"], list): logging.info("执行测试用例前置接口") with allure.step("接口关联请求"): for i in case_dict["premise"]: relevance_list = relevance.copy() for j in range(0, 3): # 获取前置接口关联数据失败 code, data = send_request( i, case_dict["testinfo"].get("host"), case_dict["testinfo"].get("address"), relevance_list, _path, result) if not data: with allure.step("接口请求失败!等待三秒后重试!"): pass logging.info("接口请求失败!等待三秒后重试!") continue if i["relevance"]: if len(i["relevance"]): relevance = get_relevance(data, i["relevance"], relevance) if isinstance(relevance, bool): with allure.step("从结果中提取关联键的值失败!等待3秒后重试!"): pass logging.info("从结果中提取关联键的值失败!等待3秒后重试!") time.sleep(3) continue else: break else: break else: break if isinstance(relevance, bool): logging.info("从结果中提取关联键的值失败!重试三次失败") result["result"] = False raise failureException("获取前置接口关联数据失败") return relevance
def test_server_snap(self,case_data): # 参数化修改test_add_project 注释 for k, v in enumerate(case_dict["test_case"]): # 遍历用例文件中所有用例的索引和值 try: if case_data == v: # 修改方法的__doc__在下一次调用时生效,此为展示在报告中的用例描述 Test_Server_Snap.test_server_snap.__doc__ = case_dict["test_case"][k + 1]["info"] except IndexError: pass if not self.result["result"]: # 查看类变量result的值,如果未False,则前一接口校验错误,此接口标记未失败,节约测试时间 pytest.xfail("前置接口测试失败,此接口标记为失败") #send_request(_data, _host, _address,_port, _relevance, path, _success) code, data = requestSend.send_request(case_data, case_dict["testinfo"].get("host"), case_dict["testinfo"].get("address"),str(case_dict["testinfo"].get("port")), self.relevance, CASE_PATH, self.result) expected_code = case_data["check"][0]["expected_code"] self.Assert.assert_code(code,expected_code)
def test_server(self, case_data): for k, v in enumerate(case_dict["test_case"]): # 遍历用例文件中所有用例的索引和值 try: if case_data == v: # 修改方法的__doc__在下一次调用时生效,此为展示在报告中的用例描述 Test_Server.test_server.__doc__ = case_dict["test_case"][ k + 1]["info"] except IndexError: pass # if not self.result["result"]: # # 查看类变量result的值,如果未False,则前一接口校验错误,此接口标记未失败,节约测试时间 # pytest.xfail("前置接口测试失败,此接口标记为失败") time.sleep(case_data["sleep_time"]) #send_request(_data, _host, _address,_port, _relevance, path, _success) code, data = requestSend.send_request( case_data, case_dict["testinfo"].get("host"), case_dict["testinfo"].get("address"), str(case_dict["testinfo"].get("port")), self.relevance, CASE_PATH, self.result) CheckResult.check(case_data["test_name"], case_data["check"][0], code, data, self.relevance, CASE_PATH, self.result)
def test_login(self, case_data): # 发送测试请求 code, data = send_request(case_data) # 校验测试结果 check(case_data, code, data)