jmeter-01 JMeter HTTP測試的各元件功能演示示例

 最小的測試將包括測試計劃線程組和一個或多個採樣器html

Jmeter HTTP測試的各元件演示示例

功能邏輯:wap官網(a.4399sy.com.hk),每一個用戶登陸一次,發帖2次,發帖成功後註銷退出。java

完整實例結構以下:python

 

步驟一:添加測試計劃web

 

步驟二:添加線程組正則表達式

 

步驟三:添加HTTP Cookie 管理器算法

Cookie管理器會自動管理Cookie信息,在web測試中使用普遍。在本實例中,若是沒有添加Cookie管理器,則登陸後,自動重定向後登陸狀態斷言失敗,發帖失敗。json

 

步驟四:添加HTTP信息頭管理器數組

本元件進行請求header頭管理,本實例中,使用wap官網,需添加微信

User-Agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Mobile Safari/537.36app

若是沒有添加UA,則會形成登陸成功後,頁面重定向到PC官網首頁,形成用戶登陸狀態不正確。

 

步驟五:添加HTTP請求默認值

本元件配置HTTP請求默認值,在其做用範圍內,其他的HTTP Sampler 若是沒有填寫覆蓋默認值,則能夠直接使用默認值。

本實例的全部請求,均在同一個域名內:a.4399sy.com.hk

 

步驟六:添加參數化CSV數據配置

本元件從csv文件中讀取參數值到jmeter變量中。本實例將登陸用戶名和密碼存放在user.csv中,jmeter運行時將其迭代讀取到對應變量name,pwd 中,後續引用如${name},${pwd}

Recycle on EOF?:False        不重複迭代

Stop thread on EOF?:True    csv迭代完成後,退出線程

其中,csv內容以下:

001@126.com,123456
002@126.com,123456

 

步驟七:添加邏輯控制器:僅一次控制器

本元件,一個線程只執行一次,本實例用於控制一個用戶只登陸一次

 

步驟八:添加HTTP Sampler:發送登陸請求

本實例,發送請求參數作了參數化,引用步驟六中的變量${name},${pwd}

 

步驟九:添加斷言:響應斷言

登陸後,頁面重定向到官網首頁,html內容中顯示登陸用戶名,所以響應斷言以下:

 

步驟十:添加邏輯控制器:循環控制器

本元件在此例中,用於控制用戶登陸後,發帖2次

 

步驟十一:添加固定定時器

本元件,主要用於相似思考時間

 

步驟十二:添加HTTP Sampler:發帖留言請求

本Sampler中,引用步驟十三中的前置處理器中定義的變量${content} 和內置函數助手 ${__time(,)}

 

 

步驟十三:添加前置處理器:用戶參數

前置處理器,顧名思義,在Sampler 發送以前執行,本實例中,發帖時,用戶_1 和 用戶_2使用不一樣的發帖內容,而且發帖內容賦予給變量${content}

 

步驟十四:添加斷言:響應斷言

本實例,發帖成功後,返回json中,code=1,發帖失敗,則返回code=-1。因此發帖成功斷言以下:

 

步驟十五:添加後置處理器:正則表達式提取器

根據發帖響應,用正則表達式將code值提取出來,賦予變量${code_result},用於後續的if控制器。

 

步驟十六:添加邏輯控制器:IF控制器

本控制器,用於控制本實例中,若是發帖成功,則進行註銷操做。

 

步驟十七:添加HTTP Sampler:註銷請求

 

步驟十八:添加斷言:響應斷言

註銷成功後,頁面中再也不記錄用戶狀態,斷言以下:

 

步驟十九:添加監聽器:查看結果樹

本元件,用於顯示請求與響應信息

 

步驟二十:添加Debug Sampler

本元件,用於jmeter調試,顯示jmeter變量值 

 

 擴展:BeanShell 使用

使用BeanShell,對入參進行md5簽名;使用BeanShell ,進行斷言

測試環境準備,訪問 http://10.1.102.75:8000/mock/location/?ip=171.96.0.127&sign=e23c21efbd7c388f62155b4aa09e1a75 返回

{
    code: 1,
    msg: "success",
    data: {
        country: "Thailand",
        countryCode: "TH",
        city: "Bankok",
        ipaddress: "171.96.0.127"
    }
}
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)
views 請求處理

 

1、準備jar包

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);
    }
}
md5.java

2、定義Jmeter變量

key:Milton_PTQA

ip:171.96.0.127 (隨意填IP便可)

 

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

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);

4、發送HTTP Sampler,引用前置處理器中的變量 ${sign}

 

 5、BeanShell 斷言

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;    
}

6、查看結果樹

 

 

Execution order 各元件執行順序

  1. Configuration elements
  2. Pre-Processors
  3. Timers
  4. Sampler
  5. Post-Processors (unless SampleResult is null)
  6. Assertions (unless SampleResult is null)
  7. Listeners (unless SampleResult is null)
***微信掃一掃,關注「python測試開發圈」,瞭解更多測試教程!***
相關文章
相關標籤/搜索