1. Software quality assurance days
22 Международная конференция
по вопросам качества ПО
sqadays.com
Санкт-Петербург. 17–18 ноября 2017
Смирнов Вячеслав Александрович
Перфоманс Лаб. Москва, Россия
Apache.JMeter для .NET-проектов
2. Проект «Атлас» 2
Microsoft Silverlight на клиенте
Протокол: SOAP/MSBin1 (HTTP)
Windows Communication Foundation на сервере
HP LoadRunner - Silverlight протокол?
Apache.JMeter для .NET-проектов
3. Нужны лицензии для LoadRunner 3
Microsoft Silverlight на клиенте
Протокол: SOAP/MSBin1 (HTTP)
Windows Communication Foundation на сервере
Малая нагрузка, 50 демо-пользователей
Apache.JMeter для .NET-проектов
4. Не знал, что LoadRunner знает .NET 4
Microsoft Silverlight на клиенте
Протокол: SOAP/MSBin1 (HTTP)
Windows Communication Foundation на сервере
Можно было использовать, но я тогда этого не знал
HP LoadRunner
.NET-протокол
Apache.JMeter для .NET-проектов
5. Коллеги знают Apache.JMeter 5
Microsoft Silverlight на клиенте
Протокол: SOAP/MSBin1 (HTTP)
Windows Communication Foundation на сервере
Но Apache.JMeter не знает SOAP/MSBin1 (HTTP)
Apache.JMeter для .NET-проектов
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. Протоколы 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. Коллеги не знают Visual Studio 8
Microsoft Silverlight на клиенте
Протокол: SOAP/MSBin1 (HTTP)
Windows Communication Foundation на сервере
Visual Studio знает .NET: WCF – SOAP/MsBin1 (HTTP)
Apache.JMeter для .NET-проектов
11. Польза проекта 11
Единая кодовая база: .NET на клиенте и на сервере
Выполнение нагрузочного тестирования
Бесплатность: Apache.JMeter
Apache.JMeter для .NET-проектов
12. Основа решения - jni4net 12
Использовать jni4net
Объединить Java и .NET Framework
Apache.JMeter для .NET-проектов
15. Сейчас: отлажен механизм 15
Отлажено и проверено под высокой нагрузкой
Apache.JMeter для .NET-проектов
16. Сейчас: из HP в Apache.JMeter 16
Обеспечен единый код тестов для
Apache.JMeter и HP LoadRunner
Apache.JMeter для .NET-проектов
17. Сейчас: из Apache.JMeter в VTS 17
Создано API для Apache.JMeter на C#,
для работы с HP LoadRunner Virtual Table Server
Apache.JMeter для .NET-проектов
21. Для серверов на основе технологий Microsoft:
COM+/DCOM, WCF (net.tcp) - .NET Framework
Тестирование WCF+DCOM 21
Apache.JMeter для .NET-проектов
22. Для серверов на основе технологий Microsoft:
COM+/DCOM, WCF (net.tcp) – С#, но не Java, …
Появляются ограничения 22
Apache.JMeter для .NET-проектов
23. И сделать, желательно, быстро
Небольшой бюджет проекта 23
Apache.JMeter для .NET-проектов
24. Реализация должна быть проста в изучении и
поддержке
Передача проекта заказчику 24
Apache.JMeter для .NET-проектов
25. Желаемый инструмент реализации – HP LoadRunner,
точнее HP Performance Center
Инструмент – HP LoadRunner 25
Apache.JMeter для .NET-проектов
26. Нагрузка нужна очень большая
Нужна высокая интенсивность 26
Apache.JMeter для .NET-проектов
27. Нагрузка нужна очень большая.
Демо-ограничение HP LoadRunner – 50 пользователей
Демо-ограничение HP LoadRunner 27
Apache.JMeter для .NET-проектов
28. Что делать, когда не хватает возможностей
демонстрационной версии?
Задача 28
Apache.JMeter для .NET-проектов
29. Можно попросить нужную сумму или
подумать, изучить, поискать готовое решение
Решение 29
Apache.JMeter для .NET-проектов
30. Можно попросить нужную сумму или
изобрести что-то новое
Запасной вариант 30
Apache.JMeter для .NET-проектов
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. Apache JMeter Visual Studio
Enterprise
HP LoadRunner
Бесплатно $2 500 $50 000
Считаем финансы на 417 (500) VU 33
Apache.JMeter для .NET-проектов
34. Пока покупаются лицензии, можно успеть
переписать тест, протестировать и написать отчёт
Ждать – долго и дорого 34
Apache.JMeter для .NET-проектов
35. Первый скрипт и отчёт был сделан за неделю
Сделать прототип - быстро 35
Apache.JMeter для .NET-проектов
38. Apache.JMeter может запустить «внешний» .NET-код в
отдельном потоке и отдельном процессе
Библиотека или приложение 38
• Вызвать .NET из Java
• Имперсонализация
потоков
-
• Меньше ресурсов,
высокая нагрузка+
• Нужно много CPU
и памяти для
работы-
• Простота
разработки+
Apache.JMeter для .NET-проектов
39. .NET-метод возвращает в Java массив со статистикой
выполнения методов.
Способ реализации: Библиотека 39
JMeter
• Создаёт потоки в Ultimate Thread Group
• Ограничивает интенсивность выполнения операций
JSR-223
Sampler
• Вызывает Java-метод, вызывающий .NET-метод
• Метод возвращает массив со статистикой выполнения
JSR-223 Post
Processor
• Получает массив со статистикой выполнения
• Через JMeter API формирует статистику JMeter
Apache.JMeter для .NET-проектов
40. Вызвать метод библиотеки в JMeter почти также просто.
Но библиотека должна быть на Java
JSR-223 Sampler 40
Apache.JMeter для .NET-проектов
41. Test Plan – основные параметры и загрузка библиотек
Настройки и параметры 41
Apache.JMeter для .NET-проектов
43. jp@gc - Ultimate Thread Group/JSR223 Sampler –
передача параметров и запуск сценариев
Запуск .NET-сценария 43
Apache.JMeter для .NET-проектов
44. JSR223 PostProcessor – обработка результатов
Приём результатов работы 44
Apache.JMeter для .NET-проектов
45. Нужна имперсонализация потоков
для Windows-аутентификации, что не всегда работает
для COM+/DCOM сервисов.
Ограничение 45
Apache.JMeter для .NET-проектов
46. Библиотека требует меньше ресурсов,
и этот способ работает
Библиотека – оптимальный выбор 46
Apache.JMeter для .NET-проектов
47. ● Обращаться к WCF-сервису будем из .NET-клиента
● Сценарий теста реализуется и выполняется на .NET
● Инструменты jni4net создадут Java-класс поверх .NET
● Apache JMeter будет вызывать Java-методы через
● JSR-223 Sampler
● Из .NET в Java передаются финальные результаты –
нет накладных расходов при выполнении сценария
DCOM и WCF из Apache JMeter 47
Apache.JMeter для .NET-проектов
48. Enterprise приложения имеют хорошо
документированные клиентские библиотеки для
работы с серверной частью
Модульные приложения 48
Apache.JMeter для .NET-проектов
49. jni4net: java native interface for .net 49
Запуск java-
обёрток над .NET
кодом: jni4net
Нужны простые
публичные методы
.NET-класса
Без events, out
параметров,
шаблонов, params
Свойства должны
иметь методы get и
set
Apache.JMeter для .NET-проектов
54. Текст скрипта можно вставить в проект HP LoadRunner
.NET, и проект заработает без ошибок.
Структура кода из HP LoadRunner 54
Apache.JMeter для .NET-проектов
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. Работа с транзакциями:
● 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. Работа с транзакциями:
● 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. Работа с транзакциями:
● 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. Подключение:
● 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. Скрипт пишется, как для HP LoadRunner .NET, пишется в
Visual Studio Community, а исполняется в Apache JMeter
Три богатыря 60
Apache.JMeter для .NET-проектов
64. Вопросы/ответы 64
Apache.JMeter для .NET-проектов
Расширение списка
поддерживаемых протоколов и
библиотек в JMeter с помощью
.NET Framework
Смирнов Вячеслав Александрович
Перфоманс Лаб
v.smirnov@pflb.ru
https://github.com/pflb