Size: a a a

testing_in_python

2020 August 14

M

Merg in testing_in_python
можно ж до ассерта приаттачить)
источник

M

Merg in testing_in_python
а лучше сразу во враппере
источник

IS

Idi Suda in testing_in_python
+
источник

BK

Boris Krutskih in testing_in_python
Merg
а лучше сразу во враппере
с враппером не разобрался)
источник

M

Merg in testing_in_python
Boris Krutskih
с враппером не разобрался)
в твоем враппере апишки
источник

BK

Boris Krutskih in testing_in_python
Сказочный Сникерс
замени 200 на 555 и проверь еще раз
ну да) аттачит но не респонсе
источник

BK

Boris Krutskih in testing_in_python
Ну вот-так гуд работает
class ApiClient:
   def __init__(self, base_url):
       self.base_url = base_url

   @step
   def get(self, path="/", params=None, headers=None):
       url = f"{self.base_url}{path}"
       res = requests.get(url=url, params=params, headers=headers)
       allure.attach(json.dumps(res.json(), indent=4), 'RESPONSE')
       return res

   @step
   def post(self, path="/", params=None, data=None, json=None, headers=None):
       url = f"{self.base_url}{path}"
       res = requests.post(url=url, params=params, data=data, json=json, headers=headers)
       allure.attach(json.dumps(res.json(), indent=4), 'RESPONSE')
       return res


@pytest.fixture
def api_v2():
   return ApiClient(base_url=URI)
источник

СС

Сказочный Сникерс... in testing_in_python
Boris Krutskih
Ну вот-так гуд работает
class ApiClient:
   def __init__(self, base_url):
       self.base_url = base_url

   @step
   def get(self, path="/", params=None, headers=None):
       url = f"{self.base_url}{path}"
       res = requests.get(url=url, params=params, headers=headers)
       allure.attach(json.dumps(res.json(), indent=4), 'RESPONSE')
       return res

   @step
   def post(self, path="/", params=None, data=None, json=None, headers=None):
       url = f"{self.base_url}{path}"
       res = requests.post(url=url, params=params, data=data, json=json, headers=headers)
       allure.attach(json.dumps(res.json(), indent=4), 'RESPONSE')
       return res


@pytest.fixture
def api_v2():
   return ApiClient(base_url=URI)
если в res будет не json то все сломается
источник

СС

Сказочный Сникерс... in testing_in_python
и зачем тебе два метода на get и post полностью одинаковые?
источник

BK

Boris Krutskih in testing_in_python
Сказочный Сникерс
и зачем тебе два метода на get и post полностью одинаковые?
лучше типа через **kwargs 1 сделать?
источник

СС

Сказочный Сникерс... in testing_in_python
да и через передачу типа запроса
источник

IS

Idi Suda in testing_in_python
Ща верну удаленное кароч, я думал не в тему
источник

IS

Idi Suda in testing_in_python
У меня вот так:

from requests import Session, Response
from allure import attach, attachment_type

class BaseSession(Session):
   def __init__(self, base_url: str = None, **kwargs):
       super().__init__(**kwargs)
       self._base_url = base_url

   @property
   def base_url(self):
       return self._base_url

   @base_url.setter
   def base_url(self, val):
       self._base_url = val
 

   def request(self, method, url, **kwargs) -> Response:
       url = f'{self.base_url}{url}'
       headers = {'Accept': 'application/json'}
       response = super().request(method, url, headers=headers, **kwargs)

       msg = f'{method} {response.status_code} {response.reason}.\n' \
             f'\nHeaders: {response.headers}' \
             f'\nURL requested: {url}' \
             f'\nParams {kwargs}' \
             f'\nCookies: {response.cookies.get_dict()}'

       try:
           attach(
               body=json.dumps(response.json(), indent=4, ensure_ascii=False).encode('utf8'),
               name=f'API Response from {method} {url}. \nParams: {kwargs}',
               attachment_type=attachment_type.JSON,
               extension='json')
       except json.JSONDecodeError:
           logger.debug(f'Warning: Response has no json-body. \n{msg}', exc_info=True)

       finally:
           return response



