1. 程式人生 > >JMeter介面測試-HTTPS驗證登入

JMeter介面測試-HTTPS驗證登入

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管理器後,那麼現在就可搞事情啦!!!!!!!!!