我需要通過使用Cypress來測驗我在下面的JSON中的屬性。我想我有一個問題,就是如何到達每個屬性并驗證它們。
describe('POST method', ( ) => {
it('get a list of faceted aggregations', () =>/span> {
cy.request({
method: 'POST'。
url:"host endpoints"。
headers:{
"Authorization":"XXXXXX"。
"內容型別"。"application/json"。
},
body: {
"搜索": {
"拍賣型別": [
"basic_auction""statuses": [
"正在進行中"。
],
"site": [
"autobid.de"/span>.
],
"urls": [
"yyyy"/span>
],
"ahIds": [
53825-62-2014918。
],
"biddingPlatforms": [
"aaaaaa"/span>
],
"winningPlatforms": [
"aaaa"/span>
],
"losingPlatforms": [
"aaaaa"/span>
],
"hasBids": true,
"hasVat": true,
"query": "string",
"range": [
{
" auctionEndDatetime": {
"min": "string",
"max": "string", "max".
}
},
{
" auctionEndDatetime": {
"min": "string",
"max": "string", "max".
}
},
{
" auctionStartDatetime": {
"min": "string",
"max": "string", "max".
}
},
{
"createdDatetime": {
"min": "string",
"max": "string", "max".
}
},
{
"upedDatetime": {
"min": "string",
"max": "string", "max".
}
},
{
"price": {
"min": "string",
"max": "string", "max".
}
}
],
"existence": [
"string"/span>
],
"過濾器"/span>: {
"車輛": [
{
"品牌": "string",
"modelIds": 0,
"model": "string".
}
}
}
我的回應體:
{"data": {
"count": 252655,
"聚合": {
" filters.bodyTypes": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [/span>
{>
"key": "Station wagon",
"doc_count": 45778
},
{
"key": "SUV",
"doc_count": 30188
},
{
"key": "Hatchback",
"doc_count": 25059
},
{
"key": "Saloon",
"doc_count": 13636
},
{>
"key": "Van",
"doc_count": 11266
},
{
"key": "MPV",
"doc_count": 10158
},
{
"key": "Estate",
"doc_count": 9700
},
{
"key": "Estate, Number of doors 5",
"doc_count": 6800
},
{
"key": "Berline avec hayon",
"doc_count": 6276
},
{
"key": "Saloon, Number of doors 5",
"doc_count": 5238
},
{}
"key": "berline hayon - VP",
"doc_count": 3298
},
{
"key": "All-terrain vehicle, Number of doors 5, All-wheel drive",
"doc_count": 2783
},
{
"key": "Stationwagon",
"doc_count": 2727
},
{
"key": "Saloon, Number of doors 4",
"doc_count": 2466
},
{
"key": "",
"doc_count": 2270
},
{
"key": "Van / minibus, Number of doors 5",
"doc_count": 2058
},
{
"key": "Other",
"doc_count": 1989
},
{}
"key": "Berlina",
"doc_count": 1901年
},
{
"key": "H",
"doc_count": 1867
},
{
"key": "Crossover",
"doc_count": 1860
},
{
"key": "Panel van",
"doc_count": 1833
},
{
"key": "HA -BERLINA CON PORTON",
"doc_count": 1796
},
{}
"key": "SUV VP - VP",
"doc_count": 1771
},
{}
"key": "Estate, Number of doors 5, All-wheel drive",
"doc_count": 1760
},
{
"key": "Higher Mid-Range Cars",
"doc_count": 1748
},
{
"key": "Station Wagon",
"doc_count": 1673
},
{
"key": "Monovolume",
"doc_count": 1603
},
{
"key": "Saloon, Number of doors 3",
"doc_count": 1547
},
{
"key": "W",
"doc_count": 1513
},
{
"key": "Mid-range Cars", "Mid-range Cars"
"doc_count": 1492
},
{
"key": "All-terrain vehicle, Number of doors 5",
"doc_count": 1453
},
{
"key": "Wagon",
"doc_count": 1210
},
{
"key": "break - VP",
"doc_count": 1201
},
{
"key": "ES -FAMILIAR",
"doc_count": 1158
},
{
"key": "SW",
"doc_count": 1064
},
{
"key": "Berline 5 portes",
"doc_count": 1017
},
{
"key": "Personal car",
"doc_count": 994
},
{
"key": "Sedan",
"doc_count": 994
},
{
"key": "SUV Medium",
"doc_count": 949
},
{
"key": "SUV4x2",
"doc_count": 946
},
{
"key": "berline VU - VS",
"doc_count": 938
},
{
"key": "F",
"doc_count": 896
},
{
"key": "Convertible / Roadster, Number of doors 2",
"doc_count": 894
},
{
"key": "CI",
"doc_count": 867
},
{
"key": "Stationwagen",
"doc_count": 835
},
{
"key": "Monovolume 4x4",
"doc_count": 805
},
{}
"key": "mini MS - VP",
"doc_count": 802
},
{
"key": "Light duty trucks, Number of doors 4",
"doc_count": 738
},
{
"key": "BREAK",
"doc_count": 717
},
{
"key": "Mixed car",
"doc_count": 702
},
{
"key": "VU1",
"doc_count": 677
},
{
"key": "M",
"doc_count": 673
},
{
"key": "Coupe",
"doc_count": 665
},
{
"key": "MONO-M",
"doc_count": 655
},
{
"key": "Saloon, Number of doors 4, All-wheel drive",
"doc_count": 634
},
{
"key": "Mini MPV",
"doc_count": 588
},
{
"key": "crossover - VP",
"doc_count": 584
},
{
"key": "OD -TODERRENO",
"doc_count": 536
},
{
"key": "CV -FURGON DERIVADO DE TURISMO",
"doc_count": 530
},
{
"key": "Compact cars",
"doc_count": 529
},
{
"key": "4x4",
"doc_count": 527
},
{
"key": "fourgonnette - VU",
"doc_count": 524
},
{
"key": "Estate, Number of doors 4",
"doc_count": 911
},
{}
"key": "Break VP",
"doc_count": 504
},
{}
"key": "Coupé",
"doc_count": 503
},
{
"key": "Kombi",
"doc_count": 490
},
{}
"key": "Saloon, Number of doors 5, All-wheel drive",
"doc_count": 481
},
{
"key": "Fourgonnette",
"doc_count": 454
},
{
"key": "Berline VU 5 portes",
"doc_count": 452
},
{
"key": "KOM",
"doc_count": 437
},
{
"key": "S",
"doc_count": 427
},
{
"key": "Sports car / Coupé, Number of doors 2",
"doc_count": 426
},
{
"key": "coupe - VP",
"doc_count": 426
},
{
"key": "SA -SEDAN",
"doc_count": 414
},
{
"key": "MM -MONOVOLUMEN COMPACTO",
"doc_count": 413
},
{
"key": "Light duty truck",
"doc_count": 390
},
{
"key": "Fourgon lourd",
"doc_count": 384
},
{
"key": "SUV 4x4",
"doc_count": 382
},
{}
"key": "Furgon largo",
"doc_count": 356
},
{
"key": "MONO-S",
"doc_count": 352
},
{
"key": "businessclass Cars",
"doc_count": 352
},
{
"key": "berline - VP",
"doc_count": 349
},
{
"key": "Mini monospace",
"doc_count": 332
},
{
"key": "Minivan",
"doc_count": 326
},
{
"key": "fourgon t?le - VU",
"doc_count": 319
},
{
"key": "Van / minibus, Number of doors 4",
"doc_count": 315
},
{}
"key": "Fourgon leger", "Fourgon leger"
"doc_count": 307
},
{
"key": "Kasten",
"doc_count": 284
},
{}
"key": "Convertible",
"doc_count": 266
},
{}
"key": "MPV(多功能車)", "MPV(多功能車)",
"doc_count": 252
}
]
z
}
}
}
我根據Mihi的評論做了一個修改。
describe('POST method', ( ) => {
it('get a list of faceted aggregations', () =>/span> {
cy.request({
method: 'POST'/span>,
url:"host endpoint"。
headers:{
"授權":"xxxx"。
"content-type": "application/json"。
},
body: {
"搜索": {
"拍賣型別": [
"basic_auction""statuses": [
"正在進行中"。
],
"site": [
"autobid.de"/span>.
],
"urls": [
"https://autobid.de?action=car&show=details&id=2014918&L=1"。
]
}
},
failOnStatusCode: false。
})
.then((res) =>/span> {
return response.body.data。 aggregations['filters.bodyTypes'].buckets。
})
.then(bodyTypeObjects => {
expect(bodyTypeObjects.length).to.eq(90)
const bodyTypeCounts = bodyTypeObjects.reduce((acc, bodyTypeObject) => {
acc[bodyTypeObject.key] = bodyTypeObject.doc_count]
return acc
}, {})
return bodyTypeCounts
})
.then(bodyTypeCounts => {
expect(res.status).to.eq(200)
expect(bodyTypeCounts).to.have.property('Station Wagon')
expect(bodyTypeCounts['Station Wagon']). to. be.gt(1000)
而我運行后的錯誤如下:
request POST 200 https: xxxx
2 then function(){}。
ReferenceError
回應未被定義
cypress/integration/specs/API-Testing/auctionAggregations。 spec.js:41:15。
39 | .then((res) => {
40 !
> 41 | return response.body.data. aggregations['filters.bodyTypes'].buckets。
| ^
42 | })
43 | .then(bodyTypeObjects =>/span> {
44|
uj5u.com熱心網友回復:
對我來說,在測驗之前,最好先對大的json進行轉換。
回應有這樣的嵌套
{
data: {
count: 252655,
aggregations: {
" filters.bodyTypes": {
doc_count_error_upper_bound: 0,
sum_other_doc_count: 0,
buckets: [
{
key: "Station wagon"。
doc_count: 45778,
},
但這使測驗代碼更難弄清楚。
首先,用這個函式拉出聚合的資料
(response) => {
return response.body.data。 aggregations['filters.bodyTypes'].buckets。
}
然后你就可以檢查諸如bodyTypes的數量了
cy.request( {
method: 'POST'。
...
})
.then(response => {
return response.body.data。 aggregations['filters.bodyTypes'].buckets。
})
.then(bodyTypeObjects => {
expect(bodyTypeObjects.length).to.eq(90)
})
要檢查單個專案,你需要解構bodyTypeObjects,例如
const match = Cypress._。 filter(bodyTypeObjects, Cypress._.matches({key: 'Station Wagon'})
expect(match).to.have.length(1)
但是為了使測驗代碼更簡單,從這個形狀做另一個轉換
[{key: 'Station wagon', doc_count: 45778}, {key: 'SUV', doc_count: 30188}, ...]
到這個形狀
{ Station wagon。45778, SUV: 30188, ...
然后測驗就變得簡單多了
完整測驗cy.request( {
method: 'POST'。
...
})
.then(response => {
return response.body.data。 aggregations['filters.bodyTypes'].buckets。
})
.then(bodyTypeObjects => {
expect(bodyTypeObjects.length).to.eq(90)
const bodyTypeCounts = bodyTypeObjects.reduce((acc, bodyTypeObject) => {
acc[bodyTypeObject.key] = bodyTypeObject.doc_count]
return acc
}, {})
return bodyTypeCounts
})
.then(bodyTypeCounts => {
expect(bodyTypeCounts).to.have.property('Station Wagon')
expect(bodyTypeCounts['Station Wagon']). to. be.gt(1000)
//OR。
cy.wrap(bodyTypeCounts)
.should('have.property', 'Station Wagon', 1673)
})
uj5u.com熱心網友回復:
通過夾具進行回應驗證
這一點之前已經展示過,但后來被洗掉了。
為了完整起見,我將其添加到這里
cy.fixture('faceted-aggregations-response. json').then(expectedResponse => {
cy.request({
method: 'POST'/span>,
url:"host endpoints"。
...
}).then(response => {
//使用deep.eq來檢查所有嵌套的子屬性。
expect(response).to.deep.eq(expectedResponse)
})
})
如果每次聚合的順序可以改變,你需要安裝一個額外的包
yarn add deep-equal-in-any-order
測驗
const deepEqualInAnyOrder = require('deep-equal-in-any-order')。
chai.use(deepEqualInAnyOrder)。
cy.fixture('faceted-aggregations-response.json') 。 then(expectedResponse => {
cy.request({
method: 'POST'。
url:"host endpoints"。
...
}).then(response => {
expect(response).to.deep.equalInAnyOrder( expectedResponse)
})
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/320466.html
標籤:
上一篇:如何向PHP服務器發出帖子請求
