如何在WebdriverIO中实现数据驱动方案并完成数据读写?
WebdriverIO 数据驱动方案实现指南
基础数据驱动适配方案
和Selenium的实现逻辑一致,WebdriverIO可以完美兼容你之前用properties、Excel存储数据的习惯,对应实现方式如下:
- 静态配置文件存储:不需要单独用properties文件,直接创建JS/JSON格式的配置文件即可,支持字符串、数字、数组、对象等全类型数据,导入更方便。示例:
新建config/test-data.js文件写入内容:
测试用例中直接导入使用:module.exports = { defaultAccount: 'test01@test.com', defaultPwd: '123456', businessTypeList: ['充值', '消费', '退款'] }const testData = require('../config/test-data.js') - Excel/CSV数据源读取:如果习惯用表格维护测试数据,直接安装
xlsxnpm包读取即可,不需要额外依赖。示例代码:
拿到数组后直接遍历即可实现参数化测试,和Selenium的Excel数据驱动逻辑完全一致。const XLSX = require('xlsx') // 读取Excel文件 const workBook = XLSX.readFile('./test-data/scenario-data.xlsx') // 转换指定工作表为JSON数组,每一行对应一条测试用例数据 const caseDataList = XLSX.utils.sheet_to_json(workBook.Sheets['登录场景'])
全局共享日期变量实现
针对你需要统一基准日期、后续测试全基于该日期计算的需求,直接在WebdriverIO的全局配置钩子中定义变量即可,所有测试文件都可以全局访问,不会出现不同用例日期不一致的问题。
具体操作:
- 打开项目根目录的
wdio.conf.js配置文件,找到before钩子,添加如下代码:
before: async (capabilities, specs, browser) => { // 定义全局基准日期,可写死固定值,也可以取当前日期 global.baseTestDate = new Date() // 封装全局方法:获取基准日期之后/之前n天的日期 global.getOffsetDate = (offsetDays) => { const targetDate = new Date(global.baseTestDate) targetDate.setDate(targetDate.getDate() + offsetDays) // 可根据业务需要调整返回格式,示例为YYYY-MM-DD格式 return targetDate.toISOString().split('T')[0] } }
- 在任意测试用例中直接调用即可:
- 基准日期(第一天):
global.getOffsetDate(0) - 第二天日期:
global.getOffsetDate(1) - 第三天日期:
global.getOffsetDate(2)
如果需要固定基准日期,只需要修改global.baseTestDate的赋值为固定值即可,比如global.baseTestDate = new Date('2024-05-01'),所有测试用例都会基于2024-05-01计算偏移日期。
参数化测试示例
如果需要同一个测试场景跑不同日期的用例,直接遍历日期数组即可:
// 生成需要测试的3天日期 const testDateList = [0,1,2].map(offset => global.getOffsetDate(offset)) // 遍历参数生成测试用例 testDateList.forEach(testDate => { it(`验证日期为${testDate}的预约提交功能`, async () => { // 测试逻辑中直接使用testDate变量即可 }) })
内容的提问来源于stack exchange,提问作者siri
相关产品推荐
相关产品推荐

