>[info] 功能描述:使用BeanShell,對入參進行md5簽名;使用BeanShell ,進行斷言
[TOC]
### 測試環境準備
- 服務器IP:10.1.102.75
- 端口號:8000
- 測試接口:/mock/location
- 入參:
ip:IP地址
sign:簽名,簽名規則是md5(key + ip)
- 訪問方法:GET
- 接口功能:如果sign簽名驗證通過,返回規定的模擬響應
- 返回格式:
```
{
code: 1,
msg: "success",
data: {
country: "Thailand",
countryCode: "TH",
city: "Bankok",
ipaddress: "171.96.0.127"
}
}
```
*服務端接口參考代碼(本實例使用django編寫)
功能描述:根據入參ip,安裝約定好的簽名方式重簽名,然后與入參sign對比,如果簽名匹配,則返回規定的模擬響應。*
```python
def location(request):
import hashlib
ip = request.GET.get("ip")
sign = request.GET.get("sign")
key = "Milton_PTQA"
m = hashlib.md5(str(key + ip).encode())
re_sign = m.hexdigest()
if sign == re_sign:
ret = {
"code": 1,
"msg": "success",
"data": {
"country": "Thailand",
"countryCode": "TH",
"city": "Bankok",
"ipaddress": ip
}
}
else:
ret = {
"code": 0,
"msg": "sign error",
"data": []
}
return JsonResponse(ret)
```
### 一、導入包含簽名方法的jar包

其中的md5.jar 是自行編寫的java類,然后導出的jar包,再在jmeter中導入進行使用
md5.java 代碼參考如下:
```java
package com.ssjj.ptqa;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class md5 {
public static String toMD5(String plainText) {
try {
// 生成實現指定摘要算法的 MessageDigest 對象。
MessageDigest md = MessageDigest.getInstance("MD5");
// 使用指定的字節數組更新摘要。
md.update(plainText.getBytes());
// 通過執行諸如填充之類的最終操作完成哈希計算。
byte b[] = md.digest();
// 生成具體的md5密碼到buf數組
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
// 32位加密
return buf.toString();
// System.out.println("32位: " + buf.toString());// 32位的加密
// 16位的加密
// return buf.toString().substring(8, 24);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
public static void main(String agrs[]) {
String sign = new md5().toMD5("b68f05cd86e6633e9e012663ef4727e3203.151.232.104");// 加密LXD
System.out.println(sign);
}
}
```
### 二、定義Jmeter變量
key:Milton_PTQA
ip:171.96.0.127 (隨意填IP即可)

### 三、使用前置BeanShell處理器,進行簽名,并將簽名值賦予變量${sign}

*代碼參考*
```java
import com.ssjj.ptqa.md5;
String ip = vars.get("ip");
String key = vars.get("key");
String pass = new md5().toMD5(key+ip);
//log.info("pass="+ip);
vars.put("sign",pass);
```
### 四、發送HTTP Sampler,引用前置處理器中的變量 ${sign}

### 五、BeanShell 斷言

*參考代碼*
```java
import org.json.*;
//測試國家
String test_area = "Thailand";
String country = "";
String city="";
Boolean result = false;
// 獲取變量值
String ip = vars.get("ip");
// 獲取返回字符串
String jsonString = prev.getResponseDataAsString();
// 將返回字符串構造為Json對象
JSONObject responseJson = new JSONObject(jsonString);
// 獲取json對象中的值
try{
int code = responseJson.getInt("code");
country = responseJson.get("data").get("country").toString();
city = responseJson.get("data").get("city").toString();
}catch(Exception e){
result = true;
}
if(result){
log.error("jsonString--------->:"+jsonString);
}
// 斷言
if(!country.equals(test_area) || result || city.length()==0 ){
Failure=true;
FailureMessage="Error Response:"+jsonString;
}
```
### 六、查看結果樹

<hr style="margin-top:100px">
:-: 
***微信掃一掃,關注“python測試開發圈”,獲取更多測試開發分享!***
- 前言
- Fiddler01-抓包原理介紹與配置
- Fiddler02-菜單功能介紹
- Fiddler03-輕松玩轉Fiddler
- Fiddler04-進階使用FiddlerScript
- Fiddler05-使用FiddlerScript對微信文章互動量進行監控
- Postman01-介紹與安裝
- Postman02-HTTP請求與響應
- Postman03-Collection管理與運行
- Postman04 -變量詳解
- Postman05-初級腳本使用
- Postman06-實例小結篇
- JMeter01-JMeter就是這么簡單
- JMeter02-一個完整實戰包你學會使用JMeter
- JMeter03-在JMeter中使用BeanShell編程
- JMeter04-圖形化和非圖形化運行JMeter
- JMeter05-生成美觀的HTML測試報告
- JMeter06-JMeter+Jenkins實戰
- JMeter07-解析session與cookie