Тестирование конечной точки API с использованием поведения - PullRequest
0 голосов
/ 12 июня 2018

У меня есть логин конечной точки 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декоратор.И как я могу проверить JSON в ответ на мой ожидаемый JSON.

1 Ответ

0 голосов
/ 13 июня 2018

Согласно предложению @ 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": "xyz@email.com",
        "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 пакет *1011* объекта здесь , чтобы узнать, как получить атрибуты response объекта.

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

...