当前位置: 首页 > news >正文

Pytest项目_day17(随机测试数据)

随机测试数据

  • 我们想要实现,将yaml中的测试数据随机生成,而不需要每次都手动设定好,可以通过以下的方法

python faker

  • 这是一个可以创建测试数据的依赖
  • 可以通过pip install 安装
  • 安装好后,可以通过以下代码来获取随机中文姓名
from faker import Fakerfake = Faker(locale="zh-CN")
def random_name():return fake.name()

定义YAML文件

  • 我们可以在需要随机生成数据的地方,使用${}来包裹变量,这是规范写法
    在这里插入图片描述

将YAML中的random_name()替换掉

  • 我们可以获取YAML中的指定字典数据,然后匹配value,并替换value,最后返回字典,即可实现
  • 注意,在匹配value时,我们需要将所有value都转换为字符串,这样才可以使用in关键字、.index()方法、[]切片操作。因为有的value是int类型
  • 切片操作是从start开始到end-1结束
  • 替换数据这里我们不写死,而是使用eval()eval()方法可以调用传入的实参中的方法,此处就是调用random_name()
def func_yaml(data):if isinstance(data, dict):for key, value in data.items():if "${" in str(value):start = str(value).index("{") + 1end = str(value).index("}")func_name = str(value)[start:end]data[key] = eval(func_name)return data

继续将age也改为随机数,并进行替换

  • YAML中的定义如下:
    在这里插入图片描述
  • age()方法的定义如下:
  • 注意,randint()中的两个参数,分别是开始和结束,都包含
def age():return random.randint(10, 100)
  • 接着,由于我们没有将func_yaml()写死,所以可以直接适配age()方法,调用后的输出结果如图
    在这里插入图片描述

如果我们需要将姓名前的地区也机上,同时地区不随机

  • YAML文件如下:
    在这里插入图片描述
  • 我们需要在将固定部分拼接到方法返回值上,并且仅在name键值对上进行操作,代码如下
def func_yaml(data):if isinstance(data, dict):for key, value in data.items():if "${" in str(value):start = str(value).index("{")end = str(value).index("}")func_name = str(value)[start+1:end]if key == "name":data[key] = str(value)[:start-1]+eval(func_name)else:data[key] = eval(func_name)return data

如果我们需要将姓名后的职位也加上,同时职位也不随机

  • YAML文件如下:
    在这里插入图片描述
  • 我们也需要在将固定部分拼接到方法返回值上,并且仅在name键值对上进行操作,代码如下
def func_yaml(data):if isinstance(data, dict):for key, value in data.items():if "${" in str(value):start = str(value).index("{")end = str(value).index("}")func_name = str(value)[start+1:end]if key == "name":data[key] = str(value)[:start-1]+eval(func_name)+str(value)[end+1:]else:data[key] = eval(func_name)return data
  • 此时,我们可以将parametrize和随机测试数据组合起来,如下所示:
    • YAML文件的定义如下:
      在这里插入图片描述
    • 测试用例的代码如下:
      在这里插入图片描述
http://www.lryc.cn/news/621753.html

相关文章:

  • JUC学习笔记-----LongAdder
  • 2025年最新油管视频下载,附MassTube下载软件地址
  • 嵌入式 C 语言编程规范个人学习笔记,参考华为《C 语言编程规范》
  • 嵌入式硬件篇---电容串并联
  • 嵌入式硬件篇---电容滤波
  • flutter开发(二)检测媒体中的静音
  • Flinksql bug: Heartbeat of TaskManager with id container_XXX timed out.
  • 对抗损失(GAN)【生成器+判断器】
  • LeetCode 922.按奇偶排序数组2
  • 大模型LLM部署与入门应用指南:核心原理、实战案例及私有化部署
  • 解决安装特定版本 anaconda-client 的错误
  • CSS从入门到精通完整指南
  • 【科研绘图系列】R语言绘制三维曲线图
  • 探索无人机图传技术:创新视野与无限可能
  • Salary Queries
  • 商品数据仓库构建指南:TB 级淘宝 API 历史详情数据归档方案
  • 8.15网络编程——UDP和TCP并发服务器
  • ​​金仓数据库KingbaseES V9R1C10安装教程 - Windows版详细指南​
  • MySQL知识点(上)
  • 复杂度扫尾+链表经典算法题
  • 开发避坑指南(27):Vue3中高效安全修改列表元素属性的方法
  • 科普:Pygame 中,`pg.Surface` v.s. `screen`
  • 力扣 hot100 Day74
  • wordpress忘记密码怎么办
  • 2025最新:如何禁止指定软件联网?
  • php危险函数,二.assert()[现版本已弃用]
  • 基于nodejs+express的网上零食销售系统/零食商城平台
  • 智和信通全栈式运维平台落地深圳某学院,赋能运维管理提质提效
  • Golang信号处理实战
  • Chrome插件开发实战:从架构到发布全流程