е2е что это такое
Сквозное тестирование (end-to-end): особенности и инструменты
Что такое E2E тестирование? Разбираемся с определениями и подбираем инструментарий.
E2E тесты обычно выполняются после всех остальных типов тестирования
У этой записи один комментарий
Понятие еnd-to-end обозначает всего-навсего классификацию тестов по уровню, на котором тестируется система, и, само по себе, ничего не говорит ни о том, какие конкретно должны быть эти тесты, ни о том, какую роль они играют в общей стратегии обеспечения/проверки качества и, также, не является методикой тестирования. (Методика – это совсем другое понятие.)
Для понимания сути этого понятия хорошо сравнить его с модульным (“нижний” уровень) и интеграционным (“средний”) тестированием на каком-нибудь конкретном примере. Давайте рассмотрим некий сферический webshop в вакууме. Предположим, в нем есть 50 классов и для большинства из них написаны модульные тесты. Они проверяют исключительно функционал конкретного модуля (чаще всего, класса), т.е. тот, что зависит только от самого модуля и ни от чего чего более. Потом есть интеграционные тесты. Они проверяют корректность работы отдельных “модулей”, если их собрать вместе согласно архитектурe. Например, работает ли правильно “Корзина”, состоящая, в свою очередь, из 10 классов (предварительно проверенных модульными тестами), или “Корзина”, подключенная к “Вебморде” и т.д. Где-то повыше в этой иерархии есть такие интеграционные тесты, которые проверяют конкретный функционал всей системы. Например, отправляется ли юзеру мейлом копия оплаченного заказа…
И вот тут начинается самое интересное для понимания того, что такое end-to-end тестирование! Можно представить себе тест, проверяющий, что соответствующий мейл генерируется и сбрасывается SMTP серверу. Если SMTP сервер не рассматривать, как часть разрабатываемой системы, то этот тест вполне можно назвать end-to-end тестом (послали кучку HTTP запросов через “Вебморду” и проверили сброс мыла на SMTP – все зашибись!). Однако, если настройки и эксплуатация SMTP сервера – часть проекта (например, заказана разработка webshop “под ключ”), может оказаться, что это мыло будет отфильтровано каким-нибудь спам-фильтром, превысит лимит почтового ящика пользователя… короче, не дойдет до него. Тогда этот же самый тест уже нельзя считать end-to-end, а нужно бы было написать тест, проверяющий приход мыла в POP3/IMAP ящик. (Опять же, если это действительно нужно! Ибо, в зависимости от конкретных функциональных и нефункциональных требований, архитектор и QA инженер вполне могут найти возможность обеспечить адекватный контроль качества и без такого теста.)
Таким образом, end-to-end тесты, это такие интеграционные тесты, которые воздействуют на систему через ее самые внешние интерфейсы и проверяют ожидаемую реакцию системы через эти же интерфейсы. Почему именно интеграционные? Потому, что это единственное, что можно о них сказать наверняка: они по определению не могут быть модульными тестами. А все остальное: являются ли они одновременно приемочными, нагрузочными или еще какими – зависит только от общих плана/стратегии тестирования и той роли, которые эти тесты в них играют.
Знакомство с фронтенд-тестированием. Часть третья. E2E-тестирование
Авторизуйтесь
Знакомство с фронтенд-тестированием. Часть третья. E2E-тестирование
Рассказывает Гил Тайяр, автор блога на Hackernoon
В этой части мы рассмотрим сквозное (E2E) тестирование: протестируем всё приложение целиком, причём сделаем это с точки зрения пользователя, по сути, автоматизируя все его действия.
В нашем случае приложение состоит только из фронтенда — бэкенда попросту нет, поэтому E2E-тестирование будет заключаться в открытии приложения в реальном браузере, выполнении набора вычислений и проверке валидности значения на экране.
Нужно ли проверять все перестановки, как мы делали это в юнит-тестах? Нет, ведь это уже проверено! В E2E-тестах мы проверяем работоспособность не отдельных юнитов, а всей системы сразу.
Сколько нужно E2E-тестов?
Первая причина, по которой таких тестов не должно быть много, — хорошо написанных интеграционных и юнит-тестов должно хватить. E2E-тесты должны проверить, что все элементы корректно связаны между собой.
Вторая причина — они медленные. Если их будет сотня, как юнит-тестов и интеграционных, то тестирование будет проходить очень долго.
Третья причина — непредсказуемое поведение E2E-тестов. О таком явлении есть пост в блоге Google, посвященном тестированию. В юнит-тестах не наблюдается такого нестабильного поведения. Они могут то проходить, то падать — причем без видимых изменений, исключительно из-за I/O. Можно ли убрать непредсказуемость? Нет, но можно свести её к минимуму.
Чтобы избавиться от непредсказуемости, делайте как можно меньше E2E-тестов. Пишите один E2E-тест на десять других, и лишь тогда, когда они действительно необходимы.
Пишем E2E-тесты
Перейдём к написанию E2E-тестов. Нам нужны две вещи: браузер и сервер для нашего фронтенд-кода.
Сперва взглянем на настройку веб-сервера.
Настройка веб-сервера в Mocha
Веб-сервер на Node? На ум сразу же приходит express, давайте посмотрим код:
В функции before мы создаем express-приложение, указываем ему папку dist и прописываем слушать порт 8080. В функции after мы «убиваем» сервер.
Папка dist — это то место, где мы храним наши JS-скрипты и куда копируем HTML- и CSS-файлы. Вы можете увидеть, что мы делаем это в сборочном скрипте npm в package.json :
Папка dist используется как в пользовательском окружении, так и в E2E-тестах. Это важно — запускать E2E-тесты нужно в средах, максимально похожих на «боевые».
Настройка браузера в Mocha
Для начала давайте посмотрим, как мы используем её, прежде чем начнём разбираться с настройками:
Это сложная штука. И я должен кое-что признать: этот код был написан кровью (о, и он работает только в Unix-системах). Он был написан при помощи Google, Stack Overflow и документации webdriver и сильно модифицирован методом научного тыка. Но он работает!
Теоретически вы можете просто скопипастить код в свои тесты, не разбираясь в нём, но давайте заглянем в него на секунду.
Почему мы делаем это в строках 11–15? Причины скрыты туманом опыта. Не стесняйтесь копипастить — никаких гарантий не прилагается, но я использовал этот код некоторое время, и проблем не возникало.
Приступим к тестам
Мы закончили настройку — пришло время взглянуть на код, который использует webdriver для управления браузером и тестирования нашего кода.
Разберём код по частям:
Пропустим установку, которую мы видели раньше, и перейдем к самой тестовой функции.
Код переходит к приложению и проверяет, что его название — «Calculator». Первую строку мы уже видели — мы открываем наше приложение с помощью драйвера. И не забываем дождаться окончания процесса.
Перейдём к строке 9. Здесь мы просим браузер вернуть нам заголовок (используем await для ответа, потому что это асинхронно), а в строке 10 мы проверяем, что заголовок title имеет корректное значение.
Поиск элементов
Дальше, к следующей части теста!
В строке 10 с помощью метода getText() мы получаем содержимое элемента и проверяем его. Помните, что нужно дожидаться ( await ) выполнения всех методов!
Пользовательский интерфейс
Настало время тестировать наше приложение — нажимать на цифры и операторы и проверять результат операций:
Выполнение всех тестов
Итак, у нас есть E2E-тесты и юнит-тесты, запустим их с помощью npm test :
Джеймс Славет: Что такое Е2Е бизнес?
Термины B2C и B2B появились фактически вместе с интернетом. Но в последние годы возникло новое предпринимательское движение, которое сейчас резко пошло в гору. Я называю его Е2Е, то есть «end to end». Компании E2E сосредоточены на интересах конечных пользователей: с помощью самого современного софта они объединяют людей, которые хотят получить или предоставить различные услуги. Это очень удобный онлайновый сервис для реального, оффлайнового мира.
Всегда считалось, что фундаментальным качеством идеального стартапа в Силиконовой долине является способность к быстрому, масштабному росту. Команда из 10 человек создала продукт для 10 миллионов? Вот это то, что надо. Но иногда наступают времена, когда требуются проекты, которые невозможно масштабировать, когда старомодное человеческое внимание к интересам конкретного клиента превращается в ключевой элемент общего уравнения. Качество обслуживания становится столь же важным как качество кода. Алгоритмы могут устареть, срок патента закончится, но репутация компании с качественным сервисом никуда не денется.
Е2Е меняет сферу услуг
Сфера услуг – это главный двигатель нашей экономики. И этот сектор ожидает существенная трансформация под воздействием растущих компаний Е2Е. Лучшие из них (как правило, это новички, которые были задуманы как Е2Е бизнес с самого начала) станут ключевыми брендами для следующего поколения потребителей.
Особая система контроля за качеством работы агентов помогает Redfin создать уникальное предложение на рынке. Например. У всех агентов Redfin есть рейтинги, которые им присваивают клиенты. Эти рейтинги любой может увидеть на сайте агентства. И размер дохода агентов зависит именно от этих рейтингов, а не суммы сделок.
Все агенты имеют доступ к специальному программному обеспечению, которое помогает им правильно подобрать недвижимость, а также наиболее точно определить цену покупки или продажи. Сейчас Redfin инвестирует деньги в новый софт и создает систему логистики на местах, что позволит организовать «мгновенные просмотры», так что заказ просмотра квартиры или дома станет таким же простым делом как заказ такси.
Другие ведущие Е2Е компании, например, Airbnb и Über, работают по принципу онлайн-рынков (marketplace business models). Они не нанимают поставщиков услуг и, тем не менее, расходуют значительные средства на улучшение качества обслуживания, стремясь сделать его самым лучшим. Airbnb предлагает бесплатные услуги профессиональных фотографов тем, кто хочет сдать с помощью компании свою квартиру, а работу ее круглосуточной горячей линии обеспечивает разветвленная сеть агентов по всем миру. Именно инвестиции в качество обслуживания стали основой успеха Airbnb. «Если бы я делал все заново, я бы не давал компании расти так быстро», – признался однажды СЕО и со-основатель Airbnb Брайн Чески.
Другие крупные сегменты сферы услуг – образование, здравоохранение, финансы – также существенно преобразятся под воздействием Е2Е движения. Например, вместо того чтобы сидеть в обшарпанном зале какого-нибудь местного дома культуры на лекции второсортного профессора, вы можете включить iPad и попасть в интерактивный класс к одним из лучших в мире преподавателей.
Или, например. В два часа ночи вашему трехлетнему ребенку стало плохо. Вместо того чтобы в панике нестись в больницу, вы можете включить компьютер и получить быструю онлайн-консультацию у хорошего врача.
И, наконец, если вы не хотите сами заниматься инвестированием своих денег, но точно также не хотите платить каждый год 1% от стоимости своих активов какому-то дяде просто за то, чтобы он иногда приглашал вас поиграть в гольф, тогда вот вам отличное и недорогое Е2Е решение этой проблемы.
Почему Е2Е компании вдруг начали расти?
Интернет существует уже давно, а сфера услуг еще дольше. Но почему именно сейчас Е2Е бизнес начал так бурно развиваться?
Во-вторых, многие из лучших предпринимателей последнего десятилетия – Джобс, Безос, Брэнсон, Маск – не ограничивали себя созданием веб-сайтов и написанием мобильных приложений. Они построили великие компании, ориентированные на потребности клиентов в реальном мире, и именно их деятельность служит источником вдохновения для нового поколения предпринимателей.
Взгляд инвестора на E2E
Компании E2E не привлекут сотни миллионов пользователей всего за пару-тройку лет как Youtube, Instagram или Snapchat. И вряд ли в ближайшем будущем их захотят купить Google, Facebook или Twitter. Когда на недавней встрече с инвесторами гендиректора Redfin Гленна Келмана спросили, кто, по его мнению, является наиболее логичным покупателем его бизнеса, он задумался, улыбнулся и сказал: «Никого у нас пока нет». Компании E2E – это не для всех.
И всё же лучшие из E2E компаний имеют невероятный потенциал стоимости для клиентов, персонала и акционеров. Ими будут руководить харизматичные СЕО. Они будут атаковать устоявшиеся, крупные рынки. Они будут сосредоточены на качестве обслуживания. Они будут великолепно управляться. Их будет невозможно остановить. И они будут расти, расти и расти.
Автор – Джеймс Славет, партнер венчурной фирмы Greylock Partners, которая является инвестором компаний Airbnb и Redfin
Что такое сквозное шифрование (E2EE)?
Вступление
Природа современных цифровых коммуникаций такова, что мы редко взаимодействуем с адресатами напрямую. Может показаться, что вы и ваши собеседники обмениваетесь сообщениями приватно, однако в действительности сообщения передаются через центральный сервер и могут на нем храниться.
Конечно, вы не хотели бы, чтобы ваши сообщения читал сервер, ответственный за их передачу между вами и получателем. Тогда решением для вас может стать сквозное шифрование (или E2EE).
Прежде чем рассказать, зачем вам может понадобиться E2EE и как оно работает, давайте посмотрим, как передаются незашифрованные сообщения.
Как передаются незашифрованные сообщения?
Давайте рассмотрим то, как устроена обычная платформа обмена сообщениями для смартфонов. Вы устанавливаете приложение и создаете аккаунт, который позволяет вам общаться с другими пользователями, которые сделали то же самое. Вы пишете текст и вводите никнейм получателя, а затем отправляете сообщение на центральный сервер. Сервер видит, кому вы адресовали сообщение, и пересылает его адресату.
Взаимодействие пользователей А и В. Чтобы обмениваться сообщениями друг с другом, они должны передавать данные через сервер (S).
Скорее всего, вы знакомы с моделью “клиент-сервер”. Клиент (ваш телефон) обладает ограниченной функциональностью – основные вычисления производятся на сервере. Это также значит, что сервер является посредником между вами и получателем.
Как работает сквозное шифрование?
Сквозное шифрование гарантирует, что никто – даже сервер, который соединяет вас с другими пользователями – не может получить доступ к вашим данным. Речь идет о чем угодно: от обычного текста и электронных писем до файлов и видеозвонков.
Как работает обмен ключами в протоколе Диффи-Хеллмана?
Идея обмена ключами Диффи-Хеллмана была предложена криптографами Уитфилдом Диффи, Мартином Хеллманом и Ральфом Мерклом. Это ставший революционным криптографический протокол, по которому стороны могут генерировать общий секретный ключ в открытой уязвимой среде.
Другими словами, генерация ключа может происходить на небезопасных ресурсах (даже при возможном прослушивании канала) без ущерба для последующих сообщений. В век информации это особенно ценно, поскольку сторонам не нужно физически обмениваться ключами для связи.
Сам обмен заключается в использовании случайных больших чисел и криптографической магии. Мы не будем вдаваться в подробности. Вместо этого воспользуемся популярной аналогией с красками. Предположим, что Алиса и Боб находятся в разных гостиничных номерах на противоположных концах коридора и хотят использовать вместе краску определенного цвета. Они не хотят, чтобы кто-то еще знал, какую именно.
К сожалению, этаж находится под наблюдением шпионов. Предположим, что Алиса и Боб не могут входить в комнаты друг друга, поэтому могут взаимодействовать только в коридоре. В коридоре они могут выбрать общую краску, например, желтую. Затем они берут банку с желтой краской, отливают себе часть и возвращаются в комнаты.
В своих комнатах им нужно подмешать в желтую краску секретный цвет – такой, о котором никто не знает. Алиса использует синий, а Боб – красный. Важно, что шпионам эти секретные цвета неизвестны. Теперь Алиса и Боб выходят из комнат со своими сине-желтыми и красно-желтыми смесями – результат смешивания известен шпионам.
Алиса и Боб меняются смесями в открытую. Неважно, что шпионы это видят – они не могут определить точный оттенок добавленных цветов. Помните, что это всего лишь аналогия – настоящая математика, лежащая в основе этой системы, делает еще труднее подбор секретного “цвета”.
Алиса берет смесь Боба, Боб берет смесь Алисы, и они снова возвращаются в комнаты. Теперь они еще раз подмешивают свои секретные цвета.
В обеих комбинациях одинаковые цвета, поэтому они выглядят одинаково. Алиса и Боб успешно получили уникальный цвет, неизвестный шпионам.
Обмен сообщениями
Неважно, являетесь ли вы хакером, оператором связи или даже представителем правоохранительных органов. Если приложение действительно использует сквозное шифрование, любое перехваченное сообщение будет выглядеть непонятным набором байт.
Достоинства и недостатки сквозного шифрования
Недостатки сквозного шифрования
У сквозного шифрования есть только один недостаток, и будет ли он недостатком вообще, полностью зависит от вашей точки зрения. Для некоторых ценность E2EE неактуальна именно потому, что нельзя получить доступ к сообщениям без соответствующего ключа.
Противники утверждают, что E2EE могут использовать преступники, зная, что правительства и технологические компании не cмогут расшифровать их сообщения. Они считают, что законопослушным людям не нужно хранить в секрете свою переписку и телефонные звонки. Это мнение разделяют многие политики, лоббируя законодательство, по которому будет возможно использовать бэкдоры для доступа к коммуникациям граждан. Конечно, это противоречит цели сквозного шифрования.
Стоит отметить, что приложения, использующие E2EE, не защищены на 100%. Сообщения зашифрованы при передаче между устройствами, но доступны на конечных точках – например, на ноутбуке или смартфоне. Само по себе это не является недостатком сквозного шифрования, но о нем стоит помнить.
Сообщение находится в открытом виде до и после расшифровки.
E2EE гарантирует, что никто не может прочесть ваши данные в процессе передачи. Но все еще актуальны другие угрозы:
Другой риск заключается в том, что кто-то может получить доступ к каналу между вами и вашим собеседником, реализовав атаку “человек посередине”. Это может произойти в начале общения – когда вы выполняете обмен ключами, то не можете быть уверены в подлинности второй стороны. Таким образом, сами того не подозревая, вы можете разделить секрет со злоумышленником. Злоумышленник получает ваши сообщения и имеет ключ для их расшифровки. Он может аналогично обмануть и вашего собеседника, что означает, он сможет передавать сообщения, читать и изменять их по своему усмотрению.
Чтобы избежать такой атаки, многие приложения реализуют различные коды безопасности. Это строка чисел или QR-код, которыми вы можете поделиться со своими контактами через безопасный канал (в идеале оффлайн). Если числа совпадают, то вы можете быть уверены, что третья сторона не отслеживает ваше взаимодействие.
Достоинства сквозного шифрования
Неверно рассматривать E2EE средство, полезное только для преступников и информаторов. Доказано, что даже самые, казалось бы, безопасные компании уязвимы для кибератак, в результате чего незашифрованная информация о пользователях становится доступной злоумышленникам. Доступ к пользовательским данным, таким как конфиденциальные сообщения или документы, удостоверяющие личность, может иметь катастрофические последствия для жизни людей.
Заключение
В дополнение к замечаниям выше стоит сказать, что растет количество свободно распространяемых инструментов для сквозного ширования. В комплекте с операционными системами iOS и Android идут соответственно Apple iMessage и Google Duo, при этом появляется все больше программного обеспечения, ориентированного на конфиденциальность и безопасность.
Про пользу E2E тестирования
В пирамиде тестирования End-to-End (E2E) тесты занимают одну из верхних ступеней. Написав один E2E тест, можно быть уверенным в результатах работы логики приложения, проверить интеграции с другими системами и создать «контракт» для вашего приложения.
К сожалению, многие из коллег, с которыми я работал, не писали E2E тесты. Отчасти потому что с головой ушли в модульное тестирование и посчитали, что оно лучше по ряду причин, включая моду на TDD. Отчасти потому что верили, что E2E тесты сложно писать, они долго исполняются, да и с инструментарием есть проблемы.
Разберемся с этими мнениями и посмотрим на плюсы, которые предлагает E2E тестирование.
Терминология
Под E2E тестами положим вид автотестов. Эти автотесты должны покрывать все функции сервиса с точки зрения клиента. Добиваются они этого, симулируя реальное взаимодействие клиента, будь это HTTP-запрос или нажатие на кнопку в UI.
Подход модульного тестирования лучше
Написание модульных тестов, по моему опыту, занимает куда больше времени, чем E2E тестов. Да, на первых порах придется разобраться как E2E тесты лучше писать, но ведь то же было верно и для модульных тестов.
Зато, в результате один E2E тест покрывает больше кода, чем один Unit-тест, хотя может занимать меньшее количество строк по сравнению с аналогичным модульным test suite.
Можно не тратить время на понимание того, как правильно мокировать зависимости, ведь ими становятся в E2E тестах внешние системы, а взаимодействие с тестируемым сервисом строится по принципу «черного ящика».
Не нужно проверять все граничные условия для отдельного метода класса. Это повышает гибкость работы с кодом, так как нет необходимости рефакторить весь test suite при малейшем изменении внутренней логики работы приложения.
Невозможно попасть в ситуацию, когда ты боишься выкинуть старый код, потому что придется пройтись по набору из 100 модульных тестов (написанных даже не тобой), которые так или иначе были завязаны на этот код.
Инструментарий и скорость прогона тестов
На сегодняшний день большинство backend-разработчиков пишут сервисы, представляющие API с помощью HTTP (возможно GraphQL) или некоторым подобием MQ. В таком случае достаточно обычного клиента HTTP, доступного в большинстве mainstream ЯП.
Frontend-разработчики пишут, в основном, для Web-платформ (браузеров) или для мобильных в виде нативных приложений. Тут ситуация немного сложнее, так как инструментарий требует более детального изучения, но не дольше любого остального инструмента, с которым Вам придется столкнуться при разработке приложений.
E2E тесты действительно требуют в среднем больше времени для прогона, нежели модульные. При этом они завязаны на скорость работы Вашей системы. Т.е. они становятся метрикой производительности отдельных операций. При необходимости, они могут просто преобразовываться в нагрузочные тесты.
Дополнительные плюсы E2E тестирования
Каждый отдельный тест покрывает реальный сценарий использования приложения и дает куда больше понимания другим разработчикам, в том числе и будущим, как именно и зачем все это работает.
По результатам работы Вы получаете «настоящий» code-coverage. Если есть код и его невозможно исполнить, выполняя клиентские запросы в реальном окружении, то, скорее всего, это лишний код. Если он проверяет граничные условия или ловит маловероятный exception, задумайтесь, возможны ли такие условия в принципе?
В целом, использование только E2E тестирования для приложения заставляет задуматься об упрощении структуры Вашей системы и улучшения документации.
E2E тесты могут использоваться как контракты API и взаимодействия с Вашим сервисом. К примеру, для backend, как только Ваш E2E тест меняется, необходимо убедиться, что frontend будет готов к таким изменениям.
Заключение
В целом, на мой взгляд, E2E тестирование предоставляет большие гарантии корректной работы системы, чем unit-тесты, большую гибкость в работе с кодом с точки зрения рефакторинга и отражает реальную суть работы приложения.
Спасибо Вам за внимание! А как Вы считаете, можно ли использовать только E2E тесты?