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

发布于:2025-08-17 ⋅ 阅读:(12) ⋅ 点赞:(0)

随机测试数据

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

python faker

  • 这是一个可以创建测试数据的依赖
  • 可以通过pip install 安装
  • 安装好后,可以通过以下代码来获取随机中文姓名
from faker import Faker

fake = 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("{") + 1
                end = 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文件的定义如下:
      在这里插入图片描述
    • 测试用例的代码如下:
      在这里插入图片描述

网站公告

今日签到

点亮在社区的每一天
去签到