JMeter的JSR223 PreProcessor在GitHub生成OTP失败,请求技术指导
解决GitHub Actions中JMeter脚本无法生成OTP(org.jboss.aerogear)及406错误问题
你的问题核心是GitHub Actions环境下的JMeter默认缺少org.jboss.aerogear的OTP生成依赖,而本地JMeter已经手动添加过该依赖,所以本地运行正常。406错误本质是OTP生成失败导致请求参数无效,服务器拒绝接受请求。以下是具体解决步骤:
1. 确认所需依赖包
你需要两个关键jar包(版本需匹配你本地使用的版本):
aerogear-otp-java-[版本号].jar:OTP生成核心库commons-codec-[版本号].jar:aerogear-otp的依赖库
2. 在GitHub Actions工作流中添加依赖
有两种可行方式:
方式一:工作流中直接下载依赖到JMeter lib目录
在你的GitHub Actions YAML配置中,添加下载依赖的步骤,示例如下:
- name: Set up JMeter uses: justb4/jmeter-action@v1 with: jmeter-version: '5.6.3' # 务必匹配你本地使用的JMeter版本 - name: Download Aerogear OTP dependencies run: | # 替换为你需要的版本号 AEROGEAR_VERSION="1.0.0" COMMONS_CODEC_VERSION="1.15" curl -L -o $JMETER_HOME/lib/aerogear-otp-java-${AEROGEAR_VERSION}.jar https://repo1.maven.org/maven2/org/jboss/aerogear/aerogear-otp-java/${AEROGEAR_VERSION}/aerogear-otp-java-${AEROGEAR_VERSION}.jar curl -L -o $JMETER_HOME/lib/commons-codec-${COMMONS_CODEC_VERSION}.jar https://repo1.maven.org/maven2/commons-codec/commons-codec/${COMMONS_CODEC_VERSION}/commons-codec-${COMMONS_CODEC_VERSION}.jar
方式二:将依赖包存入项目仓库,工作流中复制到JMeter lib
- 在项目根目录创建
jmeter-lib文件夹,把下载好的两个jar包放入其中 - 在工作流中添加复制步骤:
- name: Set up JMeter uses: justb4/jmeter-action@v1 with: jmeter-version: '5.6.3' - name: Copy custom dependencies to JMeter lib run: cp jmeter-lib/*.jar $JMETER_HOME/lib/
3. 验证依赖是否添加成功
可以在工作流中加一步验证,确保jar包已正确放入JMeter lib目录:
- name: Verify dependencies exist run: ls $JMETER_HOME/lib | grep -E 'aerogear|commons-codec'
4. 额外排查406错误的注意事项
- 检查JMeter请求的
Accept请求头:服务器可能对Accept头有严格要求,本地环境的默认配置可能符合要求,但GitHub环境中JMeter的默认头可能需要手动调整 - 确认时间同步:OTP基于时间生成,GitHub Actions服务器的系统时间如果和本地偏差较大,会导致生成的验证码无效,进而触发406错误
内容的提问来源于stack exchange,提问作者Aditya Belgaonkar
相关产品推荐
相关产品推荐

