Как начать писать тесты без регистрации и СМС

Публикация № 1656933 11.05.22

Разработка - Тестирование QA

Тестирование QA TDD unit-тесты

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

Кому стоит читать дальше?

"Если вам нравится лепить вместе куски кода, которые более или менее работают, и вы счастливы думать, что вам не придётся возвращаться к полученному в результате этого коду в дальнейшем - TDD (разработка через тестирование) не для вас" (с) Кент Бек [c.339]

Сказ "Жил да был программист 1С"

Жил да был программист 1С. Жил себе не тужил, работал в одной сибирской компании. И вроде всё хорошо, но что-то не давало ему покоя. То нелепая ошибка в продуктиве вылезет, то данные как-то криво пишутся. И закручинился программист, потерял покой.  

Думал, думал, ничего не надумал и пошёл тропой серой да к мудрецам, на весь свет известным, старцам google да yandex. И рассказали они ему про явление небывалое, что в народе тестированием кличут. И возрадовался программист - "Вот оно, лекарство от кручины твоей".

Пошёл он к другому старцу, что в народе infostart кличут. И стал спрашивать у него программист, дескать, слышал я про явление небывалое, что в народе тестированием кличут. Расскажи, добрый человек, как мне его к своей разработке подвязать. И начал ему старец кучу терминов показывать: TDD, BDD, vannesa-behavior, vanessa-automation, add, xUnit, CI/CD и прочие.  

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

 

От сказки к реальности

Результатом размышлений и изысканий является одна простая мысль - для того, чтобы начать тестировать свой код, не нужно НИЧЕГО, кроме желания и среды разработки. И чтобы прийти к этой мысли, достаточно немного подумать о том, а что такое тест (в самом примитивном, простом смысле).

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

А если ещё упростить, то тест - это код, который проверяет работу кода.

Следовательно, "писать тесты" означает писать код, который будет проверять, как работает другой код. А теперь рассмотрим 2 практических примера на эту тему

 

Пример 1 - тестируем "привет, мир"

- Можно ли протестировать следующий код?

Сообщить("Привет мир");

В таком написании - можно, но не нужно. И вот почему:

  •  Цель теста - проверить работу собственного кода.  Задачи проверять работу системных методов или методов других разработчиков не стоит (разве что, если вы не уверены в корректности результата).

Вопрос, а что в этом коде написано разработчиком? Это сообщение "Привет, мир". Вот для него и можно написать тест.

 
 Шаг 1 - планируем тест
 
 Шаг 2 - делаем так, что тест проходил проверку и запускался
 
 Шаг 3 - Проводим рефакторинг, выделяя проверку в отдельный метод

 

Пример 2 - Тестируем формирование JSON

Это рабочая задача, которую я решал в марте и апреле 2022 года. Естественно, упрощённая. Итак, надо написать выгрузку  номенклатуры в JSON. Требуемый результат

{
code: "001"
}

 

Разработка без тестирования

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

 
 Обычный код выгрузки номенклатуры

Как проверяется этот код (если вообще проверяется)? Делается запуск внешней обработки и в режиме отладки начинаются исправления ошибок (алгоритм ручного тестирования пишу по памяти, извините)

  • Запуск 1 - вылетает ошибка "Не указан параметр запроса Ссылка"
    • Исправляем опечатку `"Сылка" -> "Ссылка"`
  • Запуск 2 - ошибка "поле code не найдено"
    • Исправляем, присваивая правильный псевдоним поля в запросе
  • Запуск 3 - ошибка "Ключ code не найден"?
    • [начинаем нервничать, ведь код-то простой вроде] Да как так-то? А вы случайно в ключе букву е русскую написали... блин, ладно исправляем
  • Запуск 4 - ошибки нет, но результат возврата - Неопределено
    • ДА ЧТО НЕ ТАК?! А функция `МагияПревращенияВJSON(ДанныеJSON)` ничего не возвращает (там забыли написать возврат)

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

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

Теперь посмотрим, как то же самое разрабатывается и проверяется через тестирование

 

Разрабатываем с использованием тестирования

Любая разработка с тестированием начинается с того, что составляется "План тестирования", проще говоря, нужно определиться с тем, что, собственно, тестировать. Под текущую задачу требуется, как минимум, четыре теста:

 
 Шаг 0 - Выписываем какие тесты нам нужны

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

