tavern icon indicating copy to clipboard operation
tavern copied to clipboard

How to understand and solve the error: "List item(s) not present in response"

Open rpoletaev opened this issue 5 years ago • 1 comments

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"
                }
            ]
        }
    ]
}

rpoletaev avatar Feb 07 '21 21:02 rpoletaev

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>

michaelboulton avatar Jun 20 '21 13:06 michaelboulton