Существует функция lr_start | end_distributed_transaction(), которая предназначена для обработки этой ситуации напрямую. Однако, если вы сделаете некоторое исследование как для группы LoadRunner Yahoo, так и для группы go-loadrunner lr-LoadRunner, вы обнаружите, что эта функция несовместима в ее работе. Существует несколько альтернативных путей
Как отметил Майкл Галос, вы можете размещать информацию о брокере между сценариями, используя VTS, RabbitMQ, Amazon Simple Queue Service, таблицу очередей в традиционной базе данных, ..., затем второй пользователь может получить информацию о времени начала (в идеале в миллисекундах времени unix), вычислить разницу с текущим временем, а затем использовать функцию lr_set_transaction() для создания транзакции «на лету». У этой модели есть некоторые проблемы, поскольку она предполагает максимальную глубину очереди при переходе от одного виртуального пользователя к другому из 1 без задержки и предполагает, что следующий элемент, который выскочил из очереди, будет правильным элементом, что не всегда верно в асинхронная модель.
Вы также можете использовать то, что будет обозначать данные маркировки в записи, которую вы обрабатываете. Например, если ваша запись позволяет использовать числа вместо среднего имени, в качестве примера рассмотрим использование временной метки unix в качестве среднего имени. Затем, как только вы потянете свою запись, у вас есть копия исходного времени, когда она была помещена в очередь раньше. Это также позволяет избежать интеграции дополнительной инфраструктуры. Поскольку время начала в составе исходной записи и время окончания является частью ваших локальных виртуальных пользователей, вы можете снова использовать lr_set_transaction() для создания транзакции «на лету».
Оптимальной ситуацией является база данных заднего конца, которая отслеживает время, необходимое для обработки запроса асинхронного запроса. Предположим, что запись, после ее поступления, требует нескольких этапов обработки.Контрольный след, который отслеживает время прибытия на разных этапах, может быть использован для создания набора данных в конце теста, который затем может быть перенесен в Analysis как часть вашей тестовой отчетности. Это может обеспечить не только оптимальное время обработки, так как вы увидите перспективу времени от прибытия в одну очередь до места размещения в исходящей очереди для получения (без задержек с клиентской обработкой или сетью). Такие контрольные журналы также помогают в отладке продукции, когда элемент «застревает». В качестве альтернативы вы также можете обрабатывать журналы, где эта информация может быть собрана. Мне нравится использовать Splunk для этого процесса, но другие идут на стек ELK или даже с Microsoft Logparser. Запрос, экспортированный в datapoints (контрольный журнал базы данных, Splunk, ELK или LogParser), которые взяты в анализе, становится самым изящным решением для анализа и представления.
Вот ваш слабый момент во всем этом. Системные часы. Убедитесь, что все ваши системные часы синхронизированы на всех ваших генераторах и хостах виртуальной пользовательской нагрузки, из которых вы будете извлекать данные синхронизации. Если вы находитесь в среде виртуальной машины, это становится проблематичным, потому что виртуальные машины будут использовать виртуализированные системные часы, которые в конечном итоге должны синхронизироваться с физическими системными часами. Это может привести к скачку часов, в результате чего получается более длинная запись по времени, чем в среде аппаратных часов. Сеть заключается в том, что вы будете иметь более высокое среднее значение, максимальное, стандартное отклонение и время ответа 90-го/95-го процентиля. Вы можете покрыть эту непредвиденную ситуацию, имея пару генераторов аппаратной нагрузки в цикле в качестве элементов управления, а затем используя записи синхронизации для этого набора в качестве контроля против любого перекоса в ваших виртуализированных генераторах нагрузки. Пища для размышлений.