Как переместить данные примера огурца во внешний источник - PullRequest
0 голосов
/ 03 июля 2019

Мое требование - загрузить параметры из внешнего ресурса в огурец

Для примера:

Scenario Outline: eating   
    Given there are <start> cucumbers   
    When I eat <eat> cucumbers   
    Then I should have <left> cucumbers

  Examples:
    | start | eat | left |
    |  12   |  5  |  7   |
    |  20   |  5  |  15  |

В приведенном выше примере мне нравится перемещать данные примера в любой внешний источник, например, в Excel или JSON, и я также хочу, чтобы одно и то же поведение использовало один сценарий с несколькими итерациями. В настоящее время, если я перенесу свои данные во внешний источник, мне нужно будет продублировать сценарий n раз и, используя @, прежде чем я прочитаю данные из внешнего источника, что выглядит странно для меня

Перед хуком мы можем прочитать данные из Excel, которые я уже сделал. проблема в том, что данные примера вышли из строя, они становятся сценарием, а не схемой сценария, который запускает сценарий только один раз. Если я добавлю цикл в функцию определения шага, то, если какой-либо один пример данных потерпит неудачу, он провалит весь сценарий, что сделает его ненадежным

Я нашел один аналогичный пост, касающийся того же самого, но он не дает никаких пояснений, а в ответе не содержится структура JSON, документ и т. Д. Относительно того же

Интеграция внешнего источника данных с файлом объектов Cucumber

Есть ли у нас какие-либо условия для того же самого в огурце, или мы можем переопределить любую существующую функциональность, чтобы достичь того же самого

Я хотел бы знать, если кто-то уже сделал это, если да, пожалуйста, поделитесь с нами.

1 Ответ

0 голосов
/ 04 июля 2019

Вот черновик решения , который даст вам представление, вы можете уточнить это. По сути, вы должны вызывать этот метод отдельно, чтобы обновить файл объектов, а таблица примеров обновится данными json.

String jsonPath = "C:\\xxx\\sample.json";
String featurePath = "C:\\xxx\\sample.feature";
String tempFilePath = "C:\\xxx\\sample.temp";
// copy all the steps till example from orinal file to temp

File fin = new File(featurePath);
FileInputStream fis = new FileInputStream(fin);
BufferedReader in = new BufferedReader(new InputStreamReader(fis));

FileWriter fstream = new FileWriter(tempFilePath, true);
BufferedWriter out = new BufferedWriter(fstream);

String aLine = null;
while ((aLine = in.readLine()) != null) {
    //Process each line and add output to Dest.txt file
    out.write(aLine);
    out.newLine();
    if (aLine.contains("Examples:")) {
        break;              
    }
}

// open the json
ObjectMapper objectMapper = new ObjectMapper();
try {
    JsonNode root = objectMapper.readTree(new File(jsonPath));
    system.out.println(root); 
    // for each object in root
    out.write("|start|eat|left|");
    out.newLine();
    for (JsonNode row : root) {
        String start = row.get("start").toString();
        String eat = row.get("eat").toString();
        String left = row.get("left").toString();
        // add these deatils to the examples table
        out.write("|" + start + "|" + eat + "|" + left + "|" );
        out.newLine();
    }
} catch (JsonProcessingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
in.close();
out.close();
fin.delete();
new File(tempFilePath).renameTo(fin);
...