zoukankan      html  css  js  c++  java
  • jmeter-01 JMeter HTTP测试的各元件功能演示示例

     最小的测试将包括测试计划线程组和一个或多个采样器

    Jmeter HTTP测试的各元件演示示例

    功能逻辑:wap官网(a.4399sy.com.hk),每个用户登录一次,发帖2次,发帖成功后注销退出。

    完整实例结构如下:

    步骤一:添加测试计划

    步骤二:添加线程组

    步骤三:添加HTTP Cookie 管理器

    Cookie管理器会自动管理Cookie信息,在web测试中使用广泛。在本实例中,如果没有添加Cookie管理器,则登录后,自动重定向后登录状态断言失败,发帖失败。

    步骤四:添加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.36

    如果没有添加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 请求处理

    一、准备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

    二、定义Jmeter变量

    key:Milton_PTQA

    ip:171.96.0.127 (随意填IP即可)

    三、使用前置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);

    四、发送HTTP Sampler,引用前置处理器中的变量 ${sign}

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

    六、查看结果树

    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测试开发圈”,了解更多测试教程!***
  • 相关阅读:
    Visual Studio2019安装步骤
    写在第一页的话
    数状数组
    hdu 3501 数学题
    静态邻接表
    最长子序列
    hdu 1094 所想到的
    bellman_ford
    郁闷的一晚
    SPFA + 静态邻接表 模板
  • 原文地址:https://www.cnblogs.com/guanfuchang/p/7804604.html
Copyright © 2011-2022 走看看