Jwt 使用Cypress将承载令牌从API请求传输到其他测试

Jwt 使用Cypress将承载令牌从API请求传输到其他测试,jwt,authorization,cypress,bearer-token,Jwt,Authorization,Cypress,Bearer Token,我正在web应用程序上运行测试,以测试WYSIWYG功能和XSS漏洞。在此之前,我使用以下命令 beforeEACH(() => { cy.vaderAuth() }); Cypress.Commands.add('vaderAuth', () => { let config = Cypress.config(); cy.request({ method: 'POST', url: Cypress.config('tokenUrl')

我正在web应用程序上运行测试,以测试WYSIWYG功能和XSS漏洞。在此之前,我使用以下命令

beforeEACH(() => {
       cy.vaderAuth()
    });

Cypress.Commands.add('vaderAuth', () => {
  let config = Cypress.config();

  cy.request({
    method: 'POST',
    url: Cypress.config('tokenUrl') + '/api/v1?actions=api/v1/login',
    body: {
      username: config.horizon.username,
      password: config.horizon.password,
    }
  }).then(response => {
    window.localStorage.setItem('JWT', response.body['api/v1/login'].token)
  })
})
上面的命令成功地获取了承载令牌,但是接下来的测试抛出了一个401未经授权的错误

it('Sending a regular API request to Welcome Messages', function() { 
        cy.request({
            method : 'POST',
            url : '/api/v1/organisations/welcome-message?actions=api/v1/organisations/welcome-message/set-welcome-messages',
            body : {"welcome_messages":[{"message":"<p>Test investor welcome message!</p>","type":"User"},{"message":"<p>Internal User welcome message Cypress Test. </p>","type":"Internal User"},{"message":"<p>Test entrepreneur welcome message!</p>","type":"Entrepreneur"}]},
            headers : {"Authorization": "Bearer " + window.localStorage.JWT}
    })
})
it('向欢迎消息发送常规API请求',函数(){
赛义德请求({
方法:“POST”,
url:“/api/v1/Organizations/welcome message?actions=api/v1/Organizations/welcome message/set welcome messages”,
正文:{“欢迎消息”:[{“消息”:“测试投资者欢迎消息!

”,“类型”:“用户”},{“消息”:“内部用户欢迎消息Cypress Test.

”,“类型”:“内部用户”},{“消息”:“测试企业家欢迎消息!

”,“类型”:“企业家”}, 标题:{“授权”:“承载者”+window.localStorage.JWT} }) })

我已经检查了失败,它正在将承载令牌作为头发送,如果我手动输入承载令牌,则请求头与相同请求发送的头匹配,如下所示

  it('Sending a regular API request to Welcome Messages', function() { 
        cy.request({
            method : 'POST',
            url : '/api/v1/organisations/welcome-message?actions=api/v1/organisations/welcome-message/set-welcome-messages',
            body : {"welcome_messages":[{"message":"<p>Test investor welcome message!</p>","type":"User"},{"message":"<p>Internal User welcome message Cypress Test. </p>","type":"Internal User"},{"message":"<p>Test entrepreneur welcome message!</p>","type":"Entrepreneur"}]},
            //headers : {"Authorization": "Bearer (insertbearertokenhere)}
            
    })
})
it('向欢迎消息发送常规API请求',函数(){
赛义德请求({
方法:“POST”,
url:“/api/v1/Organizations/welcome message?actions=api/v1/Organizations/welcome message/set welcome messages”,
正文:{“欢迎消息”:[{“消息”:“测试投资者欢迎消息!

”,“类型”:“用户”},{“消息”:“内部用户欢迎消息Cypress Test.

”,“类型”:“内部用户”},{“消息”:“测试企业家欢迎消息!

”,“类型”:“企业家”}, //标题:{“授权”:“承载(InsertBealerTokenher)} }) })
当手动输入承载令牌时,以下测试都顺利运行,没有错误,但是如果每次运行这些测试时我都必须进入并更改承载令牌,这有点违背了自动化的意义,因为当我登录到我的web应用程序并获得令牌时,我还可以手动测试应用程序


非常感谢您在这方面提供的任何帮助,因为我已经在这方面工作了大约一周,但运气不佳。

我对您为请求设置auth头的方式不是很有信心,因此可能会发生未读取的情况。您是否可以尝试发送
auth:{bearer:localStorage.getItem('JWT')}
并查看结果?另外,我建议将您的令牌存储到
会话存储中,这样数据只会持续到窗口或选项卡关闭为止。通常我建议不要在beforeach()中发出该请求,而是在beforeach()中发出该请求。为了让Cookie在您可以使用的测试中保持稳定。@AlexIzbas谢谢您的回复,我使用了您的方法,这解决了我的问题,非常感谢您的帮助。我还采纳了您的建议,将Cookie存储到
会话存储
而不是
本地存储
@DarkMikey谢谢您的回复,我对Cypress来说还是个新手,所以谢谢您非常感谢你的建议,我将相应地改变我的测试。