Для проверки будем использовать уже написанную нами функцию Проверить() (см. пример 1).

 
 Шаг 1 - Пишем тест "Тест структуры формирования JSON"
 
 Шаг 2 - Пишем тест "Тест корректности результата МагияПревращенияВJSON(ДанныеJSON)"
 
 Шаг 3 - Пишем тест "Тест работоспособности запроса данных из БД"
 
 Шаг 4 - Пишем тест "Тест работоспособности заполнения данных структуры"
 
 Итоговый листинг

 

Польза от подобного подхода

1. Получилось, что запрос к БД, отделён от логики обработки запроса, а логика заполнения JSON, от логики отправки, другими словами код стал слабосвязанным

2. Алгоритм разбился на атомарные функции, выполняющее ровно 1 действие

3. Начинает формироваться понимание о том, а что же такое тестирование, что такое размер теста (шаг теста)

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

 

Заключение

Как видите, начинать свой путь в тестирование, в частности в unit-тестирование достаточно легко. Просто пишите код. Не обязательно в начале пути использовать доп. фреймворки и чужие разработки.

Основные преимущества подобного подхода:

- проделав это несколько раз руками - в голове начнётся складываться понимание, что это, зачем это и действительно ли это вам нужно

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

- идеолог движения Кент Бек также советует начинать ознакомление с попытки разработки своего фреймворка

Для тех, кто захочет копать дальше - полезные отсылки:

  •  подход, показанный в статье называется "test-driven development" или "разработка через тестирование".
  • Одним из идеологов данного подхода является Кент Бек, который написал книгу "Экстремальное программирование: разработка через тестирование" - очень советую к ознакомлению
    • и вообще читайте первоисточники, так картина знаний в голове будет более цельной.
  • После первичного погружения в тему, вам возможно не захочется возиться со своим фреймворком дальше, а взять уже готовый. Пока я могу отослать вас к четырём различным инструментам:

И напоследок личное мнение. Я не советую начинать с BDD, ибо этот подход имеет гораздо более высокий порог вхождения и может поначалу тяжело заходить в голову, что, в свою очередь, может запросто лишить мотивации к дальнейшему погружению в тему. К нему стоит обратиться уже после того, как вы освоились в unit-тестировании, упёрлись в его границы и хотите большего. Или когда внедряете полноценное тестирование продукта в команду. Но это тема отдельной статьи.

На этом у меня всё, большое вам спасибо за прочтение.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Steelvan 281 11.05.22 10:26 Сейчас в теме
2. mixsture 17.05.22 15:01 Сейчас в теме
Все хорошо в тестировании, но основная боль в том, что код в 20 строчек превратился в 3 страницы. И ведь это пока что unit тесты - одни из самых малозатратных в написании. Кроме самого времени на декомпозицию и кодинг (с не такими уж простымим концепциями замены реальных объектов mock-версиями) - возможные баги в 20 строчках кода обогатились возможными багами коде тестирования. Соответственно, встает вопрос - за чей счет этот банкет?
3. zeltyr 409 17.05.22 19:22 Сейчас в теме
(2) О, это дискуссия о которую уже сломано множество копий. И ответ, в среднем, примерно следующий (он, кстати, есть в книге того же Кента Бэка), далее выдержка из его книги
Сколько нужно тестов?
- Чёткого правила нет. Выбирается исходя из собственного опыта и рассуждений
- Можно пробовать оценить приемлемое *среднее время между сбоями* (MTBF, Mean Time Between Failures). Если предполагаемая аномалия увеличивает MTBF кратно, значит имеет смысл уделить время разработке теста (даже если событие маловероятно, но возникновение которого приводит к такому увеличению)
- Когда тесты писать не нужно - тогда, когда знание особенностей реализации без какого-либо теста даёт уверенность в том, что код работает правильно

- Тесты - это средство достижения цели
- Цель: код, в корректности которого мы в достаточной степени уверены


