Одним из критериев качества набора тестов является то, насколько хорошо набор тестов поддерживает вас в случае неудачных тестов для выявления проблемы. В идеале вы должны быть в состоянии определить проблему в одиночку, посмотрев, какие тесты провалились, а какие - нет. Вам не нужно использовать отладчик, чтобы узнать, что на самом деле пошло не так.
То, как вы написали свои тесты, не даст вам наилучшей возможной поддержки. Вы собрали много утверждений в одну тестовую функцию. Поэтому тестовые функции не будут работать по многим различным причинам, и, когда вы увидите, что одна из функций не работает, вам придется провести подробный анализ или использовать отладку, чтобы выяснить, по какой причине она потерпела неудачу. Когда ваши тесты проверяют аспекты избыточно (как вы задали в своем вопросе), вы делаете их еще менее конкретными, что усугубляет проблему.
Следовательно, каждый тест должен проверять один конкретный аспект, так что провал теста дает наиболее конкретную информацию. Это достигается сочетанием следующих двух принципов:
Превращение каждого утверждения в собственный тест может быть удобно выполнено с помощью так называемых параметризованных тестов. Некоторые подсказки для Python можно найти в этом вопросе: Как генерировать динамические (параметризованные) модульные тесты в Python?