Я пишу некоторые тесты API в pytest, которые принимают объект user
, сгенерированный из служебного класса. Затем он вызывает библиотеку requests
для выполнения необходимых вызовов API.
Ниже приведен мой код, который проверяет операции /user
.
import requests
class users:
def __init__(self, user_with_token):
self.token = user_with_token["Token"]
self.url = 'http://127.0.0.1:5000/api/Users/'
self.headers = {'token': self.token}
def get_all_users(self):
return requests.get(self.url, headers=self.headers).status_code
def delete_user(self):
return requests.delete(self.url, headers=self.headers).text
def update_user(self):
return requests.post(self.url, headers=self.headers).text
Вот тесты, которые вызывают выше :
import pytest
from endpoints.users import users
def get_all_users(user_with_token):
result = users.get_all_users(user_with_token)
assert result == 200
def test_delete_all_users(user_with_token):
result = users.delete_user(user_with_token)
assert "Current user deleted" in result
Вот определение, которое генерирует поддельные данные для использования тестом:
def generate_user_with_token():
fake = Faker()
url = 'http://127.0.0.1:5000/api/Register/'
username = fake.name().split(' ', 1)[0],
email = fake.email(),
password = fake.random_int(min=0, max=9999)
token = requests.post(url, json={'Username': username,'Email Address': email,'Password': password}).text.split()[-2]
user = {
"Username": username,
"Email Address": email,
"Password": password,
"Token": token
}
return user
Однако, когда я его запускаю. Я получаю сообщение об ошибке:
def delete_user(self):
> return requests.delete(self.url, headers=self.headers).text
E AttributeError: 'dict' object has no attribute 'url'
Я не могу использовать self.url
? Мне не нужно было переопределять его в каждом определении, поскольку конечная точка одинакова для каждого теста.