Подтвердить что ты не робот

Как проверить модуль, который зависит от boto и службы Amazon AWS?

Я пишу очень маленький ORM Python вокруг boto.dynamodb.layer2. Я хотел бы написать тесты для него, но я не хочу, чтобы тесты действительно связывались с AWS, поскольку для этого потребовались бы сложная настройка, учетные данные, доступ к сети и т.д.

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

Связывание моих тестов с сетью кажется плохой идеей, поскольку она заставляет тесты работать медленнее или может привести к сбоям тестирования из-за сетевых ошибок или дросселирования. Моя цель - не тестировать интерфейс DynamoDB или AWS. Я просто хочу проверить свой собственный код.

Я планирую использовать unittest2 для написания тестов и mock, чтобы издеваться над деталями boto, которые попали в сеть, но я никогда не делал этого раньше, поэтому мой вопрос сводится к следующим:

  • Я собираюсь сделать это правильно?
  • Кто-нибудь еще это сделал?
  • Есть ли какие-то конкретные точки в интерфейсе boto.dynamodb, которые лучше всего бы вычленить?
4b9b3361

Ответ 1

Чтобы полностью ответить на мои вопросы:

  • Как и в случае с ответом @pcalcao, издевательство над сервисом было правильным. Это было не так сложно, как я думал, это будет - тестовый код будет только немного длиннее, чем тестируемый код, и большинство из них - тесты, а не сантехника.

  • Благодаря @gamaat за то, что я заставляю меня смотреть второй раз, boto делает это в своих собственных тестах, насмехаясь над фактический уровень интерфейса транспорта, в httplib.

  • Отказывание интерфейса boto.dynamodb.layer1 (вместе с boto.connect_dynamodb) оказалось правильным. Настройка шпионов на boto.dynamodb.layer2 и boto.dynamodb.table также помогла. Как только я начал понимать это, я обнаружил, что mock - это радость для работы.

Здесь мое решение, лицензия BSD. Я буду публиковать всю библиотеку в PyPI, как только у меня будет собака, она немного доработала и собрала правильную документацию. Я отправил его в PyPI.

Ответ 2

Я думаю, что у вас есть правильный подход, вы определенно не хотите, чтобы ваши тесты были связаны с фактической связью с AWS. Издевательская служба, безусловно, правильная вещь здесь.

Ответ 3

Все тесты в boto были первоначально интеграционными тестами, которые попадали в конечные точки реального сервиса. У нас все еще есть те тесты, но они также начали добавлять отрывочные модульные тесты. Возможно, вам захочется проверить, что до сих пор можно найти на примерах.