unittest assertionError в Python AssertionError: <Response [200]>! = 200 - PullRequest
0 голосов
/ 02 июня 2019

Я пишу тесты Python с модулями unittest и request, но получаю
AssertionError: <Response [200]> != 200

Тесты настраиваются в двух функциях: test_get и test_post.Тестовые бегуны начинаются с класса Tests, где проблема находится в test2.Я тоже пытался это утверждать: <Response [200]> тоже.Но вместо этого я получаю эту ошибку:

<Response [200]> != <Response [200]>

Expected :<Response [200]>
Actual   :<Response [200]>

Для этого я использую httpbin и pycharm.

import requests
import unittest

# Test 1: Assert get data body
get_url = 'https://httpbin.org/get'
test_get = \
    {
        'args': {},
        'headers': {'Accept': '*/*',
                    'Accept-Encoding': 'gzip, deflate',
                    'Host': 'httpbin.org',
                    'User-Agent': 'python-requests/2.21.0'},
        'origin': '94.255.130.105, 94.255.130.105',
        'url': 'https://httpbin.org/get'
    }

def get_httpbin(get_url):
    r = requests.get(get_url).json()
    return r

# Test 2: Assert post is OK 200
post_url = 'https://httpbin.org/post'
test_post = \
    {
        'sender': 'Alice',
        'receiver': 'Bob',
        'message': 'We did it!'
    }

def post_httpbin(post_url):
    r = requests.post(post_url, test_post)
    return r

# Test Runner
class Tests(unittest.TestCase):
    def test1(self):
        self.assertEqual(get_httpbin(get_url), test_get)

    def test2(self):
        self.assertEqual(post_httpbin(post_url), 200)

if __name__ == '__main__':
    unittest.main()

Ответы [ 2 ]

2 голосов
/ 02 июня 2019

Сейчас вы сравниваете r, который дает вам <Response [200]> с целым числом, отсюда и ошибка сборки. Вместо этого вы хотели бы утверждать r.status_code, который дает вам код состояния в виде целого числа с 200.

def test2(self):
    self.assertEqual(post_httpbin(post_url).status_code, 200)
1 голос
/ 02 июня 2019

Вы сравниваете объект ответа с числом. Они не равны.

Намерено сравнить код состояния с объектом ответа с числом. Попробуйте это:

    def test2(self):
        self.assertEqual(post_httpbin(post_url).status_code, 200)

...