httprunner用例结构(前后置)

说明:httprunner 结合 pytest 的前后置方式

1. 用例级别前后置

1.1. setup teardown

class TestCaseRefTestcase(HttpRunner):
    # 用例级别前后置
    def setup(self):
        logger.warning("------用例级别前置")

    def teardown(self):
        logger.warning("------用例级别后置")

    config = (
        Config("request methods testcase: reference testcase")
        .variables(
            **{
                "foo1": "testsuite_config_bar1",
                "expect_foo1": "testsuite_config_bar1",
                "expect_foo2": "config_bar2",
            }
        )
        .base_url("https://postman-echo.com")
        .verify(False)
    )

    teststeps = [
        Step(
            RunTestCase("request with functions")
            .with_variables(
                **{"foo1": "testcase_ref_bar1", "expect_foo1": "testcase_ref_bar1"}
            )
            .call(Requests)
            .export(*["foo3"])
        ),
        Step(
            RunRequest("post form data")
            .with_variables(**{"foo1": "bar1"})
            .post("/post")
            .with_headers(
                **{
                    "User-Agent": "${get_user_agent()}",
                    "Content-Type": "application/x-www-form-urlencoded",
                }
            )
            .with_data("foo1=$foo1&foo2=$foo3")
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal("body.form.foo1", "bar1")
            .assert_equal("body.form.foo2", "bar21")
        ),
    ]


if __name__ == "__main__":
    TestCaseRefTestcase().test_start()

2. 类级别前后置

2.1. setup_class

    def setup_class(self):
        logger.warning("------类级别前置")

2.2. teardown_class

    def teardown_class(self):
        logger.warning("------类级别后置")

3. 模块级别前后置

3.1. conftest.py

import uuid
from typing import List

import pytest
from httprunner import Config, Step
from loguru import logger


@pytest.fixture(scope="session", autouse=True)
def session_fixture(request):
    """setup and teardown each task"""
    logger.warning(f"-------conftest模块级别前置---------")
    total_testcases_num = request.node.testscollected
    testcases = []
    for item in request.node.items:
        testcase = {
            "name": item.cls.config.name,
            "path": item.cls.config.path,
            "node_id": item.nodeid,
        }
        testcases.append(testcase)

    logger.debug(f"collected {total_testcases_num} testcases: {testcases}")

    yield

    logger.debug(f"teardown task fixture")
    logger.warning(f"-------conftest模块级别后置---------")

    # teardown task
    # TODO: upload task summary


@pytest.fixture(scope="function", autouse=True)
def testcase_fixture(request):
    """setup and teardown each testcase"""
    logger.warning(f"-------conftest函数级别前置---------")
    config: Config = request.cls.config
    teststeps: List[Step] = request.cls.teststeps

    logger.debug(f"setup testcase fixture: {config.name} - {request.module.__name__}")

    def update_request_headers(steps, index):
        for teststep in steps:
            if teststep.request:
                index += 1
                teststep.request.headers["X-Request-ID"] = f"{prefix}-{index}"
            elif teststep.testcase and hasattr(teststep.testcase, "teststeps"):
                update_request_headers(teststep.testcase.teststeps, index)

    # you can update testcase teststep like this
    prefix = f"HRUN-{uuid.uuid4()}"
    update_request_headers(teststeps, 0)

    yield
    logger.warning(f"-------conftest函数级别前置---------")
    logger.debug(
        f"teardown testcase fixture: {config.name} - {request.module.__name__}"
    )

    summary = request.instance.get_summary()
    logger.debug(f"testcase result summary: {summary}")

4. 优先级顺序效果展示

