You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:53:14