Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) Автоматическое тестирование 1С 8. С чего начать. (число прочтений - 10848 )
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Автоматическое тестирование 1С 8. С чего начать.
18. Ноября 2011 :: 06:48
Печать  
А может кто-нибудь описать механизм всего этого для тех, кто вообще автоматическим тестированием никогда не пользовался?
Если сделать несколько конкретных примеров для УТ под 8.2 было бы вообще супер.
« Последняя редакция: 25. Ноября 2011 :: 06:38 - trad »  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #1 - 24. Ноября 2011 :: 12:36
Печать  
Мне интересны какие-то бызовые механизмы и средства. Конкретно сейчас интересен вот такой случай:
Есть база с абонентами, которым предоставляются некие услуги и за эти услуги начисляются суммы по определенным алгоритмам.
Я хочу создать некую базу-шаблон с заполнеными абонентами, которые бы покрывали большенство вариаций расчетов начислений по услугам.
Т.е. я создаю Иванова с такими-то параметрами и точно знаю, что за Январь ему должно начислиться такие-то суммы.
Конфа активна правится. Далее, я накатываю её на эту "тестовую" базу и запускаю сформированные каким-то образом мои тесты, которые проверяют верность начислений.
Вот, пока хотя бы вот такое понять как делают умные люди.

Я так понимаю тестирование форм (нажатие определенных кнопок, выбор определенных элементов, т.е. эмуляция интерактива) невозможна в принципе. И оттестировать можно как бы только "код".

И хочу посмотреть подобный пример на какой-нить типовой, если возможно.
  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #2 - 24. Ноября 2011 :: 15:14
Печать  
JohnyDeath писал(а) 24. Ноября 2011 :: 12:36:
абонентами, которые бы покрывали большенство вариаций расчетов начислений по услугам.


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

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


Цитата:
Я так понимаю тестирование форм (нажатие определенных кнопок, выбор определенных элементов, т.е. эмуляция интерактива) невозможна в принципе. И оттестировать можно как бы только "код".


Ну почему же. Например, я использую TestComplete. Одна из проблем здесь в том, что невозможно считать свойства контролов, т.к. в восьмерке 1С использует свои, никому неизвестные, контролы. Поэтому, приходится выкручиваться - доставать значения полей через OLE.
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #3 - 24. Ноября 2011 :: 17:07
Печать  
Спасибо за ответ.
Я себе все примерно так же и представлял. Но мне интересно как конкретно это происходит, желательно с примером.
Прям как для отсталых:
1. Берем последнюю обработку из данной ветки
2. Что-то создаем
3. Куда-то прикрепляем
4. Создаем таблицы-наборы ожидаемых данных
5. Куда-то прикрепляем
6. что-то еще шаманим.
Нажимаем и ждем чего-то

Можно пример?
  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #4 - 24. Ноября 2011 :: 17:16
Печать  
Ну тут я не в курсе. Авторы/пользователи сабжа, наверно, подскажут.
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #5 - 24. Ноября 2011 :: 17:36
Печать  
Ну а как делаешь ты? Неужели каждый новый тест - это отдельная обработка, где жестко кодом прописано абсолютно всё?
  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #6 - 24. Ноября 2011 :: 17:38
Печать  
У нас в конторе своя разработка. В отдельной базе хранятся тесты в виде обработок.
Что тебя удивляет?
  
Наверх
ICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #7 - 24. Ноября 2011 :: 17:55
Печать  
JohnyDeath писал(а) 24. Ноября 2011 :: 17:07:
Спасибо за ответ.
Я себе все примерно так же и представлял. Но мне интересно как конкретно это происходит, желательно с примером.

...

Можно пример?


Жень. Ты почти хочешь невозможного.  Смущённый Примеры они очень конкретные.

Но я попробую:

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

то есть (по сабжу)

0. У меня есть типовая/чужая конфигурация
0.1 Я решил добавить реквизит "Ромашка" к типовому Справочнику Тесть
1. я создаю тест в своем комплекте тестов ПроверитьСуществованиеРеквизитаРомашка()
2. запуская тестЫ - тесты падают: я же пока решил, а не добавил
3. Создаю реквизит Ромашка
4. запускаю тестЫ - тесты не падают

0. Я думаю что необходимо создать общий модуль РаботаСТестем и добавить туда функцию ПроанализироватьРомашкиТестей()
1. я создаю тест ПроверитьСуществованиеФункцииАнализРомашекТестей()
2. Прогоняю тестЫ: тесты падают - общего модуля нет, функции нет
3. создаю функцию.
4. прогоняю тесты - тесты не падают