testcases\debug\ref_testcase_test.py 2024-03-01 17:55:21.271 | WARNING  | testcases.debug.conftest:session_fixture:12 - -------conftest模块级别前置---------
2024-03-01 17:55:21.273 | DEBUG    | testcases.debug.conftest:session_fixture:23 - collected 1 testcases: [{'name': 'request methods testcase: reference testcase', 'path': 'D:\\httprunner\\demo\\testcases\\debug\\ref_testcase_test.py', 'node_id': 'testcases/debug/ref_testcase_test.py::TestCaseRefTestcase::test_start'}]
2024-03-01 17:55:21.274 | WARNING  | testcases.debug.ref_testcase_test:setup_class:18 - ------类级别前置
2024-03-01 17:55:21.275 | WARNING  | testcases.debug.conftest:testcase_fixture:37 - -------conftest函数级别前置---------
2024-03-01 17:55:21.275 | DEBUG    | testcases.debug.conftest:testcase_fixture:41 - setup testcase fixture: request methods testcase: reference testcase - testcases.debug.ref_testcase_test
2024-03-01 17:55:21.276 | WARNING  | testcases.debug.ref_testcase_test:setup:25 - ------用例级别前置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/440761.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用一个 Python 脚本实现依次运行其他多个带 argparse 命令行参数的 .py 文件

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 问题描述:在 Windows 环境中,您希望通过一个 Python 脚本来实现特定的自动化任务,该任务需要依次运行其他多个带 argparse 命令行参数的 .py 文件。您希望找到一种简…

【jenkins】简单安装及配置(Windows环境)

前言 jenkins是一款跨平台的持续集成和持续交付、基于Java开发的开源软件,提供任务构建、持续集成监控的功能,可以使开发测试人员更方便的构建软件项目, 提高工作效率。Windows平台下,一般安装方法有2种:安装程序安装…

unicloud where 使用

where介绍 在uniCloud中,WHERE是一个用于指定查询条件的关键字。它允许用户根据特定的条件来筛选和查询云数据库中的数据。WHERE语句的基本语法格式是WHERE condition,其中condition表示查询条件,可以是一个或多个逻辑表达式组成的条件。 在…

第七十九天 WAF攻防-漏洞发现协议代理池GobyAWVSXray

第79天 WAF攻防-漏洞发现&协议&代理池&Goby&AWVS&Xray 知识点: 1、Http/s&Sock5协议 2、Awvs Xray&Goby代理 3、Pxoxifier进程代理使用 4、Safedog&BT&Aliyun防护 演示案例: Awws漏扫-Sadedog-白名单-内置 Awws漏…

使用Apache Kafka的Golang实践指南

您是否在寻找构建可扩展、高性能应用程序的方法,这些应用程序可以实时处理流数据?如果是的话,结合使用Apache Kafka和Golang是一个很好的选择。Golang的轻量级线程非常适合编写类似Kafka生产者和消费者的并发网络应用程序。它的内置并发原语&…

动态规划DP之背包问题3---多重背包问题

目录 DP分析: 优化: 二进制优化 例题: 01背包是每个物品只有一个,完全背包问题是每个物品有无限个。 那么多重背包问题就是 每个物品有有限个。 有 N 种物品和一个容量是 V 的背包。 第 i 种物品最多有 si 件,每件体…

Mysql学习笔记之事务详解(读未提交、读以提交、可重复读、串行化读)

在这个博主的基础上,增加两种情况的对比:https://blog.csdn.net/llllllkkkkkooooo/article/details/108068919 可重复读中幻读现象(未使用MVCC) 设置可重复读的隔离级别 set global transaction isolation level repeatable read…

代码随想录算法训练营第day40|343. 整数拆分 、 96.不同的二叉搜索树

a.343. 整数拆分 题目链接 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: …

掼蛋的牌型与规律(上篇)

掼蛋是一项配合类的棋牌竞技游戏,掼蛋的最大魅力以及最集中的特点在于变化,在于组牌的变数。有的掼蛋新手往往先把牌配死,并且直接决定好出牌计划,然后守株待兔。掼蛋的取胜之道在于静态组合加上动态变化。本文主要介绍一下掼蛋的…

python基础篇--学习记录2

