JMeter接口测试-HTTPS验证登录

来源:互联网 发布:什么是淘宝店铺引流 编辑:程序博客网 时间:2024/05/22 06:35
JMeter接口测试-HTTPS验证登录
上一篇主要讲解JMeter测试工具的安装及环境配置,不熟悉的朋友可以看看我的上篇博文:
http://blog.csdn.net/CjhLoveAndroid/article/details/77839337
这篇讲的是JMeter测试工具的使用,这里用一个实际例子(以https方式登录服务器,并通过接口修改数据)来演示操作过程。

1.JMeter中使用Beanshell来引用第三方jar包
  因为在网上查了才知道,现在版本的JMeter已经没有_MD5加密函数了,需要自己导入md5.jar包,进行加密操作。
 
于是开启了我的寻包过程:Java 对字符串进行加密并生成MD5值
1.从网上copy一份MD5加密方法,当然一些细节地方需要自己修改,比如要加密的具体内容(我的是ChallengeString:GDS3710IZpRsFzCbM:admin),然后从eclipse中导出md5.jar包

package com.cjh.md5;import java.security.MessageDigest;import java.util.Scanner;/* * message-digest algorithm 5(信息摘要算法) * md5的长度默认是128bit * 128/4=32,换成16进制表示后为32位了 * */public class MD5Util {//测试方法/*public static void main(String[] arg){Scanner scan=new Scanner(System.in);String ChallengeString,pwd1;System.out.println("请输入ChallengeString");ChallengeString=scan.next();        pwd1 = ":GDS3710lZpRsFzCbM:admin";System.out.println("加密前: "+ChallengeString+pwd1);System.out.println("加密后: "+MD5Util.getMD5(ChallengeString+pwd1));}*/     /*生成md5      *      */public static String getMD5(String message) {String md5str="";String pwd=":GDS3710lZpRsFzCbM:admin";String pwd2=message+pwd;try {//1.创建一个提供信息摘要算法的对象,初始化为md5算法对象MessageDigest md=MessageDigest.getInstance("MD5");//2.将消息变成byte数组byte[] input=pwd2.getBytes();//3.计算后获得字节数组,得到的是128位的字符串byte[] buff=md.digest(input);//4.把数组每一字节(一个字节占8位)转换成16进制的字符串md5str=bytesToHex(buff);} catch (Exception e) {e.printStackTrace();}return md5str;}    /* * 二进制转换十六进制 *  * / */public static String bytesToHex(byte[] bytes) {StringBuffer md5str=new StringBuffer();//把数组每一字节转换成16进制连城md5字符串int digital;for (int i = 0; i < bytes.length; i++) {digital=bytes[i];if(digital<0){digital+=256;}if (digital<16) {md5str.append("0");}md5str.append(Integer.toHexString(digital));}return md5str.toString().toLowerCase();}}

2.eclipse的工程截图
 

3.导出jar包




4.将导出的jar包放到JMeter安装目录下的lib文件夹下



5.打开JMeter,新建测试计划,添加线程组,新建BeanShell Sampler,并写入以下测试内容
//导入jar包import com.cjh.md5.MD5Util;//调用md5Hex方法生成最终的加密串String param="${ChallengeString}";String pass=MD5Util.getMD5(param);System.out.println(pass);//将生成的加密串赋值给变量authcode,这样可以便于后续的使用vars.put("code",pass);




添加监听器->查看结果树,运行测试,可以看到JMeter控制台中输出了加密后的字符串




检测加密结果是否正确,在百度上搜索“md5在线加密”
我加密的数据是5c1110a935c062e1ee672d9f98e7be56:GDS3710IZpRsFzCbM:admin
String param="${ChallengeString}";
String pass=MD5Util.getMD5(param);
System.out.println(pass);
你们在测试的时候可以将这一段修改为:
String pass=MD5Util.getMD5("hello");
System.out.println(pass);
然后你的加密数据是hello:GDS3710IZpRsFzCbM:admin
因为我的ChallengeString是从上一个http请求的返回数据中获取到的,所以如果是仅仅测试加密是否成功的话,给param赋一个定值就行了


与上述窗口打印的数据是一致的,说明md5.jar包导入正确,并且对数据成功加密。



2.JMeter如何将上一个请求的结果作为下一个请求的参数---使用正则表达式提取器
正则表达式提取器是一个后置处理器,作用是在请求完成后,从响应数据中截取一部分字符串保存到变量中,以便下一个请求使用,下面我们就来做一个简单的例子吧(有些地方也是参考一个大神博客写的,如有冒犯,请多原谅!)

1.在第一个HTTP请求下添加正则表达式提取器

 


2.在第一个HTTP请求添加好IP地址,路径,端口号,协议,方法,如果有参数,还需要添加参数




3.点击绿色箭头启动,查看第一个HTTP请求完成后的响应数据




4.第一个HTTP请求完成后的响应数据的ChallengeCode是随机变化的,每次HTTP请求完成后的响应数据的ChallengeCode是不同的,现在需要获取第一个HTTP请求完成后的响应数据的ChallengeCode作为BeanShell Sampler的加密参数,这个时候就需要用到正则表达式提取器,正则表达式提取器是一个后置处理器,作用是在请求完成后,从响应数据中截取一部分字符串保存到变量中,以便下一个请求使用。


5.现在编辑正则表达式提取器




6.说明:
(1)引用名称:作为下一个请求要用的参数名称,如填写ChallengeString,则可用${ChallengeString}引用它来作为BeanShell Sampler的参数
(2)正则表达式用<ChallengeCode></ChallengeCode>包起来,如第一个HTTP请求完成后的响应数据<?xml version="1.0" encoding="UTF-8" ?><Configuration><ResCode>0</ResCode><ChallengeCode>5c1110a935c062e1ee672d9f98e7be56</ChallengeCode><LoginType>0</LoginType><RetMsg>OK</RetMsg></Configuration>,我们只需要ChallengeCode,所以正则表达式为<ChallengeCode>(.+?)</ChallengeCode>,()表示括起来的部分就是要提取的。
.表示匹配任何字符串。
+表示一次或多次。
?表示不要太贪婪,在找到第一个匹配项后停止。
(3)模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$,$3$等,表示解析到第几个值给ChallengeString。如:$1$表示解析到的第1个值,我们这里只有一个正则表达式,所以是$1$。
(4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填1。
(5)缺省值:如果参数没有取得值,那默认给一个值让它取,通常情况下为空。


7.正如我前面写到的BeanShell Sampler程序中有一句代码:String param="${ChallengeString}";这句代码的意思就是使用第一个HTTP请求返回的数据。点击运行。







注:如果是要获取第一个HTTP的响应数据的URL地址的后面数字作为第二个HTTP的参数,做法也是一样的,只是正则表达式不一样。
如第一个HTTP请求完成后的响应数据{"status":"ok","message":"创建房间成功","data":{"url":"https://www.pp2pp.xyz/room/58ff022f5cd4c32ae9a7f457"}} 如果我们只需要URL后面的数字58ff022f5cd4c32ae9a7f457,那么正则表达式为  "url":"https://www.pp2pp.xyz/room/(.+?)"


最终HTTPS验证登录成功






3.JMeter如何实现session保持
 既然都验证登录成功了,那我们总得搞点事情吧?所以光登录成功还不行,还要继续下一步的操作。这就要用到HTTP  Cookie管理器。





添加HTTP  Cookie管理器后,那么现在就可搞事情啦!!!!!!!!!





































































原创粉丝点击