0. я решил что функция анализРомашекТестя будет брать текущих Тестей и возвращать коллекцию Тестей с Ромашками или без Ромашек
0.1 прототип функции выглядит так ПроанализироватьРомашкиТестей(сРомашкей = Истина)
1. Пишу тест (последовательность)
1.1 Создать 20 элементов справочника Тесть с реквизитом Ромашка = Истина
1.2 Создать 30 элементов справочника Тесть с реквизитом Ромашка = Ложь
1.3.1 Тест - ПроверитьКоличествоТестьСРомашкой() = 20
1.3.2 Тест - ПроверитьКоличествоТестБезРомашки() = 30
1.4 Очистить справочник Тесть

и т.д.

P.S. когда мы около 1.5 года назад встречались с Федором - он мне сказал что библиотеку тестирования можно  "в принципе" написать под любую платформу, так как Workflow известен for each Test {preTest->test->afterTest}. Однако практика несколько сложней: что тестировать, как тестировать, что есть данные теста, а что есть данные настройки системы в целом - короче чем дальше в тестирование, тем толще партизаны.


P.S.S. Жень - для начала попробую простые вещи: загрузи cf в чистую базу, создай обработку которую назови тестирование: в ней создай три процедуры ПередТестом() Тест() ПослеТеста()

процедуру Тест() повесь на кнопку - ты будешь смеяться кнТест

код процедуры кнТестНажатие

Цитата:
ПередТестом()
Попытка
Тест()
ПослеТеста()
Исключение
Попытка
  ПослеТеста()
исключение
 ВызватьИсключение(""Ошибка очистки данных теста" + ОписаниеОшибки())
КонецПопытки
ВызватьИсключение(ОписаниеОшибки())
КонецПопытки



а в процедуре Тест() - попробуй сразу создай абонента "кодом", создай ему начисления, запусти расчет и проверь на ожидаемую сумму.

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


P.S.S.S. Непонятно написал.... Торопился.

  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #8 - 24. Ноября 2011 :: 18:53
Печать  
Палыч писал(а) 24. Ноября 2011 :: 17:38:
У нас в конторе своя разработка. В отдельной базе хранятся тесты в виде обработок.
Что тебя удивляет?

Я просто никогда с этим не сталкивался, но задумываюсь всё чаще.
Мне в очень грубом первом приближении видится что-то вроде некой обработки, в которой находится коллекция тестов. Каждый тест - это тест, созданный из шаблона теста. Шаблон - это некий набор входящих данных и связей, и ожидаемого результата (также набор данный в каком-либо виде, например ТЗ, таблица-моксель, соответствие и т.п.).

Но так как я ни разу не видел ничего подобного в действии, то скорее всего мои мыли - это просто плод союза фантазии, хотелок и лени. Поэтому очень хочется увидеть реальный пример.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #9 - 24. Ноября 2011 :: 19:27
Печать  
lustin писал(а) 24. Ноября 2011 :: 17:55:
...
P.S.S.S. Непонятно написал.... Торопился.

Алексей, спасибо! У тебя всегда очень красиво получалось объяснить "непонятное" понятным языком.
Немного даже стало проясняться.

Вопрос ко всем использующим инструменты автотестирования. С чего вы начинали? Как бы так въехать, чтоб не наступать на грабли и не изобретать велосипедов.
Ну и от примера я так и не отказываюсь Подмигивание Да, понимаю, что у всех специфичные конфы, но может кому-нибудь удасться смоделировать проблему и решить её на основе УТ.

Вот например есть задача для УТ: В документ "Реализация" добавить флаг "СуперЦена", при установке которого товару из ТЧ с максимальной ценой проставлялась бы цена по след. формуле:
НоваяЦена = Средняя цена товара с минимальной ценой из данной ТЧ за последние 5 месяцев, но не далее чем с начала года  Очень довольный

+ если копейки от общей стоимости заказа совпадают с четвертым и пятым числом из ИНН покупателя, то скидка составляет 50 % (применяется однократно, чтоб не попали в бесконечный цикл )) )

Т.е. есть у меня документ от 03.03.2011, где в ТЧ есть следующее:
1. Хлеб - 2 р.
2.  Батон - 5 р.
3. Пирожок - 4 р.
(все товары по 1 шт.)

МаксЦенаТЧ: Батон = 5 р.
МинЦенаТЧ: Хлеб = 2 руб. Нам нужно взять среднюю цену хлеба за последние пять месяцев, но не раньше начала года. В данном случае нужна средняя цена с промежутка 01.01.2011 по 03.03.2011. Допустим получили = 1,5 руб.

