python生成器在读取接口用例中应用解析

Python生成器Generator

Python生成器(Generator)是一种特殊类型的函数,它可以通过yield语句逐步生成值。

生成器提供了一种延迟计算的方式,可以逐步产生结果,而不是一次性生成所有的值。

1、生成器原理:

生成器函数在被调用时并不立即执行,而是返回一个生成器对象。生成器对象可以被迭代,每次迭代都会执行生成器函数中的代码,直到遇到yield语句。

当遇到yield语句时,生成器会暂停执行,并将yield语句后面的值作为当前迭代的结果返回给调用方。下一次迭代时,生成器会从暂停的位置继续执行,直到再次遇到yield语句。

2、常用场景:

  • 迭代大数据集:处理大型文件、数据库查询结果或网络数据流等;
  • 无限序列:例如自然数序列、斐波那契数列等;
  • 数据流处理:处理连续的数据流,例如实时日志数据或传感器数据;
  • 惰性计算:算法计算应用;
  • 异步编程:生成器可以与协程结合使用,处理IO密集型任务或事件驱动的程序;

提供高效的惰性计算和按需生成数据的能力。

3、生成器在接口自动化中读取大量用例

1

2

3

4

5

6

7

8

9

10

11

# 生成器函数,打开指定测试文件并逐行读取,每读取一行,都使用yield将用例返回给调用方

def read_test_case(file_path):

    with open(file_path,'r') as file:

        for line in file:

            # line.strip(),字符串方法,用于去除字符串两端的空白字符(包括空格、制表符、换行符等)

            yield line.strip()

# 测试文件路劲

test_case_path = "testcase.txt"

for test_case in read_test_case(test_case_path):

    # execute_case函数为执行用例函数

    execute_case(test_case)

4、生成器+pytest实现参数化

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#定义:生成器是由函数和yield关键字创造出来的写法

'''

case:模拟从excel或yaml文件读取出的用例数据

     标题 内容 预取结果 是否执行

'''

import pytest

case=[('标题', '内容', '预期结果','是'),('标题1', '内容1', '预期结果1','是'),('标题2', '内容2', '预期结果2','是2')]

def ye():

    '''这里写读取文件的方法,是最终读取case格式这样的用例数据,返回一个生成器对'''

    for i in case:

        # 判断用例是否需要执行,如是,返回

        #print(f'i={i}')

        if i[3] == '是':

            # 返回一组用例数据,这组数据使用完后,再返回下一组数据

            yield i

# 使用生成器需要循环读取它返回的每一个值,生成器就是ye()这个函数

# for i in ye():

#     print(i)

#   ('标题', '内容', '预期结果', '是')

#   ('标题1', '内容1', '预期结果1', '是')

@pytest.mark.parametrize('title,body,result,is_execute',ye())

def test(title,body,result,is_execute):

    print(f'title={title},是否执行={is_execute}')

    assert '是' == is_execute

if __name__ == '__main__':

    pytest.main([r'E:\Mygithub projects\New_api_auto\test_api.py'])

运行结果 

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
qq群号:485187702【暗号:csdn11】
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
视频+文档+PDF+面试题可以关注公众号:【软件测试小dao】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中的AOP编程详解

