如何在 cypress api 自动化测试中获取、存储和重用 firebase 令牌

How to get, store and reuse firebase token in cypress api automated testing

在正文“电子邮件”和“密码”中发送后 https://identitytoolkit.googleapis.com/ returns 响应中的一些对象。 其中之一是“idToken”:带有令牌的值。

我需要什么?

我需要获取此令牌,将其存储在变量中并在进一步的测试中重复使用。

到目前为止我准备了这样的东西:

        it("Get a fresh admin firebase token", () => {
            cy.request({
                method: "POST",
                url: "https://identitytoolkit.googleapis.com/...",
                body: {
                    "email": "myUsername",
                    "password": "myPassword",
                    "returnSecureToken": true
                },
                headers: {
                    accept: "application/json"
                }
            }).then((responseToLog) => {
                cy.log(JSON.stringify(responseToLog.body))
            }).then(($response) => {
                expect($response.status).to.eq(200);
        })
    })
})```

Above code works, but cy.log() returns the whole body response. How can I separate only idToken and reuse it in my next API scenarios?

考虑到 idToken 在响应主体中,所以在 then() 中你可以直接包装值并使用别名保存它,然后在以后使用它。

it('Get a fresh admin firebase token', () => {
  cy.request({
    method: 'POST',
    url: 'https://identitytoolkit.googleapis.com/...',
    body: {
      email: 'myUsername',
      password: 'myPassword',
      returnSecureToken: true,
    },
    headers: {
      accept: 'application/json',
    },
  }).then((response) => {
    cy.wrap(response.body.idToken).as('token')
  })
})

cy.get('@token').then((token) => {
  cy.log(token) //logs token or Do anything with token here
})

如果您想在不同的 it 区块中使用令牌,您可以:

describe('Test Suite', () => {
  var token
  it('Get a fresh admin firebase token', () => {
    cy.request({
      method: 'POST',
      url: 'https://identitytoolkit.googleapis.com/...',
      body: {
        email: 'myUsername',
        password: 'myPassword',
        returnSecureToken: true,
      },
      headers: {
        accept: 'application/json',
      },
    }).then((response) => {
      token = response.body.idToken
    })
  })

  it('Use the token here', () => {
    cy.log(token) //prints token
    //use token here
  })
})