Т.о. при проведении в регистр хлеб упадет стоимостью = 1,5 руб. Все остальное как и предполагалось.
Далее. Общаяя стоимость по чеку получилась = 1,5 + 5 + 4 = 10,5 руб. Допустим, что у этого клиента 4-я и 5-я цифры ИНН равны ПЯТЬ и НОЛЬ соответственно. Т.е. клент еще попал и на 50-ти процентную скидку.
Итого он платит: 10,5 * 50% = 5,25 руб.
Со сжатыми губами

вот... не знаю, понял ли кто-нибудь поток моего бессознательного )

кто как подошел бы к тестированию этого "нового" функционала?
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #10 - 24. Ноября 2011 :: 20:21
Печать  
JohnyDeath писал(а) 24. Ноября 2011 :: 19:27:
lustin писал(а) 24. Ноября 2011 :: 17:55:
...
P.S.S.S. Непонятно написал.... Торопился.


вот... не знаю, понял ли кто-нибудь поток моего бессознательного )


оффТопик: несколько раз перечитал задачу, по тестированию попробую ниже описать чуть позже, но не мог не удержаться и не сказать вначале

"вот это у тебя комерцы отжигают"  Озадачен

P.S. Видимо для примеров тестов нужно какую-то тему/подфорум задать, а то придет fez и выскажет нам всем...
« Последняя редакция: 24. Ноября 2011 :: 21:48 - lustin »  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #11 - 25. Ноября 2011 :: 04:14
Печать  
Я вообще с торговлей не связан, это просто фантазия разыгралась  Улыбка
Да, отдельную тему можно, но боюсь, что туда никто не зайдет.
  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #12 - 25. Ноября 2011 :: 04:26
Печать  
JohnyDeath писал(а) 24. Ноября 2011 :: 19:27:
Вопрос ко всем использующим инструменты автотестирования. С чего вы начинали? Как бы так въехать, чтоб не наступать на грабли и не изобретать велосипедов.


Дык, с теории начинали.
Вот, например, этот сайт оказался для меня очень полезен: http://software-testing.ru.

  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #13 - 25. Ноября 2011 :: 04:45
Печать  
Вот мой шаблон для создания любой обработки, основанной на тестировании.
Цитата:
// основная процедура для юнит-тестирования SnowTest
Функция ПолучитьСписокТестов() Экспорт
     Результат = Я_Тест.Новый_НаборТестов();
     
     Я_Тест.НаборТестов_Добавить(Результат, "Тесты_<?>");
     
     Возврат Результат;
КонецФункции

// ======================= ======================= ======================= =======================
//
// БЛОК ЮНИТ-ТЕСТОВ - сами тесты
//
// ======================= ======================= ======================= =======================

Процедура Тесты_() Экспорт
КонецПроцедуры

// ======================= ======================= ======================= =======================
//
// КОНЕЦ БЛОКА ЮНИТ-ТЕСТОВ
//
// ======================= ======================= ======================= =======================
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для затравки. Юниттестирование на восьмерке. Очень сырой драфт.
Ответ #14 - 25. Ноября 2011 :: 04:47
Печать  
Вот простейший код для тестирования, который упадет.
Этот код помещаем в обработку, сохраняем ее.
Далее в Предприятии запускаем ЗапускТестов.epf и выбираем папку, в которой сохранили обработку.
Получаем пакет из 2-х тестов.
Нажимаем Выполнить, получаем один упавший тест и один прошедший тест.
Все просто
Цитата:
// основная процедура для юнит-тестирования SnowTest
Функция ПолучитьСписокТестов() Экспорт
     Результат = Я_Тест.Новый_НаборТестов();
     
     Я_Тест.НаборТестов_Добавить(Результат, "Тесты_Падает");
     Я_Тест.НаборТестов_Добавить(Результат, "Тесты_Успешно");
     
     Возврат Результат;
КонецФункции

Функция Получить(исходныеДанные) Экспорт
 Возврат исходныеДанные * 10;
КонецФункции

// ======================= ======================= ======================= =======================
//
// БЛОК ЮНИТ-ТЕСТОВ - сами тесты
//
// ======================= ======================= ======================= =======================

Процедура Тесты_Падает() Экспорт
 исходныеДанные = 1;
 Я_Тест.ПроверитьРавенство(ЭтотОбъект.Получить(исходныеДанные), 11, "описание ЭтотОбъект.Получить() == 11");
КонецПроцедуры

Процедура Тесты_Успешно() Экспорт
 исходныеДанные = 2;
 Я_Тест.ПроверитьРавенство(ЭтотОбъект.Получить(исходныеДанные), 20, "описание ЭтотОбъект.Получить() == 20");
КонецПроцедуры

// ======================= ======================= ======================= =======================
//
// КОНЕЦ БЛОКА ЮНИТ-ТЕСТОВ
//
// ======================= ======================= ======================= =======================

  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать