pytest执行顺序以及打印日志

本文档介绍了一个使用 pytest 进行自动化测试的场景,其中涉及 Jenkins、Harbor 和 GitLab 的集成。在测试执行前,先通过 conftest 函数准备 Jenkins、Harbor 和 GitLab 的环境。测试用例中,若这些服务不可用,则跳过测试。测试过程中,更新 CodeQualityBinding,并创建 Golang 构建配置。在测试完成后,进行了工具链的创建、绑定以及清理工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from new_case.devops.conftest import prepare_jenkins
from new_case.devops.conftest import prepare_harbor
from new_case.devops.conftest import prepare_gitlab


@pytest.mark.skipif(not prepare_jenkins(), reason="jenkins不可用")
@pytest.mark.skipif(not prepare_harbor(), reason="harbor不可用")
@pytest.mark.skipif(not prepare_gitlab(), reason="gitlab不可用")

mark执行顺序在conftest之前

    def 测试创建golang构建配置(self, jenkins, gitlab, harbor, sonarqube):
        self.CodeQualityBinding.update({"name": sonarqube["bind_name"]})
        self.values['CodeQualityBinding'] = json.dumps(self.CodeQualityBinding)
        data = {
            "pipeline_name": self.config_name,
            "display_name": self.config_name,
            "project_name": PROJECT_NAME,
            "jenkins_bind_name": jenkins["bind_name"],
            "pipeline_template_name": "GoLangBuilder",
            "values": self.values
        }
@pytest.fixture(scope="session")
def jenkins():
    delete_tool = False
    secret_info = {
        "secret_name": "{}-ares-jenkins".format(settings.RESOURCE_PREFIX),
        "secret_type": "kubernetes.io/basic-auth",
        "username": str(base64.b64encode(settings.JENKINS_USERNAME.encode('utf-8')), 'utf8'),
        "password": str(base64.b64encode(settings.JENKINS_PASSWORD.encode('utf-8')), 'utf8')
    }
    tool_info = {
        "tool_name": settings.JENKINS_TOOL_NAME,
        "host_url": settings.JENKINS_URL,
        "accessUrl": settings.JENKINS_URL,
        "api_type": "jenkinses",
        "tooltypename": "jenkins"
    }

    bind_info = {
        "bind_name": "{}-ares-jenkins-cicd".format(settings.RESOURCE_PREFIX),
        "kind": "JenkinsBinding",
        "api_type": "jenkinsbinding",
        "audit_type": "jenkinsbindings"
    }

    pre_clear_data(secret_info, bind_info, tool_info)

    # create tool chain
    ret = chain_tool.create_chain(tool_info["api_type"], './test_data/tool_chain/create_chain.jinja2',
                                  data=tool_info)
    if ret.status_code != 201:
        tool_name = get_tool_name('continuousIntegration', tool_info['host_url'])
        tool_info['tool_name'] = tool_name

    secret.create_secret(scope="", file='./test_data/devops_secret/create_secret.jinja2', data=secret_info)

    # bind to project
    bind_data = {
        "kind": "JenkinsBinding",
        "description": "description",
        "bind_name": bind_info["bind_name"],
        "namespace": settings.PROJECT_NAME,
        "secret_name": secret_info['secret_name'],
        "tool_name": tool_info['tool_name'],
        "secret_namespace": "global-credentials" if settings.DEFAULT_NS == "alauda-system" else "{}-global-credentials".format(
            settings.DEFAULT_NS)
    }
    bind_info.update(bind_data)

    ret = chain_tool.bind_chain("jenkinsbinding", "test_data/tool_chain/create_jenkins_bind.jinja2",
                                bind_data)
    assert ret.status_code == 200, "初始化绑定jenkins工具链失败"

    # 清理数据
    yield bind_info

conftest 使用yield做为返回值, yield后的内容就是返回值, 测试用例直接调用函数名称即可。 函数名称就是返回值的内容

多个conftest的执行顺序

首先执行外层conftest
接着执行内层conftest
最后执行外层conftest的teardown

如果直接运行pytest -s 通常会打印日志 但是 如果有pytest.ini 文件而且使用了多线程插件 此时 多线程会导致无法打印日志
-n 1 --dist=loaddir 去掉pytest.ini 中的这个配置即可打印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值