Использовать как и requests.Session:
s = BaseSession(base_url=<URL>)
s.get('/<method>', params=<params>, headers=<headers>)
s.post('/<method>, params=<params>, headers=<headers>)


и тп
источник

СС

Сказочный Сникерс... in testing_in_python
Idi Suda
У меня вот так:

from requests import Session, Response
from allure import attach, attachment_type

class BaseSession(Session):
   def __init__(self, base_url: str = None, **kwargs):
       super().__init__(**kwargs)
       self._base_url = base_url

   @property
   def base_url(self):
       return self._base_url

   @base_url.setter
   def base_url(self, val):
       self._base_url = val
 

   def request(self, method, url, **kwargs) -> Response:
       url = f'{self.base_url}{url}'
       headers = {'Accept': 'application/json'}
       response = super().request(method, url, headers=headers, **kwargs)

       msg = f'{method} {response.status_code} {response.reason}.\n' \
             f'\nHeaders: {response.headers}' \
             f'\nURL requested: {url}' \
             f'\nParams {kwargs}' \
             f'\nCookies: {response.cookies.get_dict()}'

       try:
           attach(
               body=json.dumps(response.json(), indent=4, ensure_ascii=False).encode('utf8'),
               name=f'API Response from {method} {url}. \nParams: {kwargs}',
               attachment_type=attachment_type.JSON,
               extension='json')
       except json.JSONDecodeError:
           logger.debug(f'Warning: Response has no json-body. \n{msg}', exc_info=True)

       finally:
           return response



Использовать как и requests.Session:
s = BaseSession(base_url=<URL>)
s.get('/<method>', params=<params>, headers=<headers>)
s.post('/<method>, params=<params>, headers=<headers>)


и тп
да, вот как то так
источник

СС

Сказочный Сникерс... in testing_in_python
def request(self, method, url, **kwargs)
источник

СС

Сказочный Сникерс... in testing_in_python
еще бы заголовки вынести в кварги но это мелочи, не всем нужны
источник

IS

Idi Suda in testing_in_python
Idi Suda
У меня вот так:

from requests import Session, Response
from allure import attach, attachment_type

class BaseSession(Session):
   def __init__(self, base_url: str = None, **kwargs):
       super().__init__(**kwargs)
       self._base_url = base_url

   @property
   def base_url(self):
       return self._base_url

   @base_url.setter
   def base_url(self, val):
       self._base_url = val
 

   def request(self, method, url, **kwargs) -> Response:
       url = f'{self.base_url}{url}'
       headers = {'Accept': 'application/json'}
       response = super().request(method, url, headers=headers, **kwargs)

       msg = f'{method} {response.status_code} {response.reason}.\n' \
             f'\nHeaders: {response.headers}' \
             f'\nURL requested: {url}' \
             f'\nParams {kwargs}' \
             f'\nCookies: {response.cookies.get_dict()}'

       try:
           attach(
               body=json.dumps(response.json(), indent=4, ensure_ascii=False).encode('utf8'),
               name=f'API Response from {method} {url}. \nParams: {kwargs}',
               attachment_type=attachment_type.JSON,
               extension='json')
       except json.JSONDecodeError:
           logger.debug(f'Warning: Response has no json-body. \n{msg}', exc_info=True)

       finally:
           return response



Использовать как и requests.Session:
s = BaseSession(base_url=<URL>)
s.get('/<method>', params=<params>, headers=<headers>)
s.post('/<method>, params=<params>, headers=<headers>)


и тп
Проперти, чтобы можно было не сразу base_url давать, а попозже, не при инициализации
источник

BK

Boris Krutskih in testing_in_python
Сказочный Сникерс
и зачем тебе два метода на get и post полностью одинаковые?
наверно для того чтобы в **kwargs не передавать) а сразу нужный метод вызывать
источник

СС

Сказочный Сникерс... in testing_in_python
Boris Krutskih
наверно для того чтобы в **kwargs не передавать) а сразу нужный метод вызывать
ну это же чистая копипаста
источник

IS

Idi Suda in testing_in_python
Boris Krutskih
наверно для того чтобы в **kwargs не передавать) а сразу нужный метод вызывать
переопредели request метод, он дергается, когда юзаешь всё остальное - геты, посты, патчи, делейты и тп
источник