首页 > 其他分享 >pytest中用装饰器控制新增接口请求时间

pytest中用装饰器控制新增接口请求时间

时间:2024-09-02 22:21:31浏览次数:12  
标签:函数 中用 接口 pytest sleep submit time data result

示例场景

假设我们有一个提交数据的函数 submit_data,我们希望在每次调用后等待一定的时间,以避免重复提交的问题。

1.自动化提交接口的时候可以使用 time.sleep() 的方式

这是最直接的方式,在函数调用后直接使用 time.sleep() 控制等待时间。

import time

def submit_data(data):
    # 模拟提交数据的操作
    print(f"提交数据: {data}")
    return {"status": "success"}

def test_submit_data_with_sleep():
    # 模拟测试提交数据,每次提交后等待2秒
    result = submit_data({"key": "value1"})
    time.sleep(2)  # 等待2秒
    result = submit_data({"key": "value2"})
    time.sleep(2)  # 再次等待2秒
    result = submit_data({"key": "value3"})
    # ...继续测试逻辑

2.使用自定义 pytest 装饰器的方式

这里使用一个自定义的装饰器 rate_limit,通过 pytest 管理测试流程,更加优雅和可扩展。

import time
import pytest
from functools import wraps

# 自定义装饰器,用于控制接口调用频率
def rate_limit(wait_time=2):  # 外层函数,接收一个参数 wait_time,用于指定等待时间(默认为2秒)
    def decorator(func):  # 内层函数,接收一个函数作为参数,这个函数就是要被装饰的目标函数
        @wraps(func)  # 使用 functools.wraps 保持原函数的元数据,例如函数名和文档字符串
        def wrapper(*args, **kwargs):  # 包装函数,用于包裹目标函数
            result = func(*args, **kwargs)  # 执行目标函数,并获取其返回值
            time.sleep(wait_time)  # 在目标函数执行后等待指定的时间(wait_time 秒)
            return result  # 返回目标函数的执行结果
        return wrapper  # 返回包装后的函数
    return decorator  # 返回装饰器


@rate_limit(wait_time=2)  # 应用自定义的频率控制装饰器
def submit_data(data):
    # 模拟提交数据的操作
    print(f"提交数据: {data}")
    return {"status": "success"}

@pytest.mark.parametrize("data", [{"key": "value1"}, {"key": "value2"}, {"key": "value3"}])
def test_submit_data_with_decorator(data):
    # 使用装饰器的方式来控制提交频率
    result = submit_data(data)
    assert result["status"] == "success"

解释

1)time.sleep() 方式:

直接在函数调用后使用 time.sleep() 暂停执行。
简单直接,但每次都需要手动调用 sleep,不易管理,且代码重复。

2)pytest 装饰器方式:

通过自定义装饰器 rate_limit,将等待逻辑封装起来,使代码更整洁。
使用 @rate_limit(wait_time=2) 装饰目标函数,自动控制每次调用后的等待时间。
结合 pytest.mark.parametrize 进行参数化测试,减少代码重复,提高可读性和可维护性。
这种方法可以让代码更易于管理和扩展,并保持测试的可读性。

标签:函数,中用,接口,pytest,sleep,submit,time,data,result
From: https://blog.csdn.net/weixin_43435891/article/details/141826075

相关文章

  • pycharm警告 :PytestConfigWarning: Unknown config option: makers
    一、PytestConfigWarning:Unknownconfigoption:makers虽然不影响执行测试用例,但是,追求完美的我很想解决掉他! 二、找报错的单词在哪,大概率这种报错在ini文件我的makers在pytest.ini。起初是想打标签,但是标签的注解是@pytest.mark.xxx,所以就把makers改成了markers,果然没有......
  • 使用Redis调用Lua脚本的方式对SpringBoot接口进行限流
    使用Redis调用Lua脚本的方式对SpringBoot接口进行限流使用Redis调用Lua脚本的方式对SpringBoot接口进行限流前言一、步骤1、自定义限流注解Limit.java,用于标注在需要限流的接口上2、编写限流类型枚举类LimitType.java3、编写限流具体实现类LimitAspect.java,通过AOP方式......
  • kimi:如何分析是哪个接口调用了最多次的operator new[]接口?
    如何分析是哪个接口调用了最多次的operatornew[]接口?重载operatornew[]:你可以在你的程序中重载operatornew[],记录每次调用时的调用栈信息。#include<iostream>#include<fstream>#include<new>#include<cstdlib>#include<execinfo.h>//包含backtrace函数#inc......
  • Tushare Pro 新版发布,免费、开源的python财经数据接口包
     Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Py......
  • VIN车辆信息查询|阿里云实现调用API接口
    整体请求流程:介绍:本次解析通过阿里云云市场的云服务来实现通过17位车架号来识别到车型的详细信息,比如年份、款式、排放标准等,首先需要准备选择一家可以提供查询的商品。https://market.aliyun.com/apimarket/detail/cmapi00065864#sku=yuncode5986400001步骤1:选择商品如图可申请......
  • HarmonyOS实战开发:NAPI接口规范开发
    简介NAPI(NativeAPI)组件是一套对外接口基于Node.jsN-API规范开发的原生模块扩展开发框架。图1 NAPI组件架构图NativeEngineJS引擎抽象层,统一JS引擎在NAPI层的接口行为。ModuleManager管理模块,用于模块加载、模块信息缓存。ScopeManager管理NativeValue的生命周......
  • Python股票程序交易接口查账,提交订单,自动交易(2)
    Python股票接口实现查询账户,提交订单,自动交易(1)上一篇是获取数据,获取数据不难,有很多第三方库都可以获取,不一定非要用券商官方的接口,程序交易主要是交易的执行,这个没有官方接口是很难实现的。券商的接口不用担心安全和稳定的问题,相当于就是普通股票账户,开通了程序化交易的权......
  • 电影票小程序API接口对接方式注册和申请接入流程
    电影票API接口对接方式注册和申请接入:注册成为合作伙伴或开发者:在API提供商处注册账号,并按照其指引填写相关信息,申请API密钥和相关文档 。了解使用条款和限制:明确API提供商的使用条款,包括请求频率限制、数据使用权限、隐私政策、版权信息、计费规则等,确保在使用过......
  • 教会小白如何使用淘宝API接口获取商品数据
    随着互联网的普及,越来越多的人开始接触网络购物,而淘宝作为中国最大的电商平台之一,成为了众多消费者首选的购物平台。然而,对于一些小白用户来说,如何通过淘宝API接口获取商品数据可能是一个难题。本文将详细介绍如何教会小白使用淘宝API接口获取商品数据。一、了解淘宝API接口淘宝......
  • Java类和接口
    对象Objectjava是面向对象的语言:对象包含了状态和行为,用户通过调用对象的方法、改变对象的属性来实现java程序的功能CarmyCar=newCar("BMW");//创建对象me.brand="Benz";//修改对象变量......