How to understand and solve the error: "List item(s) not present in response"
There is below the output of my test. How can I understand which item(s) doesn't present in a response: the strict options provided for the whole file:
strict:
- headers:off
- json:off
Format variables: tavern.env_vars.PA_HOST = 'localhost:8080'
Source test stage (line 681):
- name: Average payment by country
request:
url: '{tavern.env_vars.PA_HOST}/v2/data/avg_payment'
method: POST
headers:
X-Auth-Key: faketoken
content-type: application/json
json:
filter: []
grouping:
- user_country_name
ordering:
- direction: desc
field: sum_revenue_usd
aggregation:
- aggr: avg
field: avgpayment_usd
- aggr: sum
field: revenue_usd
others:
count: 6
time_interval:
from: 1606813200
to: 1609405200
response:
status_code: 200
headers:
content-type: application/json
json:
data:
- data:
- avg_avgpayment_usd: 34.9
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 56608.99
sum_revenue_usd_symbol: $
user_country_name: USA
- avg_avgpayment_usd: 34.75
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 9183.92
sum_revenue_usd_symbol: $
user_country_name: United Kingdom
- avg_avgpayment_usd: 40.36
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 8213.64
sum_revenue_usd_symbol: $
user_country_name: Germany
- avg_avgpayment_usd: 34.11
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 7967.49
sum_revenue_usd_symbol: $
user_country_name: Canada
- avg_avgpayment_usd: 42.52
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 4023.08
sum_revenue_usd_symbol: $
user_country_name: France
- avg_avgpayment_usd: 26.75
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 3351.44
sum_revenue_usd_symbol: $
user_country_name: South Korea
- avg_avgpayment_usd: 34.4
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 29498.04
sum_revenue_usd_symbol: $
user_country_name: Others
name: avg_payment
error: {}
Formatted stage:
name: Average payment by country
request:
headers:
X-Auth-Key: faketoken
content-type: application/json
json:
aggregation:
- aggr: avg
field: avgpayment_usd
- aggr: sum
field: revenue_usd
filter: []
grouping:
- user_country_name
ordering:
- direction: desc
field: sum_revenue_usd
others:
count: 6
time_interval:
from: 1606813200
to: 1609405200
method: POST
url: 'localhost:8080/v2/data/avg_payment'
response:
headers:
content-type: application/json
json:
data:
- data:
- avg_avgpayment_usd: 34.9
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 56608.99
sum_revenue_usd_symbol: $
user_country_name: USA
- avg_avgpayment_usd: 34.75
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 9183.92
sum_revenue_usd_symbol: $
user_country_name: United Kingdom
- avg_avgpayment_usd: 40.36
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 8213.64
sum_revenue_usd_symbol: $
user_country_name: Germany
- avg_avgpayment_usd: 34.11
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 7967.49
sum_revenue_usd_symbol: $
user_country_name: Canada
- avg_avgpayment_usd: 42.52
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 4023.08
sum_revenue_usd_symbol: $
user_country_name: France
- avg_avgpayment_usd: 26.75
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 3351.44
sum_revenue_usd_symbol: $
user_country_name: South Korea
- avg_avgpayment_usd: 34.4
avg_avgpayment_usd_symbol: $
sum_revenue_usd: 29498.04
sum_revenue_usd_symbol: $
user_country_name: Others
name: avg_payment
error: {}
status_code: 200
Errors:
E tavern.util.exceptions.TestFailError: Test 'Average payment by country' failed:
- List item(s) not present in response: [{'data': [{'avg_avgpayment_usd': 34.9, 'avg_avgpayment_usd_symbol': '$', 'sum_revenue_usd': 56608.99, 'sum_revenue_usd_symbol': '$', 'user_country_name': 'USA'}, {'avg_avgpayment_usd': 34.75, 'avg_avgpayment_usd_symbol': '$', 'sum_revenue_usd': 9183.92, 'sum_revenue_usd_symbol': '$', 'user_country_name': 'United Kingdom'}, {'avg_avgpayment_usd': 40.36, 'avg_avgpayment_usd_symbol': '$', 'sum_revenue_usd': 8213.64, 'sum_revenue_usd_symbol': '$', 'user_country_name': 'Germany'}, {'avg_avgpayment_usd': 34.11, 'avg_avgpayment_usd_symbol': '$', 'sum_revenue_usd': 7967.49, 'sum_revenue_usd_symbol': '$', 'user_country_name': 'Canada'}, {'avg_avgpayment_usd': 42.52, 'avg_avgpayment_usd_symbol': '$', 'sum_revenue_usd': 4023.08, 'sum_revenue_usd_symbol': '$', 'user_country_name': 'France'}, {'avg_avgpayment_usd': 26.75, 'avg_avgpayment_usd_symbol': '$', 'sum_revenue_usd': 3351.44, 'sum_revenue_usd_symbol': '$', 'user_country_name': 'South Korea'}, {'avg_avgpayment_usd': 34.4, 'avg_avgpayment_usd_symbol': '$', 'sum_revenue_usd': 29498.04, 'sum_revenue_usd_symbol': '$', 'user_country_name': 'Others'}], 'name': 'avg_payment'}]
Formated json I got from server:
{
"error": {},
"data": [
{
"name": "avg_payment",
"data": [
{
"avg_avgpayment_usd": 34.9,
"avg_avgpayment_usd_symbol": "$",
"sum_revenue_usd": 56608.99,
"sum_revenue_usd_symbol": "$",
"user_country_name": "USA"
},
{
"avg_avgpayment_usd": 34.75,
"avg_avgpayment_usd_symbol": "$",
"sum_revenue_usd": 9183.92,
"sum_revenue_usd_symbol": "$",
"user_country_name": "United Kingdom"
},
{
"avg_avgpayment_usd": 40.36,
"avg_avgpayment_usd_symbol": "$",
"sum_revenue_usd": 8213.64,
"sum_revenue_usd_symbol": "$",
"user_country_name": "Germany"
},
{
"avg_avgpayment_usd": 34.11,
"avg_avgpayment_usd_symbol": "$",
"sum_revenue_usd": 7967.49,
"sum_revenue_usd_symbol": "$",
"user_country_name": "Canada"
},
{
"avg_avgpayment_usd": 42.52,
"avg_avgpayment_usd_symbol": "$",
"sum_revenue_usd": 4023.08,
"sum_revenue_usd_symbol": "$",
"user_country_name": "France"
},
{
"avg_avgpayment_usd": 26.75,
"avg_avgpayment_usd_symbol": "$",
"sum_revenue_usd": 3351.44,
"sum_revenue_usd_symbol": "$",
"user_country_name": "South Korea"
},
{
"avg_avgpayment_usd": 34.4,
"avg_avgpayment_usd_symbol": "$",
"sum_revenue_usd": 29498.04,
"sum_revenue_usd_symbol": "$",
"user_country_name": "Others"
}
]
}
]
}
Sorry for the delay but I thought I commented on this one before, apparently not.
Each item in the list (in this case just one item, {'data': [{'avg_avgpayment_usd': 34.9, ...) is an element that should be found in the response, but normally you will have to look in the rest of the test logs to see why it said that. If you turn logging to the 'debug' level then it will normally log something like <x> was not present in response, or <x> did not match next response value <y>