StepDefinition파일과 각각 Step과 연결된 모듈을 생성했다면, 내부 로직을 구현해야할 것 입니다.
이때 어떠한 흐름이 있는 시나리오라면, 특정 Request의 response에서 ID값을 뽑아 다음 Request로 넘기는 등의 로직이 필요할 수도 있습니다. 이 때 context
parameter를 사용합니다.
@given('the Book details which needs to be added to Library')
def step_impl(context):
context.add_book_url = getConfig()['API']['endpoint'] + APIResourses.add_book
context.query = "select * from books"
context
는 Behave
library에서 지원하는 오브젝트이므로 몇가지 요소들이 정해져있긴 합니다만, 그것과는 별개로, 유저가 직접 attribute를 생성해서 지정해줄 수 있습니다.
즉, 위 코드처럼 context
obeject에 add_book_url
이나 query
값을 생성/지정해줄 수 있는 것입니다.
@when('We execute the AddBook PostAPI method')
def step_impl(context):
context.response = requests.post(context.add_book_url,
json=buildPayLoadFromDB(context.query),
headers={
"Content-Type": "application/json"
}
)
given
라인에서 추가해준 add_book_url
attribute를 when
라인에서 다시 사용하고 있습니다.
@given('the Book details which needs to be added to Library')
def step_impl(context):
context.add_book_url = getConfig()['API']['endpoint'] + APIResourses.add_book
context.query = "select * from books"
@when('We execute the AddBook PostAPI method')
def step_impl(context):
context.response = requests.post(context.add_book_url,
json=buildPayLoadFromDB(context.query),
headers={
"Content-Type": "application/json"
}
)
@then('book is successfully added')
def step_impl(context):
bookID = context.response.json()['ID']
requests.delete(getConfig()['API']['endpoint'] + APIResourses.delete_book,
json={
"ID": bookID
})
assert context.response.status_code == 200
assert context.response.json()['Msg'] == "successfully added"
Gherkin 문법대로, given
, when
, then
의 흐름대로 실행될 시, 각각의 모듈에서 attribute를 지정하고 다음 request에서 사용할 수 있습니다.
Behave library를 이용한 BDD 코드를 실행시키기 위해서는, 다음과 같이 Command-line에 입력해줍니다.
behave {PATH}/feature/{FEATURE_FILE_NAME}