Краткое введение в тестирование DApps (децентрализованных приложений)

Краткое введение в тестирование DApps (децентрализованных приложений)

23 февраля 2022 г.

Если вы инженер-тестировщик и хотите заняться Web3, вам может быть трудно понять, с чего начать. Существуют буквально тысячи учебных пособий, предназначенных для разработчиков блокчейнов, но пока лишь немногие посвящены тестированию.


Недавно несколько человек задавали мне вопросы об этом, поэтому я подумал, что было бы полезно написать пост. Пожалуйста, добавляйте свои мысли/критику/идеи в комментарии.


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


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


Прежде всего, что вы на самом деле будете тестировать? Этот пост посвящен проектам, которые представляют собой децентрализованные приложения (dApps), созданные в сетях, совместимых с Ethereum или EVM (виртуальная машина Ethereum).


Существуют различные работы, которые включают тестирование/обеспечение качества на уровне протокола или тестирование приложений, созданных в других сетях, написанных на разных языках, но они выходят за рамки этого поста.


Начиная


Если вы вообще не сталкивались с Ethereum, прочитайте это для обзора.


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


Remix – это встроенная в браузер IDE, которая позволяет писать, исследовать и тестировать смарт-контракты, не беспокоясь о зависимостях. Это отличное место для начала.


Вам также необходимо иметь возможность запускать dApp локально, чтобы вы могли протестировать его на смоделированном макете блокчейна. Такие платформы, как Hardhat и Truffle, проведут вас через этот процесс.


Хотите поиграть с имитацией блокчейна самостоятельно для начала? Прочтите документацию и посмотрите видеоруководство по Ganache.


Исследовательское тестирование


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


Поставьте себя на место пользователя и представьте, что вы впервые видите и используете ваше приложение. Имеет ли пользовательский интерфейс и общий пользовательский опыт смысл или он предполагает уже существующие знания об экосистеме Web3? Это новая область технологий, и пользователям потребуется больше указателей и указаний, чем обычно.


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


Не пренебрегайте основами, такими как тестирование доступности. Это само собой разумеется: нет оправдания недоступным приложениям, децентрализованным или каким-либо другим.


Вам нужно подумать о следующих вещах:


  • Выдает ли dApp какие-либо необъяснимые ошибки, когда вы проходите через обычный поток пользователей? Что делать, если есть потеря связи? Вернется ли он в правильное состояние?

  • Обмен сообщениями информирует конечного пользователя о том, что он совершает транзакции в блокчейне? Насколько информативны сообщения?

  • Сообщает ли dApp пользователям, какие части сервиса являются централизованными, или предъявляет необоснованные претензии?

  • Если вы тестируете кошелек, достаточно ли сообщений о важности безопасного хранения вашего закрытого ключа или фразы восстановления?

  • Если сеть занята и транзакция занимает много времени, время транзакции истекает и приводит к ошибке? Или попросить пользователя повторить попытку?

  • Является ли платеж, списанный с кошелька нужной суммой? Что произойдет, если вы сделаете несколько запросов или попытаетесь совершить транзакции, превышающие баланс токенов в вашем кошельке?

  • Что произойдет с состоянием приложения, если вы отмените транзакцию в своем кошельке?

  • Обновляется ли веб-страница или экран мобильного устройства автоматически в ответ на изменения в вашем кошельке или сети или вам нужно обновлять вручную?

  • При использовании внешнего API корректно ли обновляются цены и т. д.?

  • Предупрежден ли пользователь о необратимости транзакций?

После того, как вы протестировали приложение локально, вам, вероятно, потребуется использовать тестовую сеть, такую ​​как Ropsten или Rinkeby. Это похоже на уменьшенную версию живой сети Ethereum, которая имеет свои собственные (бесполезные) токены. Для тестирования транзакций в одной из этих тестовых сетей вам понадобится тестовый ETH (из сборщика, например https://faucet.ropsten.be/).


Другие инструменты, о которых вам следует знать, это EtherScan и EthGasStation. EtherScan — это обозреватель блоков для блокчейна Ethereum. Здесь вы можете увидеть адреса и транзакции. В тестовых сетях Ethereum есть собственные экземпляры EtherScan.


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


Автоматическое тестирование


Я не могу переоценить важность хорошо написанного всеобъемлющего набора тестов. Разработчики должны писать свои собственные контрактные тесты, но вы должны иметь возможность читать тесты и предлагать альтернативные тестовые сценарии, о которых они, возможно, не подумали.


Например, вот тесты для Boson Protocol смарт-контрактов.


Работа с остальной частью команды разработчиков для выявления крайних случаев и улучшения покрытия должна быть частью работы инженера по тестированию. Инструменты покрытия, такие как sol-coverage, в определенной степени полезны, но не обязательно определяют конкретные сценарии, которые необходимо учитывать. для — и именно здесь бесценны навыки инженера-испытателя.


Для сквозного автоматизированного тестирования это может быть сложно, потому что многие популярные среды тестирования затрудняют доступ к элементам за пределами DOM, таким как кошельки в расширениях браузера.


Dappeteer — это форк Puppeteer, который на самом деле включает в себя взаимодействие Metamask. Первоначальная версия Dappeteer больше не поддерживается, но существует ответвление здесь созданное и поддерживаемое ChainSafe. В противном случае вы можете рассмотреть возможность использования чего-то вроде Playwright, которое позволяет взаимодействовать с расширениями браузера и поддерживает несколько вкладок (спасибо Krysztof Paliga за совет).


Награды за ошибки


Большинство децентрализованных проектов, как правило, имеют открытый исходный код, а вознаграждения за ошибки — популярный способ привлечь все сообщество к улучшению качества проекта. Это тот, который мы запускаем в Boson Protocol. Какой бы тип тестирования вы ни проводили, невозможно знать и делать все и обнаруживать все уязвимости.


Bug bounty никогда не заменит хорошие методы тестирования, но они являются важным инструментом в современных процессах качества для проектов Web3.


Прочтите эту тему , чтобы узнать, как была обнаружена и исправлена ​​огромная ошибка Coinbase.


Также опубликовано [Здесь] (https://rhian-is.medium.com/how-to-test-dapps-decentralized-applications-4662cf61db90)



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE