【问题标题】:How Can We Get Token And Show It In Response我们如何获取令牌并在响应中显示它
【发布时间】:2021-01-21 16:20:06
【问题描述】:

我有一个请求,我想从响应中获取令牌并将其保存在变量中,因为我想在另一个请求中使用它作为不记名令牌

/// <reference types="cypress" />
describe("Testing API Endpoints Using Cypress", () => {
    it("Login", () => {
        cy.request({
            method: "POST",
            url: "/creditonal",
            body: {
                "credentials": {
                    "username": "admin",
                    "password": "admin"
                }
            }.then((response) => {
                // Get token
            })
        })
    })
})

这是我的回应

{
    "status": "ok",
    "statusCode": "0000",
    "message": {
        "type": "",
        "text": ""
    },
    "errors": [],
    "data": {
        "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjVmYTk0YzYzNWRhOWU0NTY0NGYwM2ViMiIsImlzQ2xpZW50IjpmYWxzZSwiaWF0IjoxNjExMjQzNjYyLCJleHBBdCI6MTYxMTI0NzI2MiwiaXNzdWVyIjoiRHJvcHAgVGVjaG5vbG9naWVzIiwicm9sZXMiOlsiRVJ5eGc2Il19.V7cniqE9DrxPRn5GX9wQJtVwPnLrv5Hb3A1SxmBXOO4",
        "accessTokenExpiresAt": 3599,
        "refreshToken": "983e503a2b194a0190af4cdf0f4d471cf387e4d784044f6ca1fe3f942aad1b5f",
        "refreshTokenExpiresAt": 15548399
    }
}

【问题讨论】:

  • 你能发布你得到的响应 JSON。
  • 我把它添加到问题中

标签: cypress web-api-testing


【解决方案1】:

您可以使用来自请求 1 的令牌并将其传递给请求 2,如下所示。我目前已将令牌用作bearer authorization header

cy.request({
    method: "POST",
    url: "/creditonal",
    body: {
        "credentials": {
            "username": "admin",
            "password": "admin"
        }
    }
}).then((response) => {
    const token = response.data.accessToken
    return token
}).then((token) => {
    //Use the value of token anywhere in the second request anywhere
    cy.request({
        method: 'GET',
        url: 'https//example.com',
        'auth': {
            'bearer': token
        }
    }).then((response) => {
        expect(response.status).to.eq(200)
    })
})

【讨论】:

    【解决方案2】:

    我建议选择alias,它更易于使用。您只需在真正需要时检索响应:

    it("Login", () => {
      cy.request({
        method: "POST",
        url: "/creditonal",
        body: {
          "credentials": {
            "username": "admin",
            "password": "admin"
          }
        }
      }).as('login')
    
       // do more things
    
      cy.get('@login').then(response => {
        // whatever you want with response later on
      })
    })
    

    【讨论】:

      猜你喜欢
      • 2020-01-24
      • 2012-01-26
      • 2015-08-05
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2021-12-24
      • 1970-01-01
      相关资源
      最近更新 更多