Урок для начинающих по PyTest #3.3 | Пишем тесты близкие к боевым условиям и бустим AssertError log

Поділитися
Вставка
  • Опубліковано 2 січ 2025

КОМЕНТАРІ • 63

  • @pendelbus555
    @pendelbus555 Рік тому +5

    В версии 2 pydentic, некоторые методы изменились, поэтому, чтобы у вас все заработало так, как у автора на 18:36, вам следует поменять parse_obj на model_validate, а декоратор validator на field_validator.

    • @NighTLife130
      @NighTLife130 10 місяців тому

      не помогло

    • @подопечныйПавлаЛекомцева
      @подопечныйПавлаЛекомцева 9 місяців тому

      Привет, не подскажешь, как исправил?@@NighTLife130

    • @markpivovarov7274
      @markpivovarov7274 5 місяців тому

      @@подопечныйПавлаЛекомцева from pydantic import BaseModel, field_validator, ValidationError
      from src.enums.user_enum import UserEnum
      from src.enums.user_enum import Status
      class Post(BaseModel):
      id: int
      @field_validator("id")
      def validate_id_less_than_zero(cls, v):
      if v < 0:
      raise ValueError("id must greater then zero")
      return v

  • @soldatov_ss
    @soldatov_ss 2 роки тому +10

    За годный контент не жалко и лайк поставить, тем более когда такая годнота подъехала 🤘

    • @SolveMeChannel
      @SolveMeChannel  2 роки тому

      Спасибо большое))) Обнял -> Приподнял))

  • @АйдаралиевАдилет
    @АйдаралиевАдилет 2 роки тому +2

    самое лучшее видео по pytest

  • @an4xu
    @an4xu Рік тому +1

    удобно в логи писать еще curl упавшего запроса (формировать через отдельную функцию).
    позволяет например на предпроде быстро иметь под рукой то, что можно передать разработчику

  • @alexn7208
    @alexn7208 2 роки тому +2

    Чувук ты крут !!! курс супер то что искал очень долго!

  • @markpivovarov7274
    @markpivovarov7274 5 місяців тому

    Many thanks for your videos man !! it really helps a lot (sorry , no Russian fonts here) Big Like.

  • @inspayran2049
    @inspayran2049 Рік тому

    За self и str спасибо, полезную инфу узнал )

  • @alexandrettio
    @alexandrettio 2 роки тому +4

    Спасибо за отличный плейлист. Воды мало, пользы много

  • @volodimirshurinov4103
    @volodimirshurinov4103 2 роки тому

    Начало видео прям от души ) инфа топ, за github отдельное спасибо, все четко еще и с комментариями на двух языках.

  • @serhiikholodnyi8031
    @serhiikholodnyi8031 2 роки тому +6

    Очень классные уроки, заходят на ура. Спасибо за труд!

  • @soldiertoy
    @soldiertoy Рік тому

    Тебе спасибо, товарищ!

  • @yanwolf8601
    @yanwolf8601 3 роки тому +1

    да спасибо, четко все

  • @Nick-zu9bi
    @Nick-zu9bi 2 роки тому +1

    Спасибо Вам за видосы

  • @kipzet4218
    @kipzet4218 2 роки тому +2

    Привет!
    В уроке ты разбираешь объект data. А можешь пожалуйста рассказать как описать объект meta? Ведь там есть вложенные объекты pagination и links. Очень интересно увидеть как будут описаны данные типы в pydantic

  • @indarsnab
    @indarsnab 2 роки тому +2

    @SolveMe спасибо огромное за такой титанический труд!
    Подскажи пожалуйста: соблюдаю четко структуру проекта как у тебя в видео. Но при запуске через pytest или python постоянно вьілетают ошибки с импортом: ModuleNotFoundError: No module named 'src'
    Что с ним не так?? Уже замучался))

    • @SolveMeChannel
      @SolveMeChannel  2 роки тому

      Привет дружище, посмотри, есть ли у тебя __init__.py в этой директории? Если нету, то нужно создать, иначе python не рассматривает её как пакет и ругается)

    • @indarsnab
      @indarsnab 2 роки тому

      @@SolveMeChannel Во всех дерикториях есть __init__.py, все папки создаю как у тебя на видео - через New -> Python Package

    • @indarsnab
      @indarsnab 2 роки тому

      @@SolveMeChannel Братик, помоги, кроме тебя никто мне не поможет)

    • @SolveMeChannel
      @SolveMeChannel  2 роки тому

      @@indarsnab А можете зайти к нам в канал и скинуть скриншот вашего репозитория и то, как вы запускаете? Так мы точно порешаем проблемку)) t.me/automation_testing_with_solveme

  • @БариАлибастр
    @БариАлибастр 5 місяців тому

    Привет, а укого появляется ошибка 'NoneType' object has no attribute 'validate' подскажите как исправить

  • @fyfkmuby33
    @fyfkmuby33 Рік тому

    А как быть, если в тесте падает две проверки? В отчет попадает только первая, и если не разбираться, то второй ошибки не видно.. видимо после первой тест прекращает дальнейшие проверки?

  • @anatolyzhoglo8139
    @anatolyzhoglo8139 3 роки тому

    круто, спасибо

  • @Rock_concerts
    @Rock_concerts 2 роки тому +1

    Спасибо за уроки хотелось бы узнать а будет ли UI в программе обучения ?

    • @SolveMeChannel
      @SolveMeChannel  2 роки тому

      Всегда пожалуйста))
      Да, в планах BDD тестирование и UI, но я ещё конкретно не решил, что именно мы будем рассматривать, playwright или же чистый selenium

    • @kipzet4218
      @kipzet4218 2 роки тому

      @@SolveMeChannel Привет! Playwright конечно! :)
      По Selenium и так куча уроков в рунете, а вот по Playwright отнюдь

    • @ДмитрийНоводворский-р9л
      @ДмитрийНоводворский-р9л Рік тому

      @@SolveMeChannel playwright было бы супер!

  • @Lemurk1n
    @Lemurk1n 2 роки тому +2

    Привет, спасибо большое за уроки, очень полезны!
    Не совсем понял, зачем мы сначала завели отдельный класс для ошибок, а потом описали их же в доп. функции __str__
    Может информация будет в дальнейшем, но пока небольшая каша по поводу того, какая структура у проекта) Если дальше этого нет, было бы полезно почитать и посмотреть

    • @SolveMeChannel
      @SolveMeChannel  2 роки тому +1

      Привет))
      Всё верно, сначала мы использовали ENUM класс, где лежали все наши ошибки, но потом немного оптимизировали это дело.
      Представим обычный день, вы запускаете тесты и получаете ошибку, довольно практично и информативно, но в любом случае, было бы не плохо получить ещё больше информации о том, куда мы отправили реквест, какие данные, какие хедеры и что нам вернулось. По-этому мы изменили тактику и вместо ошибок начали возвращать сам инстанс респонса, при этом изменив __str__ метод так, чтобы выжать максимум информации.
      При этом никто не мещает заменить просто self, на что-то такое f"{self}, Error: {Errors.SomeError.value}", убив обоих зайцев ))

  • @stylebender1905
    @stylebender1905 Рік тому

    Если хотите сделать класс Response универсальным, можно в конструктор передавать json_key который нужен для парсинга.
    def __init__(self, response, json_key):
    self.response = response
    self.response_json = response.json().get(f'{json_key}')
    self.response_status_code = response.status_code
    затем при вызове скармливаете тот ключ, который нужно обработать
    Если у кого есть более интересный метод, жду коммента.
    Спасибо!

  • @ГеоргийАндриевский-я8е

    Добрый день!
    Подскажите как работает принцип, к примеру class User(BaseModel):
    если я в нем указываю id: str то у меня не падает модель с ошибкой...так как id у нас int.
    тогда зачем мы задаем в схеме все значения?
    Спасибо, заранее за ответ!

  • @goldslowhat
    @goldslowhat 3 роки тому

    Четкие видосы!

  • @vasiliyovchinnikov1731
    @vasiliyovchinnikov1731 Рік тому

    а зачем в gender используется Enum?
    можно ли использовать
    gender: Literal["female', 'male']

  • @ИльяЯкимов-г2ы
    @ИльяЯкимов-г2ы 2 роки тому

    Как ты комментишь/раскомментишь несколько строк при выделении?

    • @SolveMeChannel
      @SolveMeChannel  2 роки тому

      На Mac комбинация клавиш: Command + /. По умолчанию обычной так. На других системах Linux/Windows это обычно Shift + /. Если не работает, то помогут только настройки :(

    • @ratven_alexander
      @ratven_alexander 2 роки тому

      На винде бывает Ctrl+/

  • @aleksandrchernenko8813
    @aleksandrchernenko8813 2 роки тому

    Про зірочок прям хихикнул
    Классно, продолжай!

  • @divir1000
    @divir1000 2 роки тому

    А вы менторством занимаетесь? Было бы хорошо один на один с вами поучиться

    • @SolveMeChannel
      @SolveMeChannel  2 роки тому +1

      Здравствуйте, к сожалению нет, так как особо времени свободного нету. Думаю создать группу в телеграмм, чтобы мы все могли поговорить о каких-то глобальных проблемах и рассказать о своих.

  • @alexn7208
    @alexn7208 2 роки тому +1

    Линк перестал работать

    • @SolveMeChannel
      @SolveMeChannel  2 роки тому

      Привет, мы создали точно такую же штуку, только с кучей ендпоинтов, фич и ендпоинтов с багами, где мы все можем практиковатся в написании тестов.
      Вот ссылка:
      send-request.me/
      А вот видео, где я детально описываю то, что там есть :)
      ua-cam.com/video/r927KmqKALA/v-deo.html&ab_channel=SolveMe

  • @yanalsheuski263
    @yanalsheuski263 2 роки тому

    Когда из консоли копирую весь json и вставляю в код, то у меня он так и остается строкой. Это расширение, чтобы он сразу делился на части?

    • @SolveMeChannel
      @SolveMeChannel  2 роки тому

      Привет) Вродь у меня нету таких расширений для Pycharm. Иногда бывает когда я полностью не скопировал JSON или когда копировал не из консоли, а например из сообщения в Slack, который заменяет обычные кавычки на какие-то другие, которые мешают нормальному отображению.

    • @yanalsheuski263
      @yanalsheuski263 2 роки тому

      @@SolveMeChannel а пайчарм комьюнити, или проф?

    • @SolveMeChannel
      @SolveMeChannel  2 роки тому

      Проф версия

    • @yanalsheuski263
      @yanalsheuski263 2 роки тому

      @@SolveMeChannel значит из-за этого. Ну окей, спасибо за информацию

    • @SolveMeChannel
      @SolveMeChannel  2 роки тому

      @@yanalsheuski263 у меня ещё vscode кстати есть, там такой штуки нету. Попробуй в нём это воспроизвести

  • @2garinzmei344
    @2garinzmei344 2 роки тому

    А что за предупреждение? Overrides method in object.

    • @SolveMeChannel
      @SolveMeChannel  2 роки тому

      Добрый день, эта ошибка мелькнула где-то в видео? Если да, не могли бы ли вы скинуть таймфрейм, а то я, что-то не могу найти :) Если вкратце, то ничего страшного, так как переопределение методов в наследники это обычное дело в программировании))

  • @ДмитроМельниченко-ч6к

    Заметка , если хотите сделать не обязательное поле в Базовой модели используйте Optional из typing. id: Optional[int]

    • @SolveMeChannel
      @SolveMeChannel  2 роки тому

      Добрый день)
      Спасибо большое, это очень хорошее замечание)