Cypress 中的固定装置和支持文件有什么区别?哪个更好用?

What is the difference between fixtures and support files in Cypress? Which one is better to use?

fixtures 和支持文件都存储静态数据,对吧?最好推荐使用什么?

两者的目的不同。夹具用作外部静态数据片段,可由您的测试使用,而支持文件是放置可重用行为的好地方,例如您希望应用并可用于所有规范文件的自定义命令或全局覆盖。 为了更好地理解,我建议您阅读 cypress 官方文档 https://docs.cypress.io/guides/core-concepts/writing-and-organizing-tests.html#Support-file

fixtures 的一个用例可能是放置测试期间使用的静态数据,例如 JSON body.

假设您需要存储一些您将要经常使用的请求 body JSON。它不会有太大变化,也不需要通过测试来改变。 requestBody.json 可以存储在 fixtures 中,然后在测试规范中可以引用 .json 然后在测试中使用。 cypress/fixtures/ 中的文件不会在测试中更改或动态:

const requestBody = require("../fixtures/requestBody.json");

describe('Test', () => {
  it('should do something', () => {
    cy.request({
      method: 'GET',
      url: myUrl,
      body: requestBody
    })....

support 的一个用例可能是在 cypress/support/commands.js 中定义自定义命令。

假设您需要发送一个 header,其中包含一些您不想公开的数据,例如授权密钥。您还需要对 GET 方法进行硬编码,但您希望 urlbody 保持动态。可以在 cypress/support/commands.js:

中定义自定义命令
Cypress.Commands.add('getRequestWithSecret', (url, body) => {
    cy.request({
        method: 'GET',
        headers: {
            Authorization: mySecretKey
        },
        url: url,
        body: body
    });
});

然后这个自定义命令就可以在代码中使用了。您可以在下面的示例中看到混合了静态和动态内容。正在导入的夹具,以及自定义命令。 getRequestWithSecret 是动态的,因为它正在接受输入。 cypress/support/index.jscommands.js 在测试规范开始之前加载。这非常有用,因为这意味着您可以在测试开始前添加可以 运行 的脚本。因此,这些不需要在 运行 时导入到您的测试中。

const requestBody = require("../fixtures/requestBody");

describe('Test', () => {
  it('should do something', () => {
    cy.getRequestWithSecret({
      url: myUrl,
      body: requestBody
    })....

Fixture 是测试所需的静态数据 - 通常我们将图像、JSON 文件和一些可下载的固定装置放在那里。

在支持文件中,我们 add/customize 命令,并导入 Plugins 和测试所需的其他依赖项。它还可以用于进行一些初始设置,例如 before/beforeAll 函数,但这部分最好在配置文件中或直接在测试中进行。