Как подготовить вложенную структуру данных для теста на основе данных в карате? - PullRequest
1 голос
/ 08 мая 2020

В настоящее время я использую junit5, wiremock и restassured для своих интеграционных тестов. Каратэ выглядит очень многообещающим, но я немного борюсь с настройкой тестов, управляемых данными, так как мне нужно подготовить вложенные структуры данных, которые в текущей настройке выглядят следующим образом:

abstract class StationRequests(val stations: Collection<String>): ArgumentsProvider {
    override fun provideArguments(context: ExtensionContext): java.util.stream.Stream<out Arguments>{
        val now = LocalDateTime.now()
        val samples = mutableListOf<Arguments>()

        stations.forEach { station ->
            Subscription.values().forEach { subscription ->
                listOf(
                    *Device.values(),
                    null 
                ).forEach { device ->
                    Stream.Protocol.values().forEach { protocol ->
                        listOf(
                            null,
                            now.minusMinutes(5),
                            now.minusHours(2),
                            now.minusDays(1)
                        ).forEach { startTime ->
                            samples.add(
                                Arguments.of(
                                    subscription, device, station, protocol, startTime
                                )
                            )
                        }
                    }
                }
            }
        }
        return java.util.stream.Stream.of(*samples.toTypedArray())
    }
}

Is есть ли какой-либо предпочтительный способ настройки таких вложенных структур данных с карате? Первоначально я думал об определении 5 разных массивов с примерами значений для подписки, устройства, станции, протокола и startTime, а также их объединения и объединения в один массив, который будет использоваться в разделе Examples:.

Мне пока это не удалось, и мне интересно, есть ли лучший способ подготовить такие вложенные тесты, основанные на данных?

1 Ответ

1 голос
/ 08 мая 2020

Я не рекомендую вложение без крайней необходимости. Вы можете «сгладить» свои перестановки в одну таблицу, примерно так: https://github.com/intuit/karate/issues/661#issue -402624580

Тем не менее, обратите внимание на альтернативный вариант для Examples:, который просто может сработать для вашего случая: https://github.com/intuit/karate#data -driven-features

Вот простой пример:

Feature:

Scenario:
* def data = [{ rows: [{a: 1},{a: 2}] }, { rows: [{a: 3},{a: 4}] }]
* call read('called.feature@one') data

, и это: called.feature:

@ignore
Feature:

@one
Scenario:
* print 'one:', __loop
* call read('called.feature@two') rows

@two
Scenario:
* print 'two:', __loop
* print 'value of a:', a

Вот как это выглядит в новом HTML отчете (который находится в 0.9.6.RC2 и может потребовать более точной настройки) и демонстрирует, как Каратэ может поддерживать "вложенность" даже в отчет, чего не может сделать Cucumber. Возможно, вы поделитесь своим мнением и сообщите нам, готов ли он к выпуску :)

enter image description here

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