1.深浅拷贝 l1 ["张大仙","徐凤年",["李淳刚","邓太阿"]] # 变量名对应的就是内存地址,这里就是将l1的内存地址给了l2 # 现在两个变量指向同一个内存地址,l1变化l2也会变化 l2 l1 现在的需求是l2是l1的拷贝版本,但是两者是完全分割…

七彩虹@电脑cpu频率上不去问题@控制中心性能模式cpu频率上不去@代理服务器超时@账户同步设置失败

文章目录 windows电脑cpu频率上不去新电脑的系统时间问题系统时间不准造成的具体问题举例代理超时vscode同步请求失败自动校准时间 windows电脑cpu频率上不去 问题描述,标压处理器的笔记本,cpu频率上不去 如果cpu没问题的话,就应该是系统限制了功耗导致的有的笔记本有控制中心…

本鲸:打造科技招商新引擎、实现政企资源高效对接

在当今这个快速变化的时代,科技创新已成为推动社会进步和经济发展的核心动力。本鲸,作为科技创新创业服务的平台,正以其独特的视角和专业服务,为政府和企业提供一站式科技招商解决方案,助力构建创新驱动的经济发展新模…

b站小土堆pytorch学习记录—— P27-P29 完整的模型训练套路

文章目录 一、定义模型(放在model.py文件中)二、训练三、测试四、完整的训练和测试代码 一、定义模型(放在model.py文件中) import torch from torch import nnclass Guodong(nn.Module):def __init__(self):super(Guodong,self)…

在vue2中使用tailwindcss(完整教程)

如果你看过好多教程之后,还是报错,无法使用tailwindcss,我希望本教程可以让你成功上岸。 环境要求 node:>v14.17.0 安装tailwindcss 由于最新的tailwind css使用post css 8版本,vue2框架暂时还不支持&#xff0…

Springboot + Vue用户管理系统

Springboot Vue用户管理系统 主要实现了管理员的登录,用户管理,用户的增删改查等操作, 技术实现,前端采用Vue 后端采用Springboot ,前后端分离系统,数据库使用mysql 还用到了redis,mybatis-plus。。。。。。。。。…

10大主流压力/负载/性能测试工具推荐

在移动应用和Web服务正式发布之前,除了进行必要的功能测试和安全测试,为了保证互联网产品的服务交付质量,往往还需要做压力/负载/性能测试。然而很多传统企业在试水互联网的过程中,往往由于资源或产品迭代速度等原因忽视了这一块工…

【Python】科研代码学习:三 PreTrainedModel, PretrainedConfig, PreTrainedTokenizer

【Python】科研代码学习:三 PreTrainedModel, PretrainedConfig, PreTrainedTokenizer 前言Models : PreTrainedModelPreTrainedModel 中重要的方法 tensorflow & pytorch 简单对比Configuration : PretrainedConfigPretrainedConfig 中重要的方法 Tokenizer : …

influxdb2.0插入数据字段类型出现冲突问题解决

一、问题出现 一个学校换热站自控系统,会定时从换热站获取测点数据,并插入到influxdb数据库中。influxdb插入数据时,报错提示: com.influxdb.exceptions.UnprocessableEntityException: failure writing points to database: par…

组合逻辑电路(二)(译码器和编码器)

目录 译码器 简单逻辑门译码器 二进制译码器 2线-4线译码器 3线-8线译码器 二-十进制译码器 4线-10线译码器 七段显示译码器 编码器 二进制普通编码器 二-十进制普通编码器(8421BCD码编码器) 优先编码器(Priority Encoder) 译…

《解密云计算:企业之选》

前言 在当今数字化时代,企业面临着巨大的数据处理压力和信息化需求,传统的IT架构已经无法满足日益增长的业务需求。在这样的背景下,越来越多的企业开始转向云计算,以实现灵活、高效和可扩展的IT资源管理和利用。 云计算 云计算是…