转载留存:http://blog.sina.com.cn/s/blog_46d0362d0102v8ii.html
性能测试需要模拟多种场景,经常受制于资源限制,没办法建立贴近实际部署环境的场景。因而需要借助一些软硬件提供的特性来模拟近似的环境。本文提到的JMeter是一种开源的模拟测试解决方案,可以通过多线程并发的方式来持续提供压力测试源。
 
1.下载安装
仅仅需要从apache的网站找到下载包,解压到本地文件目录即可。
 
2.启动
解压目录中存在一个bin的目录,里面有很多批处理文件和脚本文件,window系统运行jmeter.bat即可。需要关注的是bin目录中的jmeter.properties文件,这是运行相关的配置文件. 特别是TCP Sampler configuration部分几个配置会和后面内容相关
 
3.建立一种类型测试
这里只描述简单的tcp测试建立步骤,因为目前支持的测试类型很多,无法一一陈述,功能细节部分可以参考JMeter文档
1)创建测试线程组
2)根据需要设定线程组参数
3)建立TCP采样
3)配置TCP采样参数
基本上一个简单的测试计划就完成了,点击运行采样,就会将文本发送出去。

4.高级功能配置

1)配置结果查看监听器
有时候需要查看线程组执行结果情况,这个可以通过设定采样结果查看
 
 
针对上面配置的线程组应该执行6次,也就是发送6条消息,通过监控器可以看到的确有6个采样结果,说明执行成功
2)配置变量
有时候需要在报文中加上一些变化的内容,可以通过在文本中增加变量设定来实现

如增加一个变量名 bank, 其值为 1111,在前面发送的报文中加上${bank}即可引用,如

执行之后就可以在监控器中看到报文中有1111了

 
3)配置TCP 二进制报文
大多数情况下,报文可能非纯文本形式,常常都是不可读的二进制,所以这种情况下需要配置二进制报文。当前JMeter支持HEX形式,也就是16进制的报文输入配置
当前支持三种格式 1.TCPClientImpl(默认) 2.BinaryTCPClientImpl
3.LengthPrefixedBinaryTCPClientImpl
 
使用二进制方式需要做如下几件事:
a.把普通文本报文翻译成HEX格式,可以找文本编辑器做这件事。比如notepad++,打开文本文件
Ctrl+A全选内容,paste到一个新文件,替换掉所有空格
3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e3c544c533e3c707273636f64653e6c6f67696e3c2f707273636f64653e3c69643e313233343536373c2f69643e3c746f6b656e3e75736a64666a6b736137356b733833326f6b7564736a643934383737616b6a6475613c2f746f6b656e3e3c2f544c533e
 
 

如果报文还需要加上头的话,需要额外计算一下。比如增加一个command
id和报文长度。比如上文中文本长度在编辑器状态栏上显示155长,假定command id是1.

System.out.println("155 hex " +
Integer.toHexString(155));  --- 9b
System.out.println("1 hex " +
Integer.toHexString(1));  ---1
如果command id是4个字节那么16进制字符串就是 00 00 00 01
如果length也是4个字节那么16进制字符串就是 00 00 00 9b
去掉空格加入到前面报文中就拼成如下新报文
000000010000009b3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e3c544c533e3c707273636f64653e6c6f67696e3c2f707273636f64653e3c69643e313233343536373c2f69643e3c746f6b656e3e75736a64666a6b736137356b733833326f6b7564736a643934383737616b6a6475613c2f746f6b656e3e3c2f544c533e
 
再把新报文放入发送字符串输入框中。
 
b.修改JMeter启动配置,就是前文提到的指定BinaryTCPClientImpl适配
在jmeter.properties文件中找到如下部分,修改一下
#---------------------------------------------------------------------------

# TCP Sampler configuration
#---------------------------------------------------------------------------

# The default handler class
#tcp.handler=TCPClientImpl
tcp.handler=BinaryTCPClientImpl
 
