1

我在网络上搜索了“site:stackoverflow.com yandex-tank 等待聚合器完成”,但没有找到任何具体的内容。

我通过 Yandex-Tank (YT) 启动 JMeter,在 JMeter 完成后,YT 继续在日志中写入“等待聚合器完成”,就像永远一样。我在这里找到了一些讨论:https ://gitter.im/yandex/yandex-tank?at=5ce2c4e36366992a94ef7826 :

Покопал ещё, оказывается эти строки там были, но их убрали в коммите: 47623dd4b7a08e5383cbb4144eecc13edbdf3e96 Видимо закрытие reader нужно перенести по аналогии с Bfg в plugins/JMeter/plugin.py В функции end_test и is_test_finished

这是一个俄语讨论区,为非俄语人士提供简短翻译:“阅读器的关闭应移至 end_test 和 is_test_finished,就像对 BFG 插件所做的那样”。

但是,正如我在代码中看到的end_test并且is_test_finished reader.close()已经存在yandextank/plugins/JMeter/plugin.py

def is_test_finished(self):
    retcode = self.process.poll()
    aggregator = self.core.job.aggregator
    if not aggregator.reader.jmeter_finished and retcode is not None:
        logger.info(
            "JMeter process finished with exit code: %s, waiting for aggregator",
            retcode)
        self.retries = 0
        aggregator.reader.jmeter_finished = True
        return -1
    elif aggregator.reader.jmeter_finished is True:
        print("aggregator.reader.jmeter_finished is True")
        if aggregator.reader.agg_finished:
            self.reader.close()
            return retcode
        else:
            logger.info("Waiting for aggregator to finish")
            return -1
    else:
        return -1

def end_test(self, retcode):
    if self.process:
        gracefully_shutdown = self.__graceful_shutdown()
        if not gracefully_shutdown:
            self.__kill_jmeter()
    if self.process_stderr:
        self.process_stderr.close()
    self.core.add_artifact_file(self.jmeter_log)
    self.reader.close()
    return retcode

如何解决这个问题(让 YT 在 JM 完成后干净利落地完成)?

4

0 回答 0