Каратэ: использование подхода с использованием встроенных шаблонов на основе данных для тестирования API - PullRequest
1 голос
/ 18 июня 2020

Я хочу писать тесты, управляемые данными, передающие динамические c значения, считываемые из внешнего файла (csv). Возможность передавать динамические c значения из CSV для простых строк (номер счета и идентификатор партнера ниже). Но, используя встроенные выражения, как я могу передать значения Dynami c из файла csv для массива «DealerReportFormats» json ниже?

Любая помощь приветствуется !!

Scenario Outline: Dealer dynamic requests
    Given path '/dealer-reports/retrieval'
    And request read('../DealerTemplate.json')   
  When method POST
    Then status 200
    Examples: 
      | read('../DealerData.csv') | 


DealerTemplate.json is below
{    
  "DealerId": "FIXED",
  "DealerName": "FIXED",
  "DealerType": "FIXED",

  "DealerCredentials": {
    "accountNumber": "#(DealerCredentials_AccountNumber)",
    "affiliateId": "#(DealerCredentials_AffiliateId)"
  },
"DealerReportFormats": [
    {
      "name": "SalesReport",
      "format": "xml"
    },
    {
      "name": "CustomerReport",
      "format": "txt"
    }
  ]
}

DealerData.csv: 

DealerCredentials_AccountNumber,DealerCredentials_AffiliateId
testaccount1,123
testaccount2,12345
testaccount3,123456

1 Ответ

1 голос
/ 18 июня 2020

CSV предназначен только для "плоских" структур, поэтому попытка смешать это с JSON, по моему честному мнению, слишком амбициозна. При необходимости поищите другой фреймворк :)

При этом я вижу 2 варианта:

a) используйте правильные кавычки и экранирование в CSV

b) обратитесь к JSON files

Вот пример:

Scenario Outline:
* json foo = foo
* print foo

Examples:
| read('test.csv') |

И test.csv это:

foo,bar
"{ a: 'a1', b: 'b1' }",test1
"{ a: 'a2', b: 'b2' }",test2

Я оставляю это вам в качестве упражнения, если вы хотите сбежать двойные кавычки. Это возможно.

Вариант (b) - вы можете обратиться к автономным JSON файлам и прочитать их:

foo,bar
j1.json,test1
j2.json,test2

И вы можете сделать * def foo = read(foo) в своей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...