Jmeter脚本--BeanShell PreProcessor
整理一份之前项目中的接口测试文档内容,主要为了方便以后能够更好的进行接口测试需求,以Jmeter接口测试为例。
接口测试前置条件需要有:API文档、API文件,设计并编写对应接口测试用例
一、API对应的使用手册
二、编写接口对应的测试用例
如下图所示:
三、文档文件:OpenAPI.JAVA
项目提供OpenAPI文件,可以从此文件中可以看到API相关的写法内容
1 package com.example.test; 2 3 import java.io.UnsupportedEncodingException; 4 import java.security.MessageDigest; 5 import java.security.NoSuchAlgorithmException; 6 import java.text.SimpleDateFormat; 7 import java.util.Date; 8 9 public class OpenApi { 10 11 public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException { 12 13 String name = "";// 需要调用的方法名 14 //name = "createUser"; 15 name = "checkBaseAccount"; 16 name = "queryProfile"; 17 System.out.println(name); 18 String json = "";//要传输的json 数据 19 json = "{\"profile\":{\"appUser\":\"appUser\",\"account\":\"asdasd\",\"channelCode\":\"网约车\",\"first_name\":\"first_name\",\"password\":\"password\"}}"; 20 21 22 test(name, json); 23 24 } 25 26 27 public static void test(String name, String json) { 28 29 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); 30 String format = simpleDateFormat.format(new Date()); 31 System.out.println("时间戳 timestamp: " + format); 32 33 34 String str = "ProfileOpenService" + name + json + "appKey=saic_tripformat=jsontimestamp=" + format + "signatureMethod=md5version=1Hogp3wIt"; 35 36 System.out.println(str); 37 38 // System.out.println(encryption(str)); 39 System.out.println("md5 signatureMethod: " + encryption(str).toUpperCase()); 40 } 41 42 /** 43 * @param plainText 明文 44 * @return 32位密文 45 */ 46 public static String encryption(String plainText) { 47 String re_md5 = new String(); 48 try { 49 MessageDigest md = MessageDigest.getInstance("MD5"); 50 md.update(plainText.getBytes()); 51 byte b[] = md.digest(); 52 53 int i; 54 55 StringBuffer buf = new StringBuffer(""); 56 for (int offset = 0; offset < b.length; offset++) { 57 i = b[offset]; 58 if (i < 0) 59 i += 256; 60 if (i < 16) 61 buf.append("0"); 62 buf.append(Integer.toHexString(i)); 63 } 64 65 re_md5 = buf.toString(); 66 67 } catch (NoSuchAlgorithmException e) { 68 e.printStackTrace(); 69 } 70 return re_md5; 71 } 72 }
四、设计并编写Jmeter接口测试用例
1. 注册用户:用户参数信息记录
2.注册用户:用户注册
配置注册相关的参数,可对参数进行测试,设计正向用例和反向用例
正向用例:根据需求填写正确参数测试
反向用例:重复提交参数、必填参数为空、错误参数(参数类型、参数值)
3. 添加BeanShell PreProcessor预处理程序
编写脚本,进行变量设置
变量脚本
1 import com.example.test.*; 2 import java.text.*; 3 import java.util.Date; 4 String reqData = ""; 5 String name = ""; 6 name = "createUser"; 7 String json = ""; 8 json = "{\"profile\":{\"appCode\":\"\",\"appUserId\":\"${appUserId}\",\"channelCode\":\"${channelCode}\",\"educationCode\":\"\",\"firstname\":\"\",\"industrycode\":\"\",\"lastname\":\"\",\"tele\":\"\",\"password\":\"7777777\"}}"; 9 vars.put("json",json); 10 Date currentTime = new Date(); 11 SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); 12 String dateString = formatter.format(currentTime); 13 String format = dateString; 14 vars.put("format",format); 15 String str = "ProfileOpenService" + name + json + "appKey=saic_tripformat=jsontimestamp=" + format + "signatureMethod=md5version=${csmd5version}"; 16 vars.put("str",str); 17 String sign=OpenApi.encryption(str).toUpperCase(); 18 System.out.println("计算结果:"+sign); 19 vars.put("sign",sign);
4.提取返回参数uid
完成请求后,使用正则表达式提取响应的参数
5.HTTP信息头管理器
信息头中部分参数通过变量脚本生成
6.配置响应断言
判断返回内容是否与预期内容一致,返回一致则表示测试成功。