Каратэ: запись в текстовый файл - PullRequest
1 голос
/ 12 октября 2019

У меня есть следующий файл объектов, который читает входные данные и добавляет входной идентификатор вместе с ответом и записывает в текстовый файл в следующем формате:

 |123|{"products": [ { "pid": "1a"} ] }|
 |124|{"products": [ { "pid": "1b"} ] }|
 |125|{"products": [ { "pid": "1c"} ] }|

, чтобы я мог сделать входную таблицу сЭто и не нужно копировать каждый ответ в текстовом формате и вставить, чтобы сделать Примеры:

Я попробовал следующее:

Feature: sample karate test script
Background:
        * url BaseUrl
        * configure headers = read('classpath:headers.js')
        * def jsonFromCsv =  read('data.csv')
        * def size = karate.sizeOf(jsonFromCsv)
        * print size
Scenario Outline: Get All Tests
* def doStorage =
"""
function(args) {
  var DataStorage = Java.type('DataStorage.DataStorage'); // Java class that writes to a text file
  var dS = new DataStorage();
  return dS.write(args);
}"""

    Given path '/v1/path'
    When method get
    Then status 200
    * def json = __row.expected
    * def id = __row.id
    * def app = '|'+<id>+'|'+json+'|'
    * print app # prinst it in the expected format
    * def result = call doStorage app   


Examples:
     | jsonFromCsv |

Но проблема только в том, что последние данные чтения записываются вфайл. Я также попробовал следующее, но выдает тот же результат, что и выше: * def js = function (app){karate.write(app,'input.txt')}

DataStorage.java:

package DataStorage;

    import java.io.*;

    public class DataStorage {
        public void write( String text) throws IOException {
           BufferedWriter output = null;
            try {
                File file = new File("input");
                output = new BufferedWriter(new FileWriter(file));
                output.append(text);
                output.close();
            } catch ( IOException e ) {
                e.printStackTrace();
            } finally {
              if ( output != null ) {
                output.close();
              }
            }
        }
    }  

1 Ответ

1 голос
/ 15 октября 2019

Вы можете использовать файлы CSV (должны быть разделены запятыми): https://github.com/intuit/karate#csv-files

См. Также пример :

Scenario Outline: cat name: <name>
    Given url demoBaseUrl
    And path 'cats'
    And request { name: '<name>', age: <age> }
    When method post
    Then status 200
    And match response == { id: '#number', name: '<name>' }

    # the single cell can be any valid karate expression
    # and even reference a variable defined in the Background
    Examples:
    | read('kittens.csv') |
...