Тестирование конечной точки API с использованием функции

У меня есть логин конечной точки API django rest, который принимает имя пользователя и пароль в виде объекта json, как показано ниже.

   {
      username: email,
      password: password,
   }

и возвращает объект json, содержащий токен

{
   token : 0234jh324234j2hiy342
}

Теперь я хочу написать тест в поведении. У меня есть следующий файл функций.

Feature: Login User
  By providing different credentials we check if our login API end point is working as expected or not

  Scenario: Login User by Providing Authentication Credentials
    Given I provide user authentication credentials
    Then I must get a reponse with status code 200 and a jSon object with token

и ниже мой файл auth.py

from behave import *
import requests
import json


@given('I have user authentication credentials')
def set_impl(context):
    url = 'https://example.com/v1/login'
    headers = {'content-type': 'application/json'}
    body = {
        "username": "[email protected]",
        "password": "abcdef123",
    }


@when('I make an http post call')
def step_impl(context):
    context.res = requests.post(url, data=json.dumps(body), headers=headers)


@then('I must get a reponse with status code 200 and a jSon object with token')
def step_impl(context):
    assert context.res.status == 200

Я не могу получить доступ к URL-адресу, заголовку и тексту из декоратора @given в декораторе @when. И как я могу проверить json в ответ на ожидаемый json.


person Shoaib Iqbal    schedule 12.06.2018    source источник
comment
Добавьте в контекст все, что вам понадобится на более позднем этапе.   -  person Klaus D.    schedule 12.06.2018
comment
Также неплохо иметь такое предложение, как The response has a key {key} with value {value}., которое можно использовать повторно.   -  person Klaus D.    schedule 12.06.2018


Ответы (1)


Согласно предложению @KlausD., Вы должны добавить свои переменные в объект context поведения. Я отредактировал ваш код, чтобы добавить ваши переменные в качестве атрибутов объекта context.

from behave import *
import requests
import json


@given('I have user authentication credentials')
def set_impl(context):
    context.url = 'https://example.com/v1/login'
    context.headers = {'content-type': 'application/json'}
    context.body = {
        "username": "[email protected]",
        "password": "abcdef123",
    }


@when('I make an http post call')
def step_impl(context):
    context.res = requests.post(context.url, data=json.dumps(context.body), headers=context.headers)


@then('I must get a reponse with status code 200 and a jSon object with token')
def step_impl(context):
    assert context.res.status == 200

Что касается проверки JSON в вашем ответе на ожидаемый JSON ...

  1. Ознакомьтесь с объектом response пакета requests здесь, чтобы узнайте, как получить атрибуты объекта response.

  2. Откройте свой собственный ожидаемый файл JSON через open(), возьмите значение, соответствующее ключу token, и выполните assert expectedToken == responseToken или что-то в этом роде.

person natn2323    schedule 12.06.2018