Дополню некоторыми своими мыслями:
- когда ты учишься - тесты пишутся на всё - у меня, например, есть тесты, которые проверяют корректность созданных метаданных. Но это нормально на этапе входа и делается это на фанатизме, в том числе и в неучитываемое рабочее время.
- тесты - это автоматизация, а автоматизация это всегда хорошо.
- тесты облегчают повторные проверки модифицированных участков кода. Н-р: у нас идёт внедрение и требования к выгрузке той самой номенклатуры менялись несколько раз. Я вносил изменения в код, дописывал тесты и у меня автоматом проверялась вся выгрузка, ведь один раз написанные тесты сделают это за тебя. И именно так нашлись неучтённые мной косяки в коде, в том числе и в корректности заполнения полей выгрузки.
- по поводу "за чей счёт банкет" - это затратно только на этапе входа. Освоив какой-нибудь фреймворк и средства автоматизации запуска тестирования - замечаю, что время на разработку уходит не то, чтобы сильно больше, а может даже и меньше. А вот качество повышается очень и очень сильно.
- Ты начинаешь проводить больше времени в конфигураторе, а не в предприятии. Поясню. Я использую сейчас фреймворк xddRunner. Я написал логику и тесты, дальше я запускаю батничек, который прогоняет все тесты и запускает отчет в аллур. А я в это время возвращаюсь в конфигуратор и дальше пишу код. Я сам руками почти в режим предприятия не хожу, только для какой-то минорной отладки, что экономит мне время.

Это вот мои выводы после двух месяцев плотного погружения в разработку через тестирование. Мне понравилось, я втянулся и отказываться от этой практики пока не вижу смысла.
Cmapnep; milov.aleksey; +2 Ответить
4. Vovan58 54 13.05.23 12:12 Сейчас в теме
причем тут регистрация и СМС?
5. zeltyr 409 26.05.23 11:03 Сейчас в теме
(4) незатейливый солдатский юморок, не более
Оставьте свое сообщение

См. также

Тестер: частые вопросы

Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    33556    grumagargler    31    

168

Быстрый старт в тестировании на платформе 1С (Vanessa-ADD)

Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Если вы давно хотите освоить тестирование в мире 1С. Но не знали, с чего начать. Теперь знаете.

02.02.2023    8107    NikitaIvanchenko    28    

129

Интерактивная справка и помощник первого запуска Vanessa Automation

Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Недавно у нас появился помощник первого запуска и интерактивная справка

21.06.2022    2302    fenixnow    0    

45

Тестирование - игровое моделирование

HighLoad оптимизация Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Мы рассмотрим подход к тестированию с применением элементов искусственного интеллекта

25.04.2022    1648    ivanov660    0    

15

Hello world в Vanessa-ADD bddRunner

Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Минимальный пример на Vanessa-ADD bddRunner без теории. При написании использовались: 1С 8.3.10.2753, Vanessa add 6.6.5.

24.02.2021    1657    kirinalex    0    

12

Практика применения DevOps. Тестирование

Тестирование QA Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В третьей части мастер-класса «Практика применения DevOps» на конференции Infostart Event 2019 Inception выступила Светлана Попова. Она рассмотрела возможности использования двух инструментов тестирования от фирмы «1С» – «Сценарного тестирования» и связки СППР и Vanessa Automation, и рассказала про плюсы и минусы каждого из этих вариантов.

11.12.2020    7704    SvVik    0    

50

Тестирование серверного поведения с Vanessa Automation

Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Обзор модуля "ИнициаторДанных" (версия VA 1.2.034), пример скрипта

14.09.2020    4499    unichkin    18    

25

Vanessa, видеоинструкции для web-клиента

Тестирование QA Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Vanessa-Automation. Использование видеоинструкций в web-клиенте.

01.06.2020    4980    SvVik    3    

29

Молчание "best practices": тестовые и эталонные данные, структура и связность, падения и новая функциональность, и другие неудобные вопросы к сценарному тестированию

Рефакторинг и качество кода Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Непонимание некоторых базовых вопросов мешает программистам начать применять инструменты тестирования в процессе разработки для 1С. Как разобраться в терминологии и интегрировать процесс тестирования в разработку 1С-решений на конференции Infostart Event 2019 Inception рассказал руководитель отдела разработки компании C.T.Consultants Решитко Дмитрий.

29.05.2020    6921    grumagargler    14    

49

Тестирование: Отлаживаем и тестируем REST интерфейс 1С с помощью SoapUI

Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Рассмотрим быстрый и удобный способ облегчения разработки и отладки REST, SOAP веб сервисов, а также создания автоматизированных тестов.

03.02.2020    8890    ivanov660    4    

71

Vanessa, улучшаем инструкции

Тестирование QA Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Vanessa Automation умеет делать хорошие инструкции, давайте посмотрим, какие инструменты для этого есть.

30.10.2019    13369    OPM    12    

86

Vanessa Automation + СППР

Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Vanessa Automation. Использование автоматизированного тестирования в СППР.

07.11.2019    20352    SvVik    15    

141

Vanessa, хочу все и сразу

Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Vanessa Automation это инструмент для тестирования прикладных решений на платформе 1С, но он/она может больше, чем только тестирование.

