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

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.xdnf.cn/news/17876.html

相关文章:

  • 【LeetCode 热题 100】45. 跳跃游戏 II
  • 杭州网站建设:如何展示企业科研实力?
  • GitCode疑难问题诊疗
  • 状态流程框架(cola-component-statemachine)
  • 正点原子STM32H743配置 SDRAM
  • 序列晋升6:ElasticSearch深度解析,万字拆解
  • 【补充】数据库中有关系统编码和校验规则的简述
  • 非极大值抑制(NMS)详解:目标检测中的“去重神器”
  • 小兔鲜儿-小程序uni-app(二)
  • 【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架
  • C语言基础00——基本补充(#define)
  • 非中文语音视频自动生成中文字幕的完整实现方案
  • 38 C++ STL模板库7-迭代器
  • 电子电气架构 --- 线束设计一些事宜
  • 商城开发中,有哪些需要关注的网络安全问题
  • 【大模型微调系列-02】 深度学习与大模型初识
  • tun/tap 转发性能优化
  • 如何通过ETLCloud做数据监听
  • 北京JAVA基础面试30天打卡10
  • Unity与OpenGL中的材质系统详解
  • 电子电气架构 --- 探索软件定义汽车(SDV)的技术革新
  • 力扣326:3的幂
  • Ubuntu20.04下Px4使用UORB发布消息
  • OpenCV-循环读取视频帧,对每一帧进行处理
  • Qt——常用Widget(控件)
  • 【swift】SwiftUI动画卡顿全解:GeometryReader滥用检测与Canvas绘制替代方案
  • 有红帽认证证书可以0元置换华为openEuler-HCIA/HCIP认证
  • 醋酸镧:看不见的科技助力
  • 介绍TCP的拥塞控制
  • Oracle EBS R12.2 adlnkoh.sh执行报错