Java中的AOP编程详解 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 什么是AOP? AOP(Aspect-Oriented Programming,面…

2024年【A特种设备相关管理(A4电梯)】试题及解析及A特种设备相关管理(A4电梯)模拟试题

题库来源:安全生产模拟考试一点通公众号小程序 A特种设备相关管理(A4电梯)试题及解析根据新A特种设备相关管理(A4电梯)考试大纲要求,安全生产模拟考试一点通将A特种设备相关管理(A4电梯&#x…

Mac密室逃脱游戏推荐:Escape Simulator for mac安装包

Escape Simulator 是一款逃生模拟游戏,玩家在游戏中需要寻找线索、解决谜题,以逃离各种房间或环境。这种类型的游戏通常设计有多个关卡或场景,每个场景都有不同的设计和难度。 在 Escape Simulator 中,玩家的目标通常是找到出口或…

算法力扣刷题——总结篇【四】和string类详解

前言 字符串章节部分跟随学习结束&#xff0c;作出总结。 一、题目及方法总结 &#xff08;1&#xff09;反转字符串&#xff1a;双指针法。 反转全部字符串&#xff0c;i在开头&#xff0c;j在结尾&#xff1b;判断条件i < j ;每隔2k反转前k个字符&#xff0c;i改成i 2…

PermissionError: [Errno 13] Permission denied: ‘/tmp/gradio...‘

无管理员权限修改 Gradio 默认路径遇到的 PermissionError 问题 在使用 Gradio 进行开发和部署时&#xff0c;可能会遇到如下报错&#xff1a; PermissionError: [Errno 13] Permission denied: /tmp/gradio/tmpzo5r9g_k.png报错分析 上述报错是由于在没有权限访问指定路径时…

东方韵味:红酒与茶道的很好邂逅

在古老的东方&#xff0c;茶道与红酒各自承载着深厚的文化底蕴和历史传承。当这两大传统文化碰撞、交融&#xff0c;仿佛展开了一幅绚烂多姿的画卷&#xff0c;既展现了东方的神秘韵味&#xff0c;又融入了红酒的异国风情。今天&#xff0c;就让我们一同探索这场红酒与茶道的很…

详解微服务应用灰度发布最佳实践

作者&#xff1a;子丑 本次分享是站在 DevOps 视角的灰度发布实践概述&#xff0c;主要内容包括以下四个方面&#xff1a; 第一&#xff0c;灰度发布要解决的问题&#xff1b; 第二&#xff0c;灰度发布的四种典型场景&#xff1b; 第三&#xff0c;如何把灰度发布融入到应…

关于std::memory_order_consume

原文&#xff1a;https://preshing.com/20140709/the-purpose-of-memory_order_consume-in-cpp11/ 翻译&#xff1a;C11中memory_order_consume的目的 https://blog.csdn.net/netyeaxi/article/details/80718781 文章中有这样一个例子&#xff1a; g Guard.load(memory_ord…

terminals database is inaccessible

在复制虚拟环境后&#xff0c;执行clean操作经常报以上错误 解决方案如下&#xff1a; vim ~/.bashrc alias clear"TERMxterm /usr/bin/clear" source ~/.bashrc

2024-07-03_外语学习

文章目录 1. SSCC&#xff08;Serial Shipping Container Code&#xff09;2. Serial读音词源ser-01ser-02 3. routing instruction在计算领域在物流领域Routing Instruction 的词源分析RoutingInstruction 1. SSCC&#xff08;Serial Shipping Container Code&#xff09; 在…

2024年07月03日 Redis部署方式和持久化

Redis持久化方式&#xff1a;RDB和AOF&#xff0c;和混合式 RDB&#xff1a;周期备份模式&#xff0c;每隔一段时间备份一份快照文件&#xff0c;从主线程Fork一个备份线程出来备份&#xff0c;缺点是会造成数据的丢失。 AOF&#xff1a;日志模式&#xff0c;每条命令都以操作…

Java8环境安装(jdk1.8安装)详细教程

Java 8环境安装&#xff08;jdk1.8安装&#xff09;详细教程 Java 8&#xff08;也称为JDK 1.8&#xff09;&#xff0c;是Oracle公司于2014年3月发布的一个重要的Java语言版本。这个版本自发布以来&#xff0c;因其众多的新特性和改进&#xff0c;被认为是Java语言发展历程中…

itk::ShapedNeighborhoodIterator类C2516问题

错误问题&#xff1a; 1>C:\itk\src-5.3.0\Modules\Core\Common\include\itkShapedNeighborhoodIterator.h(183,1): error C2516: itk::ShapedNeighborhoodIterator<TImage,TBoundaryCondition>::ConstIterator: is not a legal base class 1>C:\itk\src-5.3.0\Mo…

0基础学C++ | 第11天 | 基础知识 | 引用

目录 引用的基本使用 引用的注意事项 引用做函数参数 引用做函数的返回值 引用的本质 引用的基本使用 作用&#xff1a;引用就是给变量起别名&#xff0c;它不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#…

MySql中每行多值属性的计数值

MySql中每行多值属性的计数值 在MySQL中&#xff0c;每行多值属性的计数值指的是在一个表中的某个字段中存储了多个值&#xff0c;而不是单个值。这种情况下&#xff0c;我们需要计算每行中多值属性的数量。 在MySQL中&#xff0c;可以使用内置的函数来计算每行多值属性的计数…

【FFmpeg】avcodec_send_frame函数

目录 1.avcodec_send_frame1.1 将输入的frame存入内部buffer&#xff08;encode_send_frame_internal&#xff09;1.1.1 frame的引用函数&#xff08;av_frame_ref &#xff09;1.1.1.1 帧属性的拷贝&#xff08;frame_copy_props&#xff09;1.1.1.2 buffer的引用函数&#xf…

Java框架常见面试题

在Java框架面试中&#xff0c;面试官通常会考察候选人对常见Java框架的理解、使用经验以及解决问题的能力。以下是一些常见的Java框架面试题及其详细回答&#xff1a; 1. Spring框架相关问题 问题&#xff1a;Spring框架的核心组件有哪些&#xff1f;它们各自的作用是什么&am…

Appium 使用隐式等待,无法执行代码怎么办?

简介 添加等待是为了确保自动化脚本在执行过程中与应用程序之间的同步和稳定性。 应用程序的响应时间是不确定的&#xff0c;可能存在网络延迟、加载时间、动画效果等因素。如果在执行自动化脚本时没有适当的等待机制&#xff0c;脚本可能会在应用程序还未完成相应操作或加载完…

转让5000万无区域能源公司要求和流程

国家局的公司&#xff0c;也就是无地域无区域性的公司名称。这样的公司是还可以继续注册的&#xff0c;但是想要拥有国家局无区域的名称就不是那么容易的了。总局的企业要求高&#xff0c;也是实力的体现。对字号有保护。所以有很多人都对无地域的名称一直情有独钟。现有一家名…

【logback-spring配置不生效,开发环境和生产环境配置不同输出级别】

<?xml version"1.0" encoding"UTF-8"?> <configuration debug"false"><!-- ****************************************************************************************** --><!-- ****************************** 本地…