gpt4 book ai didi

javascript - 使用 FE 的代币以更好的方式组织测试

转载 作者:行者123 更新时间:2023-12-02 22:11:39 26 4
gpt4 key购买 nike

我目前正在使用 Cypress 测试几个微服务。为了测试 REST api,我需要一个 token 来发出请求。该 token 只能通过本地 FE 获得 - 下面给出的图像

Token Image

我必须访问此 FE 才能仅获取 token - 没有其他方法可以访问此访问 token 。

现在我正在这样做

describe('Do some test',()=>{
it('first test',()=>{
//this fetches the value of the token from FE.

cy.get('css locator of the access token').invoke('val').then((token)=>{
let tok = token;
cy.request({
method: 'GET' //or POST
url: "http://localhost:3001/v1/api1.json",
headers:{
"Authorization": "Bearer "+token;
"Content-Type":"application/json"
}
}).as('firsttest').then(()=>{
cy.get('@firsttest').its('status').should('eql',200);
})
})
})
})

现在这有效了,我得到了正确的状态等,但我知道这不是组织测试的好方法,而且它还会导致大量重复,因为如果我是这样,我必须一次又一次地获取 token 移出it block 。

我如何组织它,以便我可以一次获取token值,然后在我的测试中使用它..像这样的事情

describe('Do first test',()=>{
beforeEach(()=>{
cy.get('get locator of the token').invoke('val').then((token)=>{
let tok = token;
})
})

it('fetch and use token',()=>{
cy.request({
method: 'GET' //or POST
url : 'http://someurl/path',
headers :{
"Authorization": "Bearer "+token; (from beforeEach block)
}
})
})

it('do another test using same token',()=>{
//do something
})

})

或者进一步简单地以这样的方式来最小化获取 token 的口是心非。

最佳答案

您可以在 support/command.js 中创建自定义方法。例如,这里创建了一个名为“Newlogin”的自定义方法

Cypress.Commands.add('Newlogin', (email, password,env) => {
Cypress.log({
name: 'loginViaAuth0',
});
const options = {
method: 'POST',
url: env+'/oauth/token', // Token Url
failOnStatusCode: false,
form:true,
"body":'grant_type=password&userName='+email+'&Password='+password+'
};
cy.request(options)
});

现在您可以在任何与 cy 链接的地方访问此方法。例如

cy.Newlogin(username, password, env) /*Custom method defined in supports/command.js */
.its('body')
.then((resp) => {
resp = JSON.stringify(resp)
cy.log(resp)
const token = JSON.parse(resp).access_token
});

关于javascript - 使用 FE 的代币以更好的方式组织测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59542460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com