Example #1
0
    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)
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
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)
Example #7
0
    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)
Example #8
0
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)