赛普拉斯:从 JSON 主体中提取值到变量
Cypress: extract value from JSON body to a variable
我正在使用 cypress.io 来测试 API(使用 Node.js 创建)。我想从 API 的 JSON 响应中提取值并将其保存到变量中。
我已经尝试过以下链接中提到的解决方案,但没有奏效:
下面是我用来测试 API 的代码:
/// <reference types="cypress" />
describe("Testing Provider Catalog API", () => {
it("Provider Catalog API GET Request", () => {
cy.request('GET', 'v1/providers')
.then((response) => {
expect(response).to.have.property('status', 200)
expect(response.body).to.not.be.null
// expect(response.body.providers).to.have.length(1)
})
cy.screenshot()
})
it("Provider Catalog API POST Request", () => {
const provider = {
"type": "loadboard",
"name": "123loadboard"
};
cy.request('POST', 'v1/providers', provider)
cy.screenshot()
})
it("Provider Catalog API PUT Request", () => {
const provider = {
"type": "loadboard",
"name": "123loadboard"
};
cy.request('PUT', 'v1/providers/61a54a66a2b734859481931c', provider)
cy.screenshot()
})
it("Provider Catalog API DELETE Request", () => {
cy.request('DELETE', 'v1/providers/61a68e7ca6011e605029191b')
cy.screenshot()
})
})
下面是我正在使用的代码
var providerId
cy.wait('@newObject').then((response) => {
expect(response.status).to.eq(201)
expect(response.responseBody).to.have.property('_id')
const body = (response.responseBody)
providerId = body['_id']
})
cy.get(someInput).type(newId)
API 的示例输出:
{
"_id":"61a54ba1a2b7348594819323",
"type":"loadboard",
"name":"123loadboard",
"__v":0
}
我想将 _id 的值存储在一个变量中供以后使用。在过去的几天里,我一直在努力,但似乎没有任何效果。谁能帮帮我吗。提前致谢。
在 cypress 中使用变量的推荐方法是使用别名。请参阅文档 here.
在您的代码中,您可以 wrap()
您的 _id
并将其保存为别名,然后在您的代码中的其他地方调用您的别名:
cy.wait('@newObject').then((response) => {
expect(response.status).to.eq(201)
expect(response.responseBody).to.have.property('_id')
cy.wrap(response.responseBody._id).as('newId')
})
// then later in your code use:
cy.get('@newId').then((newId) => {
cy.get(someInput).type(newId)
})
你也可以 type()
你的 _id
在你的 wait()
:
cy.wait('@newObject').then((response) => {
expect(response.status).to.eq(201)
expect(response.responseBody).to.have.property('_id')
cy.get(someInput).type(response.responseBody._id)
})
或者您可以使用 cypress 全局环境对象 Cypress.env()
。请参阅文档 here.
cy.wait('@newObject').then((response) => {
expect(response.status).to.eq(201)
expect(response.responseBody).to.have.property('_id')
Cypress.env('newId', response.responseBody._id)
})
// then later in your code use:
cy.get(someInput).type(Cypress.env('newId'))
我正在使用 cypress.io 来测试 API(使用 Node.js 创建)。我想从 API 的 JSON 响应中提取值并将其保存到变量中。
我已经尝试过以下链接中提到的解决方案,但没有奏效:
下面是我用来测试 API 的代码:
/// <reference types="cypress" />
describe("Testing Provider Catalog API", () => {
it("Provider Catalog API GET Request", () => {
cy.request('GET', 'v1/providers')
.then((response) => {
expect(response).to.have.property('status', 200)
expect(response.body).to.not.be.null
// expect(response.body.providers).to.have.length(1)
})
cy.screenshot()
})
it("Provider Catalog API POST Request", () => {
const provider = {
"type": "loadboard",
"name": "123loadboard"
};
cy.request('POST', 'v1/providers', provider)
cy.screenshot()
})
it("Provider Catalog API PUT Request", () => {
const provider = {
"type": "loadboard",
"name": "123loadboard"
};
cy.request('PUT', 'v1/providers/61a54a66a2b734859481931c', provider)
cy.screenshot()
})
it("Provider Catalog API DELETE Request", () => {
cy.request('DELETE', 'v1/providers/61a68e7ca6011e605029191b')
cy.screenshot()
})
})
下面是我正在使用的代码
var providerId
cy.wait('@newObject').then((response) => {
expect(response.status).to.eq(201)
expect(response.responseBody).to.have.property('_id')
const body = (response.responseBody)
providerId = body['_id']
})
cy.get(someInput).type(newId)
API 的示例输出:
{
"_id":"61a54ba1a2b7348594819323",
"type":"loadboard",
"name":"123loadboard",
"__v":0
}
我想将 _id 的值存储在一个变量中供以后使用。在过去的几天里,我一直在努力,但似乎没有任何效果。谁能帮帮我吗。提前致谢。
在 cypress 中使用变量的推荐方法是使用别名。请参阅文档 here.
在您的代码中,您可以 wrap()
您的 _id
并将其保存为别名,然后在您的代码中的其他地方调用您的别名:
cy.wait('@newObject').then((response) => {
expect(response.status).to.eq(201)
expect(response.responseBody).to.have.property('_id')
cy.wrap(response.responseBody._id).as('newId')
})
// then later in your code use:
cy.get('@newId').then((newId) => {
cy.get(someInput).type(newId)
})
你也可以 type()
你的 _id
在你的 wait()
:
cy.wait('@newObject').then((response) => {
expect(response.status).to.eq(201)
expect(response.responseBody).to.have.property('_id')
cy.get(someInput).type(response.responseBody._id)
})
或者您可以使用 cypress 全局环境对象 Cypress.env()
。请参阅文档 here.
cy.wait('@newObject').then((response) => {
expect(response.status).to.eq(201)
expect(response.responseBody).to.have.property('_id')
Cypress.env('newId', response.responseBody._id)
})
// then later in your code use:
cy.get(someInput).type(Cypress.env('newId'))