Apifox中结合Faker.js生成模拟数据,主要通过 “动态值” 和 “高级Mock” 两大功能实现。这些功能内置于Apifox,无需单独安装Faker.js即可直接使用。
下面将详细展开其中最常用、最灵活的“动态值表达式”和“高级Mock”功能的专业用法。
动态值表达式:基于Faker.js语法
这是最直接使用Faker.js能力的方式。Apifox对语法进行了优化,更简洁直观。
基础语法
格式:{{$分类.方法(参数)}}
示例:生成中文姓名,使用 {{$person.fullName}}。
输入 {{$ 会触发自动补全,方便查找。
各类数据生成示例
常见需求及其对应的动态值表达式,可以直接在请求参数或响应体中使用。
人名:{{$person.fullName}}
唯一标识:{{$string.uuid}
手机号:{{$phone.mobile}}
地址:{{$location.city}}
银行卡号:{{$finance.accountNumber(length=19)}}
身份证号:{{$person.idCard(minAge=20, maxAge=50)}}
图片URL:{{$image.url(width=300, height=300)}}
布尔值:{{$datatype.boolean(probability=0.7)}}
枚举值:{{$helpers.arrayElement(['待支付','已完成','已取消'])}}
正则匹配:{{$helpers.fromRegExp('[A-Z]{2}[0-9]{4}')}}
当前时间:{{$date.now}}
未来时间:{{$date.now|addHours(2)}}
格式化时间:{{$date.now|format('yyyy-MM-dd')}}
高级Mock:实现条件化和逻辑化数据
当您需要根据不同请求参数返回不同的动态数据,或实现更复杂的生成逻辑时,就需要使用“高级Mock”功能。
Mock期望:条件化响应
可以为同一个接口设置多个“期望”。每个期望可以指定不同的请求条件(如query参数、body值等)和对应的返回数据。
场景:模拟一个用户查询接口,根据传入的不同用户ID返回不同状态的数据。
设置方法:在接口的“高级Mock”标签页创建期望,在“期望条件”中设置参数规则,在“返回数据”中填写包含上述动态值表达式的JSON。
Mock脚本:完全编程控制
这是最强大的方式。可以通过编写JavaScript脚本,获取请求信息,并编程式地生成返回数据。
主要对象:使用 fox.mockRequest 获取请求参数,用 fox.mockResponse 设置最终返回。
示例场景:模拟分页数据,根据请求的页码和每页大小动态计算返回的数据条数和内容。
javascript
// 获取请求中的分页参数
const page = parseInt(fox.mockRequest.getParam('page')) || 1;
const size = parseInt(fox.mockRequest.getParam('size')) || 10;
// 构建一个包含动态生成数据的列表
const dataList = [];
for (let i = 0; i < size; i++) {
dataList.push({
// 使用内置的Mock.js库生成中文名和邮箱
id: (page - 1) * size + i + 1,
name: MockJs.mock('@cname'), // 注意:此处MockJs是Apifox内置的库[citation:3]
email: MockJs.mock('@email'),
createTime: new Date() // 动态生成时间
});
}
// 设置最终响应体
fox.mockResponse.setBody({
code: 0,
data: {
list: dataList,
total: 120,
page: page,
size: size
}
});
// 可以额外设置响应延迟,模拟网络状况
fox.mockResponse.setDelay(300);
建议和技巧
实现地址等数据的联动:通过将多个动态值表达式(如{{$location.state}}{{$location.city}})拼接,可以生成完整地址。但需注意,目前各部分数据是独立随机生成的,无法实现真实的省市区三级联动。
控制数据的区域本地化:Apifox支持为动态值函数单独设置区域(Locale),或在项目设置中配置默认区域,来生成特定语言或格式的数据(如英文名、中国地址)。
在接口测试中动态传参:在“前置操作”的脚本中,您可以预先使用 pm.variables.set('varName', 'value') 来设置一个变量,然后在请求体中使用 {{varName}} 来引用它,实现测试数据的动态生成和传递。
组合与嵌套使用:Apifox允许无限组合模拟数据和动态值,例如 {{$person.fullName}}的邮箱是{{$internet.email}},可以创造出高度逼真和灵活的测试场景。
在请求参数或Mock数据中直接使用动态值表达式是最高效、最常用的方式,可以覆盖80%以上的模拟数据需求。当遇到需要根据请求内容动态变化响应,或者生成具有复杂逻辑和结构的数据时,考虑使用功能更强大的Mock期望与Mock脚本。