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 各元件执行顺序
- Configuration elements
- Pre-Processors
- Timers
- Sampler
- Post-Processors (unless SampleResult is null)
- Assertions (unless SampleResult is null)
- Listeners (unless SampleResult is null)

***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
jmeter-01 JMeter HTTP测试的各元件功能演示示例的更多相关文章
- Jmeter 01 Jmeter下载安装及入门
jmeter简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域.--百度百科 下载 下载 ...
- Jmeter 04 Jmeter变量的使用
在使用jmeter进行接口测试时,我们难免会遇到需要从上下文中获取测试数据的情况,这个时候就需要引入变量了. 定义变量 添加->配置元件->用户自定义的变量 添加->配置元件-> ...
- (转)使用JMeter进行Web压力测试
使用JMeter进行压力测试 说到压力测试,一般第一反应都是LoadRunner.这个软件也确实是自动化测试的一个事实标准.无奈这个软件太过庞大,以及不能在MacOS上使用.我由于项目的需要,需要对一 ...
- JMeter接口测试和压力测试
JMeter接口测试和压力测试 JMeter可以做接口测试和压力测试.其中接口测试的简单操作包括做http脚本(发get/post请求.加cookie.加header.加权限认证.上传文件).做web ...
- JMeter学习-022-JMeter 分布式测试(性能测试大并发、远程启动解决方案)
在使用 JMeter 进行性能测试时,难免遇到要求并发请求数比较的场景,此时单台测试机的配置(CPU.内存.带宽等)可能无法支持此性能测试场景.因而,此时 JMeter 提供的分布式测试功能就有了用武 ...
- 使用Jmeter至WebService压力测试
使用Jmeter至WebService压力测试 目中我们使用了Jmeter对webservice进行了压力測试,Apache JMeter是Apache组织开发的基于Java的压力測试工具.用于对 ...
- jmeter的使用---web测试
jmeter的使用---web测试 url:http://127.0.0.1:1080/WebTours/ 1.通过badboy录制脚本 1.1输入url点击右侧的跳转按钮,随后右侧显示url界面 1 ...
- JMeter+Ant-自动发送测试结果报告邮件
build.xml文件 将这三个jar包(activation.jar.commons-email-1.2.jar.mail.jar)放到ant下的lib下 (我的是:/usr/local/Cella ...
- jmeter简单得压力测试
Jmeter教程 简单的压力测试 Jmeter是一个非常好用的压力测试工具. Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好. 阅读目录 什么是压力测试 ...
随机推荐
- 【MYSQL】主从常见问题运维
参见Mysql主从常见错误,http://hzcsky.blog.51cto.com/1560073/479476
- Python(线程进程3)
四 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切 ...
- __all__方法的作用
在__all__里面写了谁,到时候就只能用谁,其他的用不了,from 模块 import *时就只能用__all__里的 __all__=['test1','Test'] def test1(): p ...
- scala和正则表达式常用基础知识示例
http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html . 匹配除换行符以外的 ...
- 使用Xib创建自定义视图(不是cell)时需要注意的问题
开发项目过程中,有些地方不免会用到Xib来提高开发效率,如果你的手速够快,写代码建视图,我并不反对这样做.因为我以前也是纯手写代码开发. 进入正题,Xib好用,但是这些下面这些问题需要注意一下. 问题 ...
- Web前端页面的浏览器兼容性测试心得(一)搭建测试用本地静态服务器
自从实习以来,我体验了由一个人编程再到多人协作编程的转换.同时也接触了很多新鲜事物,学到了很多东西.工作时,常常需要多个人协同测试一张H5页面(PC.手机.平板等跨设备测试),也会经常把页面给PM或老 ...
- iscroll.js 用法介绍
iscroll-5中文文档:http://wiki.jikexueyuan.com/project/iscroll-5/ 概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码. ...
- linq分析
例如: var sums = modellist .GroupBy(x => x.userId) .Select(group => new { Peo = group.Key, fist ...
- COGS314. [NOI2004] 郁闷的出纳员
★★★ 输入文件:cashier.in 输出文件:cashier.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] OIER公司是一家大型专业化软件公司,有着数 ...
- OpenStack与Hadoop的区别与联系
Openstack是云操作系统,是将物理机虚拟化的云服务平台,包含各种管理组件及API.Hadoop则是“云计算”中分布式计算核心:存储与计算.但其两者面向是不同层面的.举个例子:比如现有多台底层的物 ...