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.
Software quality assurance days
21 Международная конференция
по вопросам качества ПО
sqadays.com
Москва. 26–27 мая 2017
Ев...
Настраиваемое тестирование производительности
Содержание
• Когда стандартные средства не подходят
• UML как средство докум...
Настраиваемое тестирование производительности
Особые требования
Настраиваемое тестирование производительности
Особые требования
• SFTP/MQ на входе и выходе
• Сильно распределенная систем...
Настраиваемое тестирование производительности
Обзор стандартных средств
Приложение Плюсы Минусы Лицензия
Мощный, гибкий,
к...
Настраиваемое тестирование производительности
Cucumber для тестирования
производительности
@SQA
Scenario: Test performance...
Настраиваемое тестирование производительности
UML для автоматизации
• UML – Unified Modeling Language
• UML – открытый ста...
Настраиваемое тестирование производительности
UML для автоматизации
Диаграмма классов
Диаграмма последовательности
Диаграм...
Настраиваемое тестирование производительности
UML для автоматизации
@startuml
start
partition "acceptPayment.puml" {
:Acce...
Настраиваемое тестирование производительности
UML для автоматизации
@startuml
start
!define JMS_Send(data,queue) #ccaaff:S...
Настраиваемое тестирование производительности
Шаблоны для данных
<Payment>
<UniqueId>1234567890</UniqueId>
<Timestamp>26-0...
Настраиваемое тестирование производительности
Шаблоны для данных
def binding = ['randomNumeric': {RandomStringUtils.random...
Настраиваемое тестирование производительности
Мониторинг
Настраиваемое тестирование производительности
Сбор метрик
Настраиваемое тестирование производительности
Elastic Stack
Настраиваемое тестирование производительности
Cucumber + Groovy = World
this.metaClass.mixin(cucumber.api.groovy.Hooks)
cl...
Настраиваемое тестирование производительности
Cucumber + Groovy = World
Before() { Scenario scenario ->
context.startTime ...
Настраиваемое тестирование производительности
Cucumber + Groovy = World
After() { Scenario scenario ->
if (!skipMetrics) {...
Настраиваемое тестирование производительности
Сохранение в MongoDB
{
"_id" : ObjectId("5922a4be386a5c7272f5ae11"),
"header...
Настраиваемое тестирование производительности
Сохранение в MongoDB
"metrics" : {
"Timing metrics" : {
"metric" : {
"name" ...
Настраиваемое тестирование производительности
Mean Stack
Настраиваемое тестирование производительности
Результат
Настраиваемое тестирование производительности
Вопросы
Email: evgeniy.lantsov@db.com, evgeny.lantsov@gmail.com
Telegram: @e...
Настраиваемое тестирование производительности
Настраиваемое тестирование производительности
Настраиваемое тестирование производительности
Настраиваемое тестирование производительности
Настраиваемое тестирование производительности
Настраиваемое тестирование производительности
Настраиваемое тестирование производительности
Upcoming SlideShare
Loading in …5
×

Настраиваемое тестирование производительности

343 views

Published on

Доклад Евгения Ланцова на конференции SQA Days-21
www.sqadays.com

Published in: Education
  • Be the first to comment

  • Be the first to like this

Настраиваемое тестирование производительности

  1. 1. Software quality assurance days 21 Международная конференция по вопросам качества ПО sqadays.com Москва. 26–27 мая 2017 Евгений Ланцов Deutsche Bank. Санкт-Петербург, Россия Настраиваемое тестирование производительности
  2. 2. Настраиваемое тестирование производительности Содержание • Когда стандартные средства не подходят • UML как средство документации и автоматизации • Cucumber для тестирования производительности • Масштабируемые данные из шаблонов • Подключаемые классы сбора метрик и мониторинга • Интеграция с Elasticsearch • Надежное хранение результатов тестирования • Красивые репорты в виде сервиса
  3. 3. Настраиваемое тестирование производительности Особые требования
  4. 4. Настраиваемое тестирование производительности Особые требования • SFTP/MQ на входе и выходе • Сильно распределенная система • Мониторинг ресурсов 4-х серверов и базы данных • Мониторинг ETL части приложения • Специфичные продуктовые метрики • Адаптация существующего подхода • Возможность быстрого расширения
  5. 5. Настраиваемое тестирование производительности Обзор стандартных средств Приложение Плюсы Минусы Лицензия Мощный, гибкий, коммьюнити Нечитабельные сценарии, некрасивые репорты Open-Source Хорошо подходит для REST/SOAP сервисов Узкоспециализирован Commercial Поддерживает много разных метрик В основном для вэба Commercial Малоизвестный, для вэба Commercial Богатые возможности Громоздкий, нестабильный Commercial Мало документации, громоздкий, негибкий Commercial HP LoadRunner Performance Tester
  6. 6. Настраиваемое тестирование производительности Cucumber для тестирования производительности @SQA Scenario: Test performance on SQA Days Given Payment processing is switched off And Generated files based on template put into channel: | filesNumber | transactionsNumber | template | channel | | 1000 | 1 | templates/Format1.txt | 10_MQ | | 500 | 5 | templates/Format1.txt | 10_MQ | | 100 | 100 | templates/Format1.txt | 10_MQ | | 1000 | N/A | templates/Format2.txt | 20_SFTP | And All payments are received When Payment processing is switched on And All payments are processed And Following messages are generated: | count | format | channel | | 13500 | Format3 | CHANNEL1_MQ | | 1000 | Format4 | CHANNEL2_SFTP | Then There are no error statuses in: | PAYMENT | | FEEDBACK | | DISPATCH |
  7. 7. Настраиваемое тестирование производительности UML для автоматизации • UML – Unified Modeling Language • UML – открытый стандарт, использующий графические обозначения для создания абстрактной модели системы. • UML не является языком программирования, но на основании UML-моделей возможна генерация кода. • Версия 1.1 1997 г. – версия 2.5 2015 г. • Начиная с версии 2.0 применяется для model-driven development PlantUML – open-source средство для описания UML диаграмм простым текстовым языком.
  8. 8. Настраиваемое тестирование производительности UML для автоматизации Диаграмма классов Диаграмма последовательности Диаграмма использования Диаграмма состояний
  9. 9. Настраиваемое тестирование производительности UML для автоматизации @startuml start partition "acceptPayment.puml" { :Accept Inbound Payment} } if (EUR payment) then -> |= SDK | | (CURRENCY == 'EUR') |; partition "euroPayment.puml" { note Documentation link .... http://confluence.intranet.db.com/display/Project/PRD_Euro_Payment end note :Additional pre-processing for euro} } endif :Get Type} note SDK::injectContextProperty .... amount -> 'Get type from payment details' .... columnName -> TYPE tableName -> PAYMENT_DETAILS whereClause -> 'PAYMENT_ID = ${PMT_ID}' .... propertyName -> PMT_TYPE propertyTags -> 'mandatory' .... "cheque" =~ CHEQUE "international" =^ INTERNATIONAL_TRANSFER "*" =~ REGULAR end note stop @enduml
  10. 10. Настраиваемое тестирование производительности UML для автоматизации @startuml start !define JMS_Send(data,queue) #ccaaff:Send data n to queue; !define Code(data) #dddddd:data; JMS_Send(AuthenticateAndAuthorizeDto,PaymentAnAQueue) Code(AuthenticateAndAuthorizeBean::onMessage) :wait for AnA status} note SDK::monitorColumnValue .... id -> 'wait until payment is authenticated and authorized' .... sql -> "select ANA_STATUS from PAYMENT_DETAILS where PAYMENT_ID = ${PMT_ID}" .... succeedWhenNot -> 'New','In Progress' failWhen -> 'Error' end note #ffff55:PaymentPopulation; note SDK::triggerJob .... id -> 'trigger PaymentPopulation job' .... jobClassName -> 'com.db.project.jobs.PaymentPopulation' end note stop @enduml
  11. 11. Настраиваемое тестирование производительности Шаблоны для данных <Payment> <UniqueId>1234567890</UniqueId> <Timestamp>26-05-2017T23:02:25</Timestamp> <Sender>Super Bank</Sender> <Receiver>Another Bank</Receiver> <Transactions> <Transaction> <Id>1234567891</Id> <Currency>EUR</Currency> <Amount>100.0</Amount> </Transaction> <Transaction> <Id>1234567892</Id> <Currency>USD</Currency> <Amount>123.5</Amount> </Transaction> </Transactions> </Payment>
  12. 12. Настраиваемое тестирование производительности Шаблоны для данных def binding = ['randomNumeric': {RandomStringUtils.randomNumeric(it)}, 'now': new Date(), 'randomFromList': {it.sort{new Random()}.first()}, 'randomAmount':{lower, upper, precision -> ThreadLocalRandom.current().nextDouble(lower, upper).round(2)}] Template1.txt: <Payment> <UniqueId>${randomNumeric(10)}</UniqueId> <Timestamp>${(now-1).format(dd-MM-yyyy’T’HH:mm:ss)}</Timestamp> <Sender>Super Bank</Sender> <Receiver>Another Bank</Receiver> <Transactions> ${Transactions} </Transactions> </Payment> Template1.trx: <Transaction> <Id> ${RSU.randomNumeric(10)}</Id> <Currency>${randomFromList([“USD”, “EUR”])}</Currency> <Amount>${randomAmount(100, 200, 2)}</Amount> </Transaction>
  13. 13. Настраиваемое тестирование производительности Мониторинг
  14. 14. Настраиваемое тестирование производительности Сбор метрик
  15. 15. Настраиваемое тестирование производительности Elastic Stack
  16. 16. Настраиваемое тестирование производительности Cucumber + Groovy = World this.metaClass.mixin(cucumber.api.groovy.Hooks) class ObjectsWorld { List filesList = [] Map paymentIdsMap = [:] as ConcurrentHashMap } class MetricsWorld { MetricCollectorsRegistry metricCollectors = new MetricCollectorsRegistry() MonitorsRegistry monitorsRegistry = new MonitorsRegistry() ScenarioContext context = new ScenarioContext() boolean skipMetrics = Configuration. resolveConfigurationParam('SKIP_METRICS', 'false') .toBoolean() } class MyWorld {} World { MyWorld.mixin ObjectsWorld, MetricsWorld new MyWorld() }
  17. 17. Настраиваемое тестирование производительности Cucumber + Groovy = World Before() { Scenario scenario -> context.startTime = DatabaseHelper.getSysdate() if (!skipMetrics) { monitorsRegistry.register(new CPUMonitor()) monitorsRegistry.register(new DatabaseMonitor()) monitorsRegistry.runAll() CompositeMetricCollector timingsMetricCollector = new CompositeMetricCollector(Metrics.TIMING) timingsMetricCollector.add(new ScenarioTimingMetricCollector(context)) timingsMetricCollector.add(new ProcessingTimingMetricCollector(context)) timingsMetricCollector.addSummarizer { addTotalProcessingTiming(it) } metricCollectors.register(timingsMetricCollector) metricCollectors.register( new CpuMetricCollector(monitorsRegistry.get(CPUMonitor.class) .output)) metricCollectors.register( new DatabaseCollector(monitorsRegistry.get(DatabaseMonitor.class) .output)) } }
  18. 18. Настраиваемое тестирование производительности Cucumber + Groovy = World After() { Scenario scenario -> if (!skipMetrics) { context.endTime = DatabaseHelper.getSysdate() monitorsRegistry.shutdownAll() List<Metric> metrics = metricCollectors.collectAll() generateReport(metrics) } }
  19. 19. Настраиваемое тестирование производительности Сохранение в MongoDB { "_id" : ObjectId("5922a4be386a5c7272f5ae11"), "header" : { "environment" : “UAT", "scenarioName" : “Smoke Test", "scenarioTags" : [ "@Smoke", "@Performance], "runName" : “Smoke Test for Demo", "runPlatform" : "JENKINS", "buildNumber" : "76", "buildURL" : "http://jenkins.intranet.com:8080/jenkins/job/PerformanceTest/76/", "scenarioStart" : "22-05-2017 10:32:46", "scenarioEnd" : "22-05-2017 10:43:39" },
  20. 20. Настраиваемое тестирование производительности Сохранение в MongoDB "metrics" : { "Timing metrics" : { "metric" : { "name" : "Timing metrics", "properties" : [ "Metric", "Value"], "values" : […] } }, "Database System metric" : {…}, “Server Usage metric" : {…}, … } }
  21. 21. Настраиваемое тестирование производительности Mean Stack
  22. 22. Настраиваемое тестирование производительности Результат
  23. 23. Настраиваемое тестирование производительности Вопросы Email: evgeniy.lantsov@db.com, evgeny.lantsov@gmail.com Telegram: @evgeniy_lantsov LinkedIn: linkedin.com/in/evgeniy-lantsov-74848726 Skype: evgeny.chekalkin

×