curl直接导入
1、操作页面后,F12查看接口,右击接口-copy-copy as cURL
2、jmeter 工具-import from cURL,粘贴上面复制的curl
根据接口文档导入
1、接口文档示例如下:
Path: /api/jobs/xps/exec
Method: POST
接口描述:
file 文件类型: MultipartFile
请求参数
Headers
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Authorization | token | 是 | token | 权限认证 |
access_sign | xxx | 是 | 访问签名 |
Body
参数名称 | 参数类型 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
title | text | 是 | 测试标题 | 作业标题 |
fileSuffix | text | 是 | docx | 文件类型 |
clientIp | text | 是 | 172.1.1.1 | 打印机ip |
printProperties.driverName | text | 是 | xsp虚拟驱动 | 驱动名称 |
printProperties.portShared | text | 是 | 0不共享,1共享 | 端口是否共享 |
printProperties.terminalType | text | 是 | Windows | 终端类型 |
printProperties.pageCount | text | 是 | 10 | 页数总量 |
printProperties.copyCount | text | 是 | 1 | 复印数量 |
printProperties.paper | text | 是 | A4 | 页的大小 |
printProperties.duplexing | text | 是 | OneSided(单面) | 单双面 |
printProperties.color | text | 是 | Monochrome(黑白) | 颜色 |
printProperties.pageOrientation | text | 是 | portrait | 页方向 |
printProperties.documentName | text | 是 | 测试.docx | 文档名字 |
printProperties.isPSDriver | text | 是 | true | 是否ps驱动 |
file | file | 是 | 文件 | 文件 |
2、jmeter创建测试计划-线程组
2-1、线程组下面添加HTTP请求
根据接口文档输入协议、ip、端口、请求类型、接口路径、参数等
接口中有file类型参数,需要上传文件
2-2、HTTP请求下添加配置原件-请求头管理器
接口文档中请求头有权限认证的token、签名(签名每次请求都要生成新的)
签名如何生成,下方讲解
3、生成签名
3-1、线程组下面添加beanShell Sampler
3-2、根据签名规则编写脚本
生成访问签名
参数名 | 说明 | 示例值 | 备注 |
---|---|---|---|
clientId | 签名ID | 0ca6eaf66cbf4f2bb1db6902c9c8d915 | |
clientSecret | 签名秘钥 | 8c0a5f3388154e2c959f2bd44fc2dd66 | |
timestamp | 时间戳 | 1706859156428 | 当前时间戳 |
uuid | 唯一ID | 12345678 | 唯一值,一个签名只能使用一次 |
访问签名生成逻辑
1、签名值= 签名ID+“:”+签名秘钥+“:”+时间戳+“:”+唯一ID
2、 生成算法:AES ,签名参数:ECB PKCS7 128bits
3、 AES算法秘钥(aesKey):#iSn##s$olu.@@sm
4、 access_sign生成规则:用AES算法对签名值进行加密
签名脚本
// Import the Base64 class
import org.apache.commons.codec.binary.Base64;
// 参数
var clientId = "0ca6eaf66cbf4f2bb1db6902c9c8d915";
var clientSecret = "8c0a5f3388154e2c959f2bd44fc2dd66";
var timestamp = new Date().getTime();
var uuid = new java.util.Random().nextInt(90000000) + 10000000;
// 计算签名值
var signValue = clientId + ":" + clientSecret + ":" + timestamp + ":" + uuid;
// 加密签名值
var aesKey = "#iSn##s$olu.@@sm";
var cipher = javax.crypto.Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, new javax.crypto.spec.SecretKeySpec(aesKey.getBytes(), "AES"));
var encryptedSign = cipher.doFinal(signValue.getBytes());
// 生成访问签名 (使用 Commons Codec)
var accessSign = new String(Base64.encodeBase64(encryptedSign));
// 将访问签名存储到变量中
vars.put("access_sign", accessSign);
// 打印访问签名
System.out.println("access_sign: " + accessSign);