Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Apache.JMeter для .NET-проектов

318 views

Published on

Доклад Вячеслава Смирнова на SQA Days-22. 17-18 ноября 2017. Санкт-Петербург, Россия
www.sqadays.com

Published in: Education
  • Be the first to comment

  • Be the first to like this

Apache.JMeter для .NET-проектов

  1. 1. Software quality assurance days 22 Международная конференция по вопросам качества ПО sqadays.com Санкт-Петербург. 17–18 ноября 2017 Смирнов Вячеслав Александрович Перфоманс Лаб. Москва, Россия Apache.JMeter для .NET-проектов
  2. 2. Проект «Атлас» 2 Microsoft Silverlight на клиенте Протокол: SOAP/MSBin1 (HTTP) Windows Communication Foundation на сервере HP LoadRunner - Silverlight протокол? Apache.JMeter для .NET-проектов
  3. 3. Нужны лицензии для LoadRunner 3 Microsoft Silverlight на клиенте Протокол: SOAP/MSBin1 (HTTP) Windows Communication Foundation на сервере Малая нагрузка, 50 демо-пользователей Apache.JMeter для .NET-проектов
  4. 4. Не знал, что LoadRunner знает .NET 4 Microsoft Silverlight на клиенте Протокол: SOAP/MSBin1 (HTTP) Windows Communication Foundation на сервере Можно было использовать, но я тогда этого не знал HP LoadRunner .NET-протокол Apache.JMeter для .NET-проектов
  5. 5. Коллеги знают Apache.JMeter 5 Microsoft Silverlight на клиенте Протокол: SOAP/MSBin1 (HTTP) Windows Communication Foundation на сервере Но Apache.JMeter не знает SOAP/MSBin1 (HTTP) Apache.JMeter для .NET-проектов
  6. 6. Протоколы IPC от Microsoft 6 Название Транспорт Рекомендован в DCOM Microsoft RPC 1997 COM+ Microsoft RPC 2000 .NET Remoting SOAP/XML (HTTP) SOAP/XML (TCP) SOAP/MSBin1 (HTTP) NET.TCP (TCP) 2002 WCF SOAP/XML (HTTP) SOAP/MSBin1 (HTTP) NET.TCP (TCP) Настоящее время REST JSON (HTTP) Будущее Apache.JMeter для .NET-проектов
  7. 7. Протоколы IPC, известные JMeter 7 Название Транспорт Рекомендован в DCOM Microsoft RPC 1997 COM+ Microsoft RPC 2000 .NET Remoting SOAP/XML (HTTP) SOAP/XML (TCP) SOAP/MSBin1 (HTTP) NET.TCP (TCP) 2002 WCF SOAP/XML (HTTP) SOAP/MSBin1 (HTTP) NET.TCP (TCP) Настоящее время REST JSON (HTTP) Будущее Apache.JMeter для .NET-проектов
  8. 8. Коллеги не знают Visual Studio 8 Microsoft Silverlight на клиенте Протокол: SOAP/MSBin1 (HTTP) Windows Communication Foundation на сервере Visual Studio знает .NET: WCF – SOAP/MsBin1 (HTTP) Apache.JMeter для .NET-проектов
  9. 9. Что выбрать? 9 Apache.JMeter для .NET-проектов
  10. 10. Выбрал Apache.JMeter 10 Подключить к Apache.JMeter все возможности .NET Apache.JMeter для .NET-проектов
  11. 11. Польза проекта 11 Единая кодовая база: .NET на клиенте и на сервере Выполнение нагрузочного тестирования Бесплатность: Apache.JMeter Apache.JMeter для .NET-проектов
  12. 12. Основа решения - jni4net 12 Использовать jni4net Объединить Java и .NET Framework Apache.JMeter для .NET-проектов
  13. 13. Прокачанный Apache.JMeter 13 Получим Apache.JMeter знающий WCF, COM/DCOM, CryptoAPI, … Apache.JMeter для .NET-проектов
  14. 14. Дела давно минувших дней 14 Apache.JMeter для .NET-проектов
  15. 15. Сейчас: отлажен механизм 15 Отлажено и проверено под высокой нагрузкой Apache.JMeter для .NET-проектов
  16. 16. Сейчас: из HP в Apache.JMeter 16 Обеспечен единый код тестов для Apache.JMeter и HP LoadRunner Apache.JMeter для .NET-проектов
  17. 17. Сейчас: из Apache.JMeter в VTS 17 Создано API для Apache.JMeter на C#, для работы с HP LoadRunner Virtual Table Server Apache.JMeter для .NET-проектов
  18. 18. Сейчас: сделан демо-проект 18 https://github.com/pflb/wcfLoadTest Apache.JMeter для .NET-проектов
  19. 19. Расскажу былину Дело было так … 19 Apache.JMeter для .NET-проектов
  20. 20. Нужно нагрузочное тестирование с очень большой нагрузкой Новый проект 20 Apache.JMeter для .NET-проектов
  21. 21. Для серверов на основе технологий Microsoft: COM+/DCOM, WCF (net.tcp) - .NET Framework Тестирование WCF+DCOM 21 Apache.JMeter для .NET-проектов
  22. 22. Для серверов на основе технологий Microsoft: COM+/DCOM, WCF (net.tcp) – С#, но не Java, … Появляются ограничения 22 Apache.JMeter для .NET-проектов
  23. 23. И сделать, желательно, быстро Небольшой бюджет проекта 23 Apache.JMeter для .NET-проектов
  24. 24. Реализация должна быть проста в изучении и поддержке Передача проекта заказчику 24 Apache.JMeter для .NET-проектов
  25. 25. Желаемый инструмент реализации – HP LoadRunner, точнее HP Performance Center Инструмент – HP LoadRunner 25 Apache.JMeter для .NET-проектов
  26. 26. Нагрузка нужна очень большая Нужна высокая интенсивность 26 Apache.JMeter для .NET-проектов
  27. 27. Нагрузка нужна очень большая. Демо-ограничение HP LoadRunner – 50 пользователей Демо-ограничение HP LoadRunner 27 Apache.JMeter для .NET-проектов
  28. 28. Что делать, когда не хватает возможностей демонстрационной версии? Задача 28 Apache.JMeter для .NET-проектов
  29. 29. Можно попросить нужную сумму или подумать, изучить, поискать готовое решение Решение 29 Apache.JMeter для .NET-проектов
  30. 30. Можно попросить нужную сумму или изобрести что-то новое Запасной вариант 30 Apache.JMeter для .NET-проектов
  31. 31. С начала посчитаем деньги 31 Apache.JMeter для .NET-проектов
  32. 32. Считаем финансы на 417 (500) VU 32 Apache JMeter Visual Studio Enterprise HP LoadRunner Бесплатно 250 VU на 90 дней – демо 50 VU бесплатно, скидки Бесплатно $2500 - $5999 $150 за VU LR, $212 за VU PC (скидка 50%) Бесплатно* $2500* 500 x $100 = $50000* Стоимость округлена: 0 – 150 000 – 2 900 000 рублей * Плюс: Windows, оборудование, электричество, зарплата Apache.JMeter для .NET-проектов
  33. 33. Apache JMeter Visual Studio Enterprise HP LoadRunner Бесплатно $2 500 $50 000 Считаем финансы на 417 (500) VU 33 Apache.JMeter для .NET-проектов
  34. 34. Пока покупаются лицензии, можно успеть переписать тест, протестировать и написать отчёт Ждать – долго и дорого 34 Apache.JMeter для .NET-проектов
  35. 35. Первый скрипт и отчёт был сделан за неделю Сделать прототип - быстро 35 Apache.JMeter для .NET-проектов
  36. 36. Будем кодить 36 Apache.JMeter для .NET-проектов
  37. 37. Расскажу просто и подробно 37 Apache.JMeter для .NET-проектов
  38. 38. Apache.JMeter может запустить «внешний» .NET-код в отдельном потоке и отдельном процессе Библиотека или приложение 38 • Вызвать .NET из Java • Имперсонализация потоков - • Меньше ресурсов, высокая нагрузка+ • Нужно много CPU и памяти для работы- • Простота разработки+ Apache.JMeter для .NET-проектов
  39. 39. .NET-метод возвращает в Java массив со статистикой выполнения методов. Способ реализации: Библиотека 39 JMeter • Создаёт потоки в Ultimate Thread Group • Ограничивает интенсивность выполнения операций JSR-223 Sampler • Вызывает Java-метод, вызывающий .NET-метод • Метод возвращает массив со статистикой выполнения JSR-223 Post Processor • Получает массив со статистикой выполнения • Через JMeter API формирует статистику JMeter Apache.JMeter для .NET-проектов
  40. 40. Вызвать метод библиотеки в JMeter почти также просто. Но библиотека должна быть на Java JSR-223 Sampler 40 Apache.JMeter для .NET-проектов
  41. 41. Test Plan – основные параметры и загрузка библиотек Настройки и параметры 41 Apache.JMeter для .NET-проектов
  42. 42. setUp Thread Group/JSR223 Sampler – инициализация jni4net Инициализация 42 Apache.JMeter для .NET-проектов
  43. 43. jp@gc - Ultimate Thread Group/JSR223 Sampler – передача параметров и запуск сценариев Запуск .NET-сценария 43 Apache.JMeter для .NET-проектов
  44. 44. JSR223 PostProcessor – обработка результатов Приём результатов работы 44 Apache.JMeter для .NET-проектов
  45. 45. Нужна имперсонализация потоков для Windows-аутентификации, что не всегда работает для COM+/DCOM сервисов. Ограничение 45 Apache.JMeter для .NET-проектов
  46. 46. Библиотека требует меньше ресурсов, и этот способ работает Библиотека – оптимальный выбор 46 Apache.JMeter для .NET-проектов
  47. 47. ● Обращаться к WCF-сервису будем из .NET-клиента ● Сценарий теста реализуется и выполняется на .NET ● Инструменты jni4net создадут Java-класс поверх .NET ● Apache JMeter будет вызывать Java-методы через ● JSR-223 Sampler ● Из .NET в Java передаются финальные результаты – нет накладных расходов при выполнении сценария DCOM и WCF из Apache JMeter 47 Apache.JMeter для .NET-проектов
  48. 48. Enterprise приложения имеют хорошо документированные клиентские библиотеки для работы с серверной частью Модульные приложения 48 Apache.JMeter для .NET-проектов
  49. 49. jni4net: java native interface for .net 49 Запуск java- обёрток над .NET кодом: jni4net Нужны простые публичные методы .NET-класса Без events, out параметров, шаблонов, params Свойства должны иметь методы get и set Apache.JMeter для .NET-проектов
  50. 50. .NET-класс, сценарий работы 50 Apache.JMeter для .NET-проектов
  51. 51. .NET-класс, сценарий работы 51 Apache.JMeter для .NET-проектов
  52. 52. Java-класс обёртка (jni4net) 52 Apache.JMeter для .NET-проектов
  53. 53. Java-класс обёртка (jni4net) 53 Apache.JMeter для .NET-проектов
  54. 54. Текст скрипта можно вставить в проект HP LoadRunner .NET, и проект заработает без ошибок. Структура кода из HP LoadRunner 54 Apache.JMeter для .NET-проектов
  55. 55. Работа с транзакциями: ● start(string transactionLabel) ● end() ● start_transaction(string transactionLabel) ● end_transaction(string transactionLabel, int code) ● exit(int exitCode, int continueCode) Работа с логированием: ● log_message(string message) ● error_message(string message) Работа с user data point: ● user_data_point(string dataPointName, int value) ● user_data_point(string dataPointName, double value) Реализация методов LR API 55 Apache.JMeter для .NET-проектов
  56. 56. Работа с транзакциями: ● start(string transactionLabel) ● end() ● start_transaction(string transactionLabel) ● end_transaction(string transactionLabel, int code) ● exit(int exitCode, int continueCode) Работа с логированием: ● log_message(string message) ● error_message(string message) Работа с user data point: ● user_data_point(string dataPointName, int value) ● user_data_point(string dataPointName, double value) Реализация методов LR API 56 Apache.JMeter для .NET-проектов
  57. 57. Работа с транзакциями: ● start(string transactionLabel) ● end() ● start_transaction(string transactionLabel) ● end_transaction(string transactionLabel, int code) ● exit(int exitCode, int continueCode) Работа с логированием: ● log_message(string message) ● error_message(string message) Работа с user data point: ● user_data_point(string dataPointName, int value) ● user_data_point(string dataPointName, double value) Реализация методов LR API 57 Apache.JMeter для .NET-проектов
  58. 58. Работа с транзакциями: ● start(string transactionLabel) ● end() ● start_transaction(string transactionLabel) ● end_transaction(string transactionLabel, int code) ● exit(int exitCode, int continueCode) Работа с логированием: ● log_message(string message) ● error_message(string message) Работа с user data point: ● user_data_point(string dataPointName, int value) ● user_data_point(string dataPointName, double value) Реализация методов LR API 58 Apache.JMeter для .NET-проектов
  59. 59. Подключение: ● connect(string servername, int portnum, ConnectionOptions options) Получение значения без удаления: ● rotate_message(string columnName, SendRow sendFlag) Отключение: ● disconnect() https://github.com/pflb/LoadRunner.VTS.Client Реализация методов VTS API (C#) 59 Apache.JMeter для .NET-проектов
  60. 60. Скрипт пишется, как для HP LoadRunner .NET, пишется в Visual Studio Community, а исполняется в Apache JMeter Три богатыря 60 Apache.JMeter для .NET-проектов
  61. 61. Нагрузить .NET недорого Три богатыря 61 Apache.JMeter для .NET-проектов
  62. 62. Демо-проект 62 https://github.com/pflb/wcfLoadTest Apache.JMeter для .NET-проектов
  63. 63. Спасибо 63 Apache.JMeter для .NET-проектов
  64. 64. Вопросы/ответы 64 Apache.JMeter для .NET-проектов Расширение списка поддерживаемых протоколов и библиотек в JMeter с помощью .NET Framework Смирнов Вячеслав Александрович Перфоманс Лаб v.smirnov@pflb.ru https://github.com/pflb

×