Вы можете предоставить данные как json, и проанализировать их, используя json.loads
в шагах.
Обратите внимание, что для использования Examples:
нам нужно Scenario Outline
вместо Scenario
.
# features/testing_objects.feature
Feature: Testing objects
Scenario Outline: Given the inputs below
Given a <Dictionary> and <List>
When we insert them
Then we confirm the result in the database
Examples: Input Variables
|Dictionary |List |
|{"name": "Fred", "age":2} |[1,2,"three"]|
Разобрать его, используя json.loads
, в шагах:
# features/steps/steps.py
import json
from behave import given, when, then
@given('a {dictionary} and {a_list}')
def given_dict_and_list(context, dictionary, a_list):
context.dictionary = json.loads(dictionary)
context.a_list = json.loads(a_list)
@when('we insert them')
def insert_data(context):
print('inserting dictionary', context.dictionary)
print('inserting list', context.a_list)
@then('we confirm the result in the database')
def confirm(context):
print('checking dictionary', context.dictionary)
print('checking list', context.a_list)
Вместо использования Examples:
вы также можете использовать многострочный строковый литерал и затем обращаться к каждому объекту в отдельномшаг, через context.text
.
Feature: String literal JSON
Scenario:
Given a dictionary
"""
{
"name": "Fred",
"age": 2
}
"""
And a list
"""
[1, 2, "three"]
"""
Then we can check the dictionary
And check the list
@given('a dictionary')
def given_a_dictionary(context):
context.dictionary = json.loads(context.text)
@given('a list')
def given_a_list(context):
context.a_list = json.loads(context.text)
@then('we can check the dictionary')
def check_the_dictionary(context):
assert context.dictionary == {
'name': 'Fred',
'age': 2
}
@then('check the list')
def check_the_list(context):
assert context.a_list == [1, 2, 'three']