35
FitNesse in Development Манушин Игорь, Viacode LLC

FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

FitNesse  in  Development

Манушин  Игорь,  Viacode  LLC  

Page 2: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Правила

• Вопросы  желательно  задавать  в  конце  • Цифра  в  конце  названия  разделяет  разные  слайды  с  единой  темой  

FitNesse  in  Development   2  

Page 3: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Где  применялось?  (1)

FitNesse  in  Development   3  

Обработка  процессов  

База  данных  

Web  сайт  

Page 4: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Где  применялось?  (2)

4  FitNesse  in  Development  

Page 5: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

FitNesse  in  Development   5  

Где  применялось  (3)

Page 6: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Где  применялось?  (4)  

6  

Обработка  процессов  

База  данных  

Web  сайт  

Автотесты  

FitNesse  in  Development  

Page 7: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

FitNesse  (1)

• Интеграционное  тестирование  • Первая  версия:  2003  год,  Роберт  Мартин  (на  основе  проекта  fit)  • Wiki  разметка  для  тестировщиков  • Свободный  выбор  языка  программирования  для  разработчиков  

7  FitNesse  in  Development  

Page 8: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

FitNesse  (2)

8  FitNesse  in  Development  

Page 9: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

FitNesse  (3)

9  FitNesse  in  Development  

Page 10: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

FitNesse  (4)

10  FitNesse  in  Development  

Page 11: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

FitNesse  (5)

11  FitNesse  in  Development  

Page 12: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Как  он  устроен?

• КАРТИНКА  

12  

QA  

FitNesse  on  Java  

Runner  on  .Net  

Code  on  .Net  

Dev  

FitNesse  in  Development  

Page 13: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Пример  кода

• |  ‘’’  login  as  ‘’’  |  DonJoe  |  • |  ‘’’  create  company  ‘’’  |  Example  |  

13  

login  as   DonJoe  

create  company   Example  

public  bool  LoginAs(User  userName)                  {                          /*...*/                  }  

Wiki  

Html  

C#  

FitNesse  in  Development  

Page 14: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Начало  -­‐  без  тестов

• Environment  настроен  и  запущен:  сайт  работает,  сервисы  работают  • Руками  создаем  алгоритм  • Система  должна  создать  объекты,  дождаться  окончания,  проверить  статус  

FitNesse  in  Development   14  

Page 15: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Почему  FitNesse?

• Установка:  Java  +  скопировать  jar  файл  • Запуск  Web  сервера:  java  -­‐jar  fitnesse-­‐standalone.jar  • Запуск  теста:  • h�p://yourSever:8080/SuiteName/TestName?test  • java  -­‐jar  fitnesse-­‐standalone.jar  –c  SuiteName/TestName?test  

• Тесты  и  результаты  –  текстовые  файлы  

15  FitNesse  in  Development  

Page 16: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Первый  тест

FitNesse  in  Development   16  

Page 17: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Wait  UnVl

• Если  было  хотя  бы  одно  исключение  –  не  ждем,  сразу  падаем  • Если  упал  хотя  бы  один  предыдущий  wait  –  не  ждем,  сразу  падаем  • Всегда  ждем  с  �meout  • Раз  в  секунду  проверяем  ответ  

FitNesse  in  Development   17  

Page 18: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Check

• public  Ma�erStatus  StatusOfMa�erIs(string  ma�erName)  {  …  }  

• Возвращаем  результат.  FitNesse  напишет  ожидаемый  и  реальный  результаты.  

FitNesse  in  Development   18  

Page 19: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Добавляем  еще  тесты

FitNesse  in  Development   19  

Page 20: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Имена

• Переменная,  которая  хранит  имя  страницы  -­‐  ${PAGE_NAME}  • Все  названия  можно  сделать  производными  от  этой  переменной:  • define  workflow_name  =  ${PAGE_NAME}_workflow  • define  ma�er_name  =  ${PAGE_NAME}_ma�er  

FitNesse  in  Development   20  

Page 21: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Удаление

• Начало  каждого  теста  –  удаление  предыдущих  запусков  • Удаление  точечное  –  игнорируем  все  объекты,  которые  нам  не  мешают  • После  всех  тестов  все  результаты  будут  еще  в  базе  

FitNesse  in  Development   21  

Page 22: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Контекст  (1)

FitNesse  in  Development   22  

Page 23: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Контекст  (2)

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

FitNesse  in  Development   23  

Page 24: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Таблица  на  вход  (1)

FitNesse  in  Development   24  

• public  AddPar4cipantsFixture  AddUserTaskWithFollowingPar�cipants  (string  newTaskName)  

Page 25: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Таблица  на  вход  (2)

internal  sealed  class  AddPar�cipantsFixture    {  

public  AddPa�cipant(string  name,  MemberType  type)  {  }  

}  

FitNesse  in  Development   25  

Page 26: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Таблица  на  выход

FitNesse  in  Development   26  

Page 27: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Список  на  вывод

public  IEnumerable  HistoryOfForInstance(…)  {  

return  dbModel.GetHistory(…).Select(  row=>  new  {  

Ac�on  =  row.GetField<Ac�vityAc�on>(…),  Date  =  new  

 DateTimeWrapper(row.GetField<string>(…)  )  }  

}  

FitNesse  in  Development   27  

Page 28: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Анализ  строки

• Runner  определяет  тип:  • У  типа  есть  зарегистрированный  Parser  –  вызываем  его  (только  NetRunner)  • У  типа  есть  публичный  статический  метод  Parse  –  вызываем  его  

• Сравнение  происходит  с  типами,  а  не  со  строками  

FitNesse  in  Development   28  

Page 29: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Подстановка  даты  (1)

public  sealed  class  DateTimeWrapper  {  

 private  readonly  string  _line;  public  DateTimeWrapper(string  str)  {  

 _line  =  str;  }  

 

FitNesse  in  Development   29  

Page 30: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Подстановка  даты  (2)

public  sta�c  DateTimeWrapper    Parse(string  inputLine)      {        var  date  =  DateTime.UtcNow.ToString();      var  replaced  =  inputLine.Replace(        “{today}”,          date);      return  new  DateTimeWrapper(replace);    }  

 FitNesse  in  Development   30  

Page 31: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Подстановка  даты  (3)

• Пишем  {today}  • Сравниваем  строки  • Можем  сравнивать  и  объекты  

FitNesse  in  Development   31  

Page 32: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Подитог

• Простые  команды  на  вход  • Списки  на  вход  и  выход  • Подстановка  имени  тестов  в  объекты  • И  всё  это  –  при  понятных  названиях  !  

FitNesse  in  Development   32  

Page 33: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Автозапуск

• Шаг  в  CI  • java.exe  -­‐jar  fitnesse-­‐standalone.jar  –c  SuiteName/TestName?test&format=xml  • С  помощью  xsd  создаем  html  для  писем  и  сайта  • Запуск  дочерних  процессов:  • Через  coverage  tool  • После  остановки  –  сразу  анализируем  логи  и  выводим  ошибки  

FitNesse  in  Development   33  

Page 34: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Описание  функций

• Doxygen  • Встроенные  в  NetRunner  подсказки  

FitNesse  in  Development   34  

Page 35: FitNesse’in’Developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdfFitNesse(1) • Интеграционное’тестирование’ • Первая’версия:’2003’год,’Роберт’Мартин’(на

Вопросы  ?

• h�p://fitnesse.org    • NuGet:  fitSharp  &  NetRunner  • Доклад:  h�p://1drv.ms/1Bsgzcf    

• [email protected]    

FitNesse  in  Development   35