【问题标题】:How to pass values to the user defined variable in jmeter's jmx file via robot framework如何通过机器人框架将值传递给jmeter的jmx文件中的用户定义变量
【发布时间】:2021-04-29 12:50:23
【问题描述】:

我有一个 JMX 文件,其中“线程数(用户):”定义为变量“${__P(threads)}。

在robot-framework中,如何通过JMeterLib中定义的关键字将值传递给jmx文件中的这个用户定义变量。

示例:如何在 JMeterLib 的以下关键字语法中包含相同的内容:-

run jmeter  D:/apache-jmeter-2.12/bin/jmeter.bat    D:/Tests/Test1Thread1Loop.jmx   D:/Tests/output1.jtl

【问题讨论】:

    标签: jmeter robotframework


    【解决方案1】:

    根据JMeterLib documentation

    Run Jmeter Analyze Jtl jmeterPath, testPlanPath, logFilePath, otherParams=

    所以我的期望是您需要通过 -J 命令行参数传递此属性值,例如:

    run jmeter  D:/apache-jmeter-2.12/bin/jmeter.bat    D:/Tests/Test1Thread1Loop.jmx   D:/Tests/output1.jtl -Jthreads=1234
    

    还要注意according to JMeter Best Practices you should always be using the latest version of JMeter 和您的 2.12 版本已经 7 年了,所以考虑升级可能是个好主意,所以我建议获取JMeter 5.4(或JMeter Downloads 页面上提供的最新版本)或者至少是包装库支持的JMeter 3.3

    【讨论】:

    • 当我尝试相同时,它会抛出“AttributeError:模块'string'没有属性'split'”。使用的命令是“运行 jmeter ${jmeter_install_path} ${jmeter_jmx_path} ${jmeter_log_path} -Jthreads=10”。可能是什么原因?
    • 机器人框架版本 = 3.2.2 ; Python 版本 = 3.9.0 ; jmeter 版本 = 5.4.1
    【解决方案2】:

    更新此答案

    该命令应使用以下语法执行 [-Jthreads 可以传递为 'Jthreads=10' 或 'Jthreads 10']:

    run jmeter  D:/apache-jmeter-2.12/bin/jmeter.bat    D:/Tests/Test1Thread1Loop.jmx   D:/Tests/output1.jtl -Jthreads=10
    

    但是,在回复https://stackoverflow.com/a/65889566/14795343 时,我在评论中更新了一个错误。感谢 Dmitri T 和 github https://github.com/kowalpy/Robot-Framework-JMeter-Library/issues/6#issuecomment-793596283 中的回复。

    经过分析发现这个错误是因为我的测试环境中机器人框架https://github.com/kowalpy/Robot-Framework-JMeter-Library的jmeter库是在Python3版本中运行的,而库最初是在Python 2.7.5版本中开发的。简而言之,这是由于python版本的兼容性。

    因此,“JMeterClasses.py”类中有一个特定命令在 Python 3 版本中无法识别,因此引发了错误 "AttributeError: module 'string' has no attribute 'split'"

    然后在“JMeterClasses.py”中更新了下面的方法。

    Old:
        def listOtherParams(self):
            self.params = []
            if not self.paramsStr == "":
                self.params = string.split(self.paramsStr)
    
    Updated (string is modified as str, as highlighted below):
        def listOtherParams(self):
            self.params = []
            if not self.paramsStr == "":
                self.params = str.split(self.paramsStr)
    

    修改上述方法后对我有用。

    注意:您可以在 site-packages/dist-packages 文件夹中找到“JMeterClasses.py”[示例路径:/usr/local/lib/python3.8/dist-packages/ ].

    【讨论】:

    • 我尝试了上述解决方案,但它不起作用:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    相关资源
    最近更新 更多