随机测试数据
- 我们想要实现,将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文件的定义如下:

- 测试用例的代码如下:
