Karate: Write to a text file

旧街凉风 提交于 2020-01-25 03:51:07

问题


I have the following feature file that reads the input and appends the input id with the response and writes to a text file in the below format:

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

so that I can make the input table with it and dont need copy each response in text format and paste to make Examples:

I have tried the below:

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 |

But the issue is only the last read data is being written to the file. I had tried the below as well but gives the same result as above: * 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:


You can use CSV files (have to be comma delimited): https://github.com/intuit/karate#csv-files

Also see this example:

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') |


来源:https://stackoverflow.com/questions/58350236/karate-write-to-a-text-file

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!