11.10.2019    19562    OPM    36    

156

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

Тестирование QA Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Инструменты не панацея - главное подход эффективный.

13.08.2019    5059    kuzyara    7    

19

Автоматизация тестирования с помощью WinAutomationUI

Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Рассматривается использование инструмента WinAutomationUI для создания автоматизированных сценарных тестов на примере 1 + 1 = 2.

11.12.2018    8123    AlexKo    30    

29

Новичок в TDD

Тестирование QA Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Краткие итоги первых шагов при разработке в 1С через TDD.

08.10.2018    12961    Alligator84    86    

65

Проблемы с запуском TestClient. "Ошибка сетевого взаимодействия при вызове"

Тестирование QA Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

При выполнении кода автоматического тестирования появляется ошибка "Ошибка сетевого взаимодействия при вызове"

05.07.2018    6774    chugada    3    

3

xUnitFor1C - набор инструментов для выполнения тестирования (модульного/юнит, приемочного, сценарного для 1С 8.3, интеграционного) в 1С:Предприятии 8

Тестирование QA Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

xUnitFor1C - простой и мощный фреймворк для тестирования в 1С. Позволяет тестировать в разных режимах обычное приложение, тонкий и толстый клиент управляемого приложения. Поддерживаются любые платформы 1С - от 8.2.17 до 8.3.5 и выше. Любые наборы тестов могут прогоняться в полностью автоматическом режиме. Автозапуск используется в различных build-серверах в системах Continuous Integration. Также возможно очень простое создание тестовых данных на основании табличных макетов. Эти макеты можно генерировать из реальных боевых данных. Полученные данные в тестах загружаются одной строкой кода. В статье я кратко описал историю продукта + вставил небольшое описание различных возможностей нашего фреймворка + список полезных статей/примеров/видео, обучающих/рассказывающих о практическом применении инструмента

13.11.2015    50728    artbear    53    

216

Простая отладка внешних обработок

Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Простой способ, упрощающий отладку внешних обработок, печатных форм и тд. ВНИМАНИЕ! Данный метод НЕ работает в режиме работы "Управляемое приложение"! Статья актуальна только для режима "Обычное приложение"

22.10.2013    70193    EvilDoc    69    

71

Опыт практического применения методики BDD на 1С. Написание сценариев

Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Эта статья открывает цикл публикаций, в которых я хочу поделиться опытом использования методики BDD при разработке на 1С. В этой статье речь пойдёт о написании сценариев.

03.07.2016    27031    oleynik.dv    131    

135

Как протестировать неэкспортные процедуры модулей

Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Процедура для доступа к внутренним методам модуля без нарушения инкапсуляции.

17.11.2015    14619    json    30    

19

Автоматизированное тестирование в 8.3

Тестирование QA Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной статье будет рассмотрен новый механизм системы "1С:Предприятие 8" поддерживаемый начиная с платформы версии 8.3. Механизм позволяет легко и быстро создавать различные сценарии тестирования, без необходимости написания сложных процедур и функций для имитации действий пользователя.

06.03.2014    74128    M.Shalimov    47    

196

Неблагодарное это дело – выдавать сообщения об ошибках

Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Методика формирования и выдачи сообщений об ошибках. Описывается способ работы над ошибками в данных, прилагается программный код. Приводятся примеры.

28.09.2013    6576    pakill    16    

25

Низкоуровневая отладка веб-клиента 1С

WEB-интеграция Тестирование QA Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Метод позволяет заглянуть внутрь веб-клиента 1С вплоть до исходных кодов и запустить отладку кода, написанного программистами 1С. Отладка JavaScriptпомогла разобраться с тем, какие преобразования делает 1С с html-кодом, помещенным в Поле HTML документа.

09.06.2013    23364    Elisy    38    

33

TestIB8x - 0003 - Безопасный код - Option Explicit - первая реализация

Тестирование QA Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Был момент, когда захотелось задвинуть этот тест подальше, т.к. в Платформе 8.х защита от небрежного кодирования проработана хорошо. Достаточно перестать использовать экспортные переменные уровня приложения, внешнего соединения и переменные уровня модуля. После этого можно "клепать" код, даже не вымыв перед этим руки и не промыв мозги Ж-). Спасибо, комментариям на прошлое обсуждение и нескольким письмам на мыло - сподвигли на завершение начатого. Тест получился большой - более 900 строк на JScript, но кое-какие моменты все-таки остались ...

16.01.2008    9788    brix8x    3    

0