重新执行TCP测试,可以看到服务器端正常收到报文,如图

jmeter测试TCP服务器,使用TCP采样器模拟发送TCP请求。

TCP采样器:打开一个到指定服务器的TCP / IP连接,然后发送指定文本并等待响应。

jmeter模拟发送TCP请求的方法:

1.新建线程组,然后在线程组中新建TCP采样器

TCP采样器中填写服务器地址、端口和“要发送的文本”,其它选项根据需要选填:

re_use connection表示重复发送连接请求

close connection 关闭连接

如果TCP请求需要用户名/密码,可以在登录配置中填写

2.新建“察看结果树”监视器,查看发送的请求和响应的结果。如果需要发送16进制报文这个地方会失败。

jmeter发送16进制TCP报文的方法:

很多TCP服务器报文为16进制,并且多数不能转换成文本发送,而jmeter默认发送文本。

jmeter.properties中修改tcp.handler=BinaryTCPClientImpl ,启动jmeter重新发送,抓包查看既是16进制的tcp报文。

另一个方法:可以在工作台新建–非测试元件–Property Display,Property Display中修改jmeter.properties只对当前进程有效。

转载请注明出处:6san.com
原文地址: http://www.6san.com/716/

Jmeter TCP取样器配置及发送图解

 

最近在通过Jmeter测试TCP发送请求时,遇到相关问题,现记录

查看管方文档,TCP发送有三种启用方式:

  • TCPClientImpl:文本数据,默认为这种
  • BinaryTCPClientImpl:传输16进制数据,指定包结束符。这种16进制文件会通过Jmeter GUI来转换
  • LengthPrefixedBinaryTCPClientImpl:数据包中前2个字节为数据长度。可在bin/jmeter.properties配置文件中tcp.binarylength.prefix.length设置。

在实际抓包过程中,TCP的数据包很多时候都不是纯文本的,经常是一些二进制文件之类的,所以这里就直接用传16进制方式来传数据

在启动jmeter之前,需要在在启动文件中设置,如下:

#---------------------------------------------------------------------------
# TCP Sampler configuration
#---------------------------------------------------------------------------

# The default handler class
#tcp.handler=TCPClientImpl
tcp.handler=BinaryTCPClientImpl
#
# eolByte = byte value for end of line
# set this to a value outside the range -128 to +127 to skip eol checking
#tcp.eolByte=1000

关键来了,我怎么获取这个16进制数据呢?这里用wireshark可以很好解决这个问题,操作如下:

下图是抓到的包,怎么抓包这里就不介绍了:

第二步:右键点击Data--->Copy-->Bytes-->HEX Stream,如下图:

完成后,直接在Ctrl+V贴入Jemeter的文本框中

发送就成功,查看结果树中正好是我们想要的内容:

参考文档:http://jmeter.apache.org/usermanual/component_reference.html#TCP_Sampler

jmeter测试TCP服务器/模拟发送TCP请求 设置16进制发送(转)的更多相关文章

  1. jmeter ---测试TCP服务器/模拟发送TCP请求

    jmeter测试TCP服务器/模拟发送TCP请求 jmeter测试TCP服务器,使用TCP采样器模拟发送TCP请求. TCP采样器:打开一个到指定服务器的TCP / IP连接,然后发送指定文本并等待响 ...

  2. jmeter测试TCP服务器/模拟发送TCP请求

    jmeter测试TCP服务器,使用TCP采样器模拟发送TCP请求. TCP采样器:打开一个到指定服务器的TCP / IP连接,然后发送指定文本并等待响应. jmeter模拟发送TCP请求的方法: 1. ...

  3. PHP模拟发送POST请求之五curl基本使用和多线程优化

    今天来介绍PHP模拟发送POST请求的重型武器——cURL函数库的使用和其多线程的优化方法. 说起cURL函数,可谓是老生常谈,但网上许多资料都在关键部分语焉不详,列出一大堆手册上的东西,搞得我入门时 ...

  4. PHP模拟发送POST请求之一、HTTP协议头部解析

    WEB开发中信息基本全是在POST与GET请求与响应中进行,GET因其基于URL的直观,易被我们了解,可POST请求因其信息的隐蔽,在安全的同时,也给开发者们模拟发送带来了麻烦.接下来的几篇博文中,我 ...

  5. 模拟发送http请求的工具推荐

    做网站开发时,经常需要发送请求来测试自己的代码是否OK,这时候模拟发送http请求的工具就起到了很大的作用.特别是需要在请求带header时就更加的有必要使用工具.下面推荐的工具有的是基于系统开发的程 ...

  6. WebClient模拟发送Post请求

    WebClient模拟发送Post请求方法: /// <summary> /// 模拟post请求 /// </summary> /// <param name=&quo ...

  7. jmeter ---模拟发送TCP/UDP/HTTP/FTP等请求包

    JMeter安装UDP插件后支持发送UDP协议的请求包,官方介绍安装插件后可以用来测试DNS, NTP, TFTP, Boot servers and many-many other systems. ...

  8. Jmeter(二十七)模拟发送TCP/UDP/HTTP/FTP等请求包(转载)

    转载自 http://www.cnblogs.com/yangxia-test JMeter安装UDP插件后支持发送UDP协议的请求包,官方介绍安装插件后可以用来测试DNS, NTP, TFTP, B ...

  9. Swoole系列(三):建立TCP服务器并发送数据测试

    <?php // 建立tcp服务器下 $host = '0.0.0.0'; $port = 9501; $serv = new swoole_server($host,$port); $serv ...

随机推荐

  1. Servlet 调用过程

    上图的大概意思: 前台输入访问路径后,浏览器会去访问本地的host文件查询有木有与之匹配域名的IP地址,若无则在访问DNS服务器查询与之匹配的IP地址.解析IP后则开始发起HTTP请求,根据请求中的基 ...

  2. serversql tinkphp

    public function iconv2utf8($Result) {         $Row=array();                    $key1=array_keys($Res ...

  3. Python的异步编程[0] -> 协程[0] -> 协程和 async / await

    协程 / Coroutine 目录 生产者消费者模型 从生成器到异步协程– async/await 协程是在一个线程执行过程中可以在一个子程序的预定或者随机位置中断,然后转而执行别的子程序,在适当的时 ...

  4. 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP)

    layout: post title: 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP) author: "luowentaoaa" catalog: true ...

  5. CentOS 7 下nagios搭建记录

    跟随 园子的文章搭建 http://www.cnblogs.com/mchina/archive/2013/02/20/2883404.html 1.遇 nagios插件地址迁移错误,记录解决. 2. ...

  6. IntelliJ IDEA Mac破解教程

    1.将下面的文件下载并放置到: 下载地址: http://idea.lanyus.com/jar/JetbrainsCrack-2.6.10-release-enc.jar 放到: /Applicat ...

  7. 【分块】bzoj3196 Tyvj 1730 二逼平衡树

    分块 或 树套树. 在每个块中维护一个有序表,查询时各种二分,全都是分块的经典操作,就不详细说了. 块的大小定为sqrt(n*log2(n))比较快. #include<cstdio> # ...

  8. iOS 10 资料整理笔记

    1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserN ...

  9. [bug] VS2013 Brower Link和Aspnetpager引发的问题分析

    概述 在ie11上浏览页面的时候,突然发现在使用Aspnetpager的页面会有一个bug. 开发环境:win8.1+vs2013+ie11. 项目描述:这个问题出现在内容页中,应用了母版页. 解决方 ...

  10. 再谈 Promise

    读完这篇文章,预计会消耗你 40 分钟的时间. Ajax 出现的时候,刮来了一阵异步之风,现在 Nodejs 火爆,又一阵异步狂风刮了过来.需求是越来越苛刻,用户对性能的要求也是越来越高,随之而来的是 ...