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 = request_send.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_volume_snap(self, case_data): # 参数化修改test_add_project 注释 for k, v in enumerate(case_dict["test_case"]): # 遍历用例文件中所有用例的索引和值 try: if case_data == v: # 修改方法的__doc__在下一次调用时生效,此为展示在报告中的用例描述 Test_Volume_Snap.test_volume_snap.__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"]) code, data = request_send.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"] if case_data["request_type"] == "post": snapshot_id = data["snapshot"]["id"] self.log.info("保存volume_snapshot_id到全局配置文件") conf = Config() conf.set_conf("test_data", "volume_snapshot_id", snapshot_id) self.Assert.assert_code(code, expected_code) check_result.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 = request_send.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) # 结果校验 check_result.check( case_data["test_name"], case_data["check"][0], code, data, self.relevance, CASE_PATH, self.result)
def test_subnet(self, case_data): # 参数化修改test_subnet注释 for k, v in enumerate(case_dict["test_case"]): # 遍历用例文件中所有用例的索引和值 try: if case_data == v: # 修改方法的__doc__在下一次调用时生效,此为展示在报告中的用例描述 Test_Subnet.test_subnet.__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 = request_send.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"] subnet_id = data["subnet"]["id"] self.Assert.assert_code(code, expected_code) self.log.info("保存subnet_id到全局配置文件") conf = Config() conf.set_conf("test_data", "subnet_id", subnet_id) check_result.check(case_data["test_name"], case_data["check"][0], code, data, self.relevance, CASE_PATH, self.result)
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 = request_send.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"]: check_result.check(case_data["test_name"], i, code, data, relevance, _path, result) else: check_result.check(case_data["test_name"], case_data["check"], code, data, relevance, _path, result) # 记录关联值 Init.get_relevance(data, case_data["relevance"], rel)
def test_delete_volume(self, case_data): # 参数化修改test_add_project 注释 for k, v in enumerate(case_dict["test_case"]): # 遍历用例文件中所有用例的索引和值 try: if case_data == v: # 修改方法的__doc__在下一次调用时生效,此为展示在报告中的用例描述 Test_Delete_volume.test_delete_volume.__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 = request_send.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) check_result.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 = request_send.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到全局配置文件,用于虚拟校验") check_result.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 = request_send.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)