如何在WebdriverIO测试中调用API?JavaScript新手技术咨询
在WebdriverIO中构造Payload、调用API并获取响应
1. 构造API Payload
Payload本质就是符合接口要求的JavaScript对象,完全按照API文档定义的字段、数据类型来写就行。比如一个登录接口需要用户名和密码,就这么构造:
const loginPayload = { username: 'test_user', password: 'test_pass123', rememberMe: true // 按需添加布尔类型字段 };
注意字段名、数据类型要和API要求完全匹配,比如接口要求密码是字符串,就别传数字类型的值。
2. 调用API并获取响应
WebdriverIO基于Node.js,直接用Node.js的HTTP工具就能实现API调用,这里推荐两种常用方式:
方式一:用原生fetch(无需额外安装依赖)
WebdriverIO测试是异步执行的,要把fetch调用放在browser.call()里,确保测试流程等待API请求完成。示例代码:
describe('API调用测试', () => { it('发送POST请求并获取响应', async () => { // 1. 构造Payload const payload = { title: 'foo', body: 'bar', userId: 1 }; // 2. 调用API const response = await browser.call(async () => { return fetch('https://your-api-url.com/posts', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer your-token-here' // 接口需要鉴权时添加 }, body: JSON.stringify(payload) // 把JS对象转成JSON字符串 }); }); // 3. 解析响应数据 const responseData = await response.json(); // 打印响应或做断言验证 console.log('API响应:', responseData); expect(response.status).toBe(201); // 断言响应状态码 expect(responseData.title).toBe(payload.title); // 断言返回字段和传入值一致 }); });
方式二:用axios(更简洁的HTTP库)
先安装axios依赖:
npm install axios --save-dev
然后在测试文件里导入并使用:
const axios = require('axios'); describe('API调用测试', () => { it('用axios发送登录请求', async () => { const payload = { username: 'test_user', password: 'test_pass' }; const response = await browser.call(async () => { return axios.post('https://your-api-url.com/login', payload, { headers: { 'Content-Type': 'application/json' } }); }); // axios会自动解析响应数据,存在response.data中 console.log('登录响应:', response.data); expect(response.status).toBe(200); expect(response.data.token).toBeDefined(); // 断言返回了鉴权token }); });
关键点说明
- 必须用
browser.call()包裹API请求:WebdriverIO的测试队列是同步执行的,异步操作需要用call()让测试等待请求完成。 - 异步处理:所有异步操作都要加
await,确保代码按预期顺序执行。 - 鉴权处理:如果API需要token或其他鉴权信息,直接在headers里添加对应字段即可。
内容的提问来源于stack exchange,提问作者Sravanthi Surethkhar
相关产品推荐
相关产品推荐

