ward — python фреймворк для тестирования, взявшийся исправить все недостатки pytest. Все фичи одинаково интересные и сомнительные :)

  • Использует цвета для диффов, статуса и прочего. Почему-то pytest до сих пор боится цвета использовать, хотя цветной вывод, кажется, уже даже на всех CI поддерживается. Думаю, потому что тогда сложно результат копировать в чаты.

  • Название функции может быть любым, а указать, что это тест, и задать его имя нужно с помощью декоратора: @test('test name'). Интересно, как тогда запустить из консоли отдельный тест.

  • Фикстуры определяются не по имени аргумента функции, а по его значению по умолчанию. Например, def _(expected=user_fixture):. Так их становится проще найти, “explicit better than implicit”, но mypy (ну и IDE, соответственно) может с такого беситься. Мол, зачем callable в str присваиваешь? Хотя если сделают простой плагин для mypy, будет даже лучше.

  • Параметризация… Это лучше показать:

    num_chars=each(20, 11, 10, 5),
    expected=each(s, s, "hello w...", "he..."),
):```

Это вот разложится в 4 кейса. Все как-то взъелись на параметризацию в pytest, но мне кажется, что лучше не сделать. Этот вот подход в ward работает только на простых примерах, когда параметров не больше трёх и кейсов всего ничего. Но у меня обычно параметризация содержит значений 20, а в одном случае было больше 400, и вот такой подход превратится во что-то совершенно ужасное.

В общем, кто-то взялся бороться с магичностью pytest, и это здорово. И пусть пока получилось не очень, но всё ещё впереди. Легко читаемый цветной вывод диффов больше всего радует. Так что для следующего pet-проекта попробуй ward, вдруг понравится :)