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

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 hashlibip = 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测试开发圈”,了解更多测试教程!***

转载于:https://www.cnblogs.com/guanfuchang/p/7804604.html

jmeter-01 JMeter HTTP测试的各元件功能演示示例相关推荐

  1. Istio测试环境搭建和功能演示

    Istio 测试环境搭建和功能演示 本文提供Windows 10下Istio环境的配置安装步骤,以及简单的Bookinfo示例功能验证.首先搭建一个基于Minikube和VirtualBox的本地Ku ...

  2. selenium 示例_Selenium测试中所需的功能和示例

    selenium 示例 所需功能是用于声明一组基本要求(例如浏览器,操作系统,浏览器版本等的组合)的类,以对Web应用程序执行自动跨浏览器测试. 当我们尝试通过Selenium自动化测试来自动化测试脚 ...

  3. 硒测试中所需的功能和示例

    所需功能是用于声明一组基本要求(例如浏览器,操作系统,浏览器版本等的组合)的类,以对Web应用程序执行自动跨浏览器测试. 当我们尝试通过Selenium自动化测试来自动化测试脚本时,我们需要考虑这些组 ...

  4. (转)使用JMeter进行Web压力测试

    使用JMeter进行压力测试 说到压力测试,一般第一反应都是LoadRunner.这个软件也确实是自动化测试的一个事实标准.无奈这个软件太过庞大,以及不能在MacOS上使用.我由于项目的需要,需要对一 ...

  5. JMeter Linux下执行测试

    JMeter在本机上运行压测脚本时,一般会有两个瓶颈: 网络:本机与服务器之间的网络开销,会严重影响服务的性能表现.而且,本机与服务器一般不在同一个网段,网络瓶颈会更加明显. 本机性能:工作所用的笔记 ...

  6. 全网最新最全的jmeter接口测试,压力测试

    目录 一.前言 二.接口测试 2.1Jmeter-http接口脚本 2.2Jmeter-webservice接口脚本 三.压力测试 3.1压测任务需求的确认 3.2压测设置 3.3压测结果查看 3.4 ...

  7. 告诉你怎么在Jmeter中进行压力测试

    一.什么是压力测试 软件测试中:压力测试(Stress Test),也称为强度测试.负载测试.压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统 ...

  8. jmeter可以做哪些测试?

    一.JMeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具.作用有: 1.能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通 ...

  9. 使用Jmeter至WebService压力测试

    使用Jmeter至WebService压力测试   目中我们使用了Jmeter对webservice进行了压力測试,Apache JMeter是Apache组织开发的基于Java的压力測试工具.用于对 ...

  10. 学习笔记-JMeter 进行接口压力测试

    一.压力测试场景设置 1.场景设定:进行接口压力测试时,有单场景也有混合场景.单场景就是对一个接口进行请求:混合场景需要对多个接口进行请求,在流程类业务场景会运用到 2.压测时间设定:通常时间为10- ...

最新文章

  1. word如何书写数学公式
  2. vscode格式化代码无效--可能的解决方法
  3. UVa11464 - Even Parity(递推法)
  4. Hibernate关联映射-数据对象三种关系
  5. 算法设计与分析(第三周)递归/迭代求Fibonacci前n项 【以及递归算法速度慢的原因】
  6. 【JAVASCRIPT】表单序列化问题
  7. [BZOJ2458][BeiJing2011]最小三角形
  8. 上传图片截图预览控件不显示cropper.js 跨域问题
  9. 支付宝将砸十亿支持中国女足发展:她们才是第一女子天团
  10. linux之ps命令
  11. 监控延迟严重怎么解决_监控画面故障解决:网络监控画面没有图像显示或无视频信号怎么办...
  12. matlab导出prn文件怎么打开,prn文件介绍及打印方法
  13. 共饮维港夜色,TUV南德香港啤酒节精彩落幕
  14. 粥左罗教你从零开始学写作笔记系列
  15. SentiLR:Linguistic Knowledge Enhanced Language Representation for Sentiment Analysis 论文阅读笔记
  16. linux获取本机ip地址函数,Linux编程获取本机IP地址
  17. 等差数列计算机函数公式大全,等差数列公式大全
  18. 新华三联合英特尔共同增强服务器内存的可靠性
  19. WEB网页设计前端(前台)开发的常用工具推荐
  20. STM32F103C6T6 | 模拟IIC主机读取AHT20温湿度传感器数据

热门文章

  1. 在mybatis里面配置外部资源文件
  2. 设计模式---简单工厂模式(c++实现)
  3. mac docker nginx 配置
  4. jQuery数据存储的相关方法
  5. 【渝粤教育】广东开放大学 跨文化商务沟通 形成性考核 (39)
  6. ??? Error using == Inner matrix dimensions must agree.
  7. adodb.recordset.open方法的参数
  8. 经典机器学习系列(十二)【学习排序】
  9. 【转】Laplace 算子
  10. 中国软件离制造业还是太远