Jmeter 请求签名api接口-BeanShell

Jmeter 请求签名api接口-BeanShell

  • 项目签名说明
  • 编译扩展jar包
  • jmeter 使用 BeanShell 调用jar包中的签名方法

项目签名说明

有签名算法的api接口本地不好测试,使用BeanShell 扩展jar 包对参数进行签名,接口签名算法使用 sha512Hex 算法。签名的说明如下

  1. 请求参数类型
    body 参数
    原始字符串 originData
appId=appId&appKey=appKey&timeStamp=当前时间戳&body=json参数
  1. request 参数
    原始字符串 originData
appId=appId&appKey=appKey&timeStamp=当前时间戳&key1=value1&key2=value2

key 按照升序排列

  1. 签名算法
    使用 sha512Hex 签名算法
String inputData = "name=scd&address=广东";
String encodeData = URLEncoder.encode(inputData, StandardCharsets.UTF_8.name());
String result = DigestUtil.sha512Hex(encodeData, StandardCharsets.UTF_8.name());
System.out.println(result);

originData 使用 URLEncoder.encode 编码,避免出现中文。在使用 sha512Hex 算法计算出签名串 sign

  1. 请求头数据
sign:sign
timestamp:1701948943849
appId:xxx

项目地址
https://gitee.com/3281328128/web-jdk17/tree/dev/

启动项目后 swagger 访问地址
http://localhost:8080/boot3/swagger-ui/index.html
Jmeter 请求签名api接口-BeanShell_第1张图片

编译扩展jar包

jmeter 支持扩展的jar包,使用BeanShell调用jar包中的方法。项目地址为https://gitee.com/3281328128/jmeter-api-sign。目前jmeter5.6.2版本支持jdk8编译的扩展jar,之前用jdk17编译出来的扩展jar包,不能运行签名算法,后面改成使用jdk8编译的jar包

引用的jar包需要带jar-with-dependencies 结束的jar,如图所示
Jmeter 请求签名api接口-BeanShell_第2张图片
如果使用 maven 编译,将依赖编译到jar包里面配置如下所示

<build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-pluginartifactId>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependenciesdescriptorRef>
          descriptorRefs>
          <archive>
            <manifest>
              <mainClass>com.itsenlin.HelloworldmainClass>
            manifest>
          archive>
        configuration>
        <executions>
          <execution>
            <id>make-assemblyid> 
            <phase>packagephase> 
            <goals>
              <goal>singlegoal>
            goals>
          execution>
        executions>
      plugin>
    plugins>
  build>

jmeter 使用 BeanShell 调用jar包中的签名方法

  1. 选择测试计划导航栏,配置扩展的jar
    Jmeter 请求签名api接口-BeanShell_第3张图片
  2. 配置BeanShell 预处理程序
    路径 添加 -》前置处理器 -》BeanShellProcessor
    Jmeter 请求签名api接口-BeanShell_第4张图片
    BeanShell 的具体配置如下所示
    Jmeter 请求签名api接口-BeanShell_第5张图片
    使用扩展jar包中的签名算法
import com.alibaba.fastjson.JSON;
import com.scd.sign.SignUtil;

String inputParam = "{\n" +
                "  \"id\": 0,\n" +
                "  \"userName\": \"string\",\n" +
                "  \"password\": \"string\"\n" +
                "}";
String inputJson = JSON.parseObject(inputParam).toJSONString();
log.info("request json " + inputJson);
String timeStamp = String.valueOf(System.currentTimeMillis());
String appId = bsh.args[0];
String appKey = bsh.args[1];
String sign = SignUtil.generateBodySign(appId, appKey, timeStamp, inputJson);
vars.put("body", inputJson);
vars.put("appId", appId);
vars.put("timestamp", timeStamp);
vars.put("sign", sign);

vars 中存入了原始的请求参数,http的请求的body参数需要取vars中存入的数据 ${body}
Jmeter 请求签名api接口-BeanShell_第6张图片
请求头中需要的数据 appId、timestamp、sign 也可以从 vars 中获取
Jmeter 请求签名api接口-BeanShell_第7张图片
BeanShell 的用法可以查看 【jmeter】BeanShell用法详细汇总

  1. 配置接口响应断言
    路径 添加 -》断音 -》JSON断言
    Jmeter 请求签名api接口-BeanShell_第8张图片
  2. 配置查看结果树
    配置查看结果树之后才能查看请求的记录,配置路径 添加 -》监听器 -》查看结果树
    Jmeter 请求签名api接口-BeanShell_第9张图片
  3. 启动线程组验证
    Jmeter 请求签名api接口-BeanShell_第10张图片
    启动之后,可以在查看结果树查看请求记录
    Jmeter 请求签名api接口-BeanShell_第11张图片
    点击黄色的感叹号,可以查看运行的日志
    Jmeter 请求签名api接口-BeanShell_第12张图片

你可能感兴趣的:(#,jmeter,后端,jmeter)