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

Cypress API测试中如何正确传递form-data格式请求体?

Cypress 处理form-data 请求体的问题及解决方法

问题描述

我在Postman中有一个form-data格式的请求体,需要使用Cypress对该API端点进行自动化测试。当前编写的测试代码如下:

let doc_orderId = null;
let documentNumber = 'AVBBBBB3';

cy.fixture('onFileDocPost').then(onFileDocPost => {
    doc_orderId = onFileDocPost.doc_orderId;

    cy.request({
            method: 'POST',
            url: url + onFileUrl + onFilePostUrl,
            auth: {
                'bearer': Cypress.env('token')
            },
            headers: {
                Authorization: 'Bearer token'
            },
            form: true,
            body: {
                OrderId : 11822104127,
                RawResponse: 'cypress/fixtures/TestFile.png',
                SearchQuery:  {documentNumber},
                ExtractionDateUtc: "2023-06-09T06:22:00Z"
            }
    })

但不确定传递form-data的方式是否正确,尽管请求体中已包含对应字段,仍出现报错。请问该字段是否需要特定格式?希望得到解决方法。

解决方法

你的代码存在几个关键问题,以下是修正方案:

1. 移除重复的Authorization配置

同时使用auth.bearer和headers.Authorization会导致冲突,后者还写死了无效的token字符串。建议保留auth配置,它会自动生成正确的Authorization请求头,删除冗余的headers配置即可。

2. 正确处理文件上传字段

form-data中的文件不能直接传路径字符串,需要将文件转为Blob格式后传入。使用cy.fixture读取文件二进制内容,再通过Cypress.Blob转换为Blob对象。

3. 调整SearchQuery字段格式

如果后端期望该字段是JSON格式的字符串,需要用JSON.stringify()将对象转为字符串;如果是普通字符串参数,直接传documentNumber即可。

修正后的完整代码

let documentNumber = 'AVBBBBB3';

cy.fixture('onFileDocPost').then(onFileDocPost => {
  // 读取目标文件并转为Blob格式
  cy.fixture('TestFile.png', 'binary').then(fileBinary => {
    return Cypress.Blob.binaryStringToBlob(fileBinary, 'image/png');
  }).then(fileBlob => {
    cy.request({
      method: 'POST',
      url: `${url}${onFileUrl}${onFilePostUrl}`,
      auth: {
        bearer: Cypress.env('token')
      },
      form: true,
      body: {
        OrderId: 11822104127,
        // 传入转换后的Blob文件对象
        RawResponse: fileBlob,
        // 根据后端需求选择是否转为JSON字符串
        SearchQuery: JSON.stringify({ documentNumber }),
        ExtractionDateUtc: "2023-06-09T06:22:00Z"
      }
    }).then(response => {
      // 可添加断言验证请求结果
      expect(response.status).to.eq(200);
    });
  });
});

额外注意事项

  • 确认TestFile.png确实存在于cypress/fixtures目录下,路径无误。
  • 如果文件类型不是PNG,要修改binaryStringToBlob的第二个参数(MIME类型),比如JPG文件用image/jpeg。
  • 若报错仍存在,检查后端返回的具体错误信息,确认字段名、数据类型是否与接口文档完全匹配。

内容的提问来源于stack exchange,提问作者grumpypig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:43:03