RobotFramework调用JMeter

问题

最近有一个需求,想把性能测试也加到我们的CI流程中去。
我们之前的性能测试是基于JMeter去做的,而自动化框架是基于RobotFramework,于是开始调研RF调用JMeter相关的技术。

解决

可以通过Robot-Framework-JMeter-Library这个库解决。

安装

1
pip install robotframework-jmeterlibrary

依赖

Java
JMeter 2.12
python-2.7.5

使用

执行JMeter任务

1
2
3
| ${logPath}= | set variable | D:/Tests/output1.jtl | |
| run jmeter | D:/apache-jmeter-2.12/bin/jmeter.bat | D:/Tests/Test1Thread1Loop.jmx | ${logPath} |
| analyse jtl convert | ${logPath} | | |

解析测试结果

1
2
3
4
5
| ${result} | analyse jtl convert | ${logPath} | |
| log | ${result} | | |
| : FOR | ${ELEMENT} | IN | @{result} |
| | log dictionary | ${ELEMENT} |

遇到的问题

在解析测试结果过程中报错,提示:

1
unicodedecodeerror 'ascii' codec can't decode byte 0xc3 in position 1 ordinal not in range(128)

这个问题研究了好久都没搞定,改JMeter配置文件的默认编码、加BeanShell PostProcessor等等方法都试过,仍然不行。
后来突然想到,之前自己写RF的Library的时候好像也遇到过类似的问题,是由于Python默认的编码是ASCII,输出的时候会将原始数据转成ASCII,所以报错。于是尝试了下之前的方法,完美解决。
具体方法如下:
修改JMeterLIb.py文件

# 文件开头增加
import sys
...
class LogAnalysisInitiator(object):
    def __init__(self, filePath,     createSqlReport=False, createHtmlReport=False,     disableReports=None):
# line 291, 增加如下两行
        reload(sys)
        sys.setdefaultencoding('utf-8')
...
欢迎打赏!