cypress中api请求的存储



我如何在cypress中存储api get(脚本类型)的请求,而不必等待套件中的每个测试在该请求后加载其数据?我有时会浪费20秒的等待时间。有存储选项吗?

首先,我试图忽略那些api的长加载时间,与cy.intercept('api.link',{}).as('link'),或类似的方法,但我意识到这不是一个解决方案。我也不认为cy.session()是一个选择。

我希望我已经提供了所有的细节,谢谢你

如果您的测试在相同的规范文件中,您可以通过Cypress.env()将值存储在Cypress环境变量中,或者如果它们在相同的描述块中,您可以简单地在before块中执行请求。

// foo.spec.ts
describe('test', () => {

let response;
before(() => {
cy.request('foo', (req) => {
req.continue((res) => {
// if using Cypress.env()
Cypress.env('response', res);
// if using a scoped variable
response = res;
});
});
});
it('tests', () => {
// something that uses either `Cypress.env('response')` or `response`.
});
})

如果您需要在整个套件之前只运行一次,您可以在plugins/index文件中包含该调用,并使用before:runAPI

// plugins/index.js
...
const axios = require('axios').default // using axios to query endpoint
...
on('before:run', async () => {
await axios.get('foo').then((response) => {
config.env.CYPRESS_MY_VAR = response
})
});
...
// some.spec.ts
describe('test', () => {
it('test', () => {
cy.log(Cypress.env('MY_VAR');
});
});

那么,上面发生了什么?

  1. 我们使用axios来获取数据。您可以使用任何库或方法查询端点,Axios只是我的首选。
  2. .then()回调中,我们将响应并将其分配给Cypress变量。因为Cypress.cy.命令在plugins/index文件中不可用,所以我们使用config.env.来设置环境变量。任何以CYPRESS_为前缀的变量都被解释为自定义环境变量。在本例中,CYPRESS_MY_VAR
  3. 在测试中,我们记录Cypress.env('MY_VAR')的值。注意这个键是MY_VAR而不是CYPRESS_MY_VAR

您可以添加一个简单的缓存并将其封装在自定义命令

柏树/支持/index.js

let cachedResult = null;
Cypress.Commands.add('readAndCacheApi', async (url) => {
if (!cachedResult) {
console.log('fetching')
const result = await fetch(url) 
cachedResult = result
return cachedResult
} else {
console.log('using cache')
return cachedResult
}
})

规范1


it('test1', () => {
cy.readAndCacheApi('https://jsonplaceholder.typicode.com/todos/1')  // logs "fetching"
.then(data => {
})
cy.readAndCacheApi('https://jsonplaceholder.typicode.com/todos/1')  // logs "using cache"
.then(data => {
})
})
it('test2', () => {
cy.readAndCacheApi('https://jsonplaceholder.typicode.com/todos/1')  // logs "using cache"
.then(data => {
})
})

Spec 2,运行Spec 1

it('test3', () => {
cy.readAndCacheApi('https://jsonplaceholder.typicode.com/todos/1')  // logs "using cache"
.then(data => {
})
})

Spec 2,独立运行

it('test3', () => {
cy.readAndCacheApi('https://jsonplaceholder.typicode.com/todos/1')  // logs "fetching"
.then(data => {
})
})

最新更新