
Краткое введение в тестирование 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)
Оригинал