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);无接口文档,不是网页操作无法看到接口,抓包获取接口和参数
fiddler抓包获取
如在word文档中点击打印选择打印机后,调用了驱动打印接口,fiddler抓取到接口。
 fiddler导出curl有bug缺少body,手动复制请求头和body。
 
 复制所有的请求头
 
 获取传参,name是参数名称,value是参数值
 
 postman中输入请求方式、ip+接口、将上面复制的请求头粘贴、传参手动输入
 
 
 右侧点击生成curl,将curl导入到jmeter,导入后注意修改参数token、签名、文件等数据。