文档章节

jmeter测试TCP服务器/模拟发送TCP请求 设置16进制发送(转)

xiaomin0322
 xiaomin0322
发布于 2018/04/27 13:34
字数 1606
阅读 351
收藏 0

转载留存:http://blog.sina.com.cn/s/blog_46d0362d0102v8ii.html

性能测试需要模拟多种场景,经常受制于资源限制,没办法建立贴近实际部署环境的场景。因而需要借助一些软硬件提供的特性来模拟近似的环境。本文提到的JMeter是一种开源的模拟测试解决方案,可以通过多线程并发的方式来持续提供压力测试源。

 

1.下载安装

仅仅需要从apache的网站找到下载包,解压到本地文件目录即可。

http://jmeter.apache.org/download_jmeter.cgi

 

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进制的报文输入配置

参考: https://wiki.apache.org/jmeter/UserManual/Reference/TcpSampler

当前支持三种格式 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采样器

jmeter-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

 

本文转载自:https://www.cnblogs.com/zhengah/p/4876918.html

共有 人打赏支持
xiaomin0322
粉丝 130
博文 3637
码字总数 178453
作品 0
上海
架构师
私信 提问
使用Jmeter自动化压测TCP Server经验

使用Jmeter自动化压测TCP Server经验 • Jmeter简介 • Jemter的主要功能 • Jmeter TCP发送方式 • Jmeter 测试TCP配置 • Jmeter快速上手使用 1、Jmeter简介 Apache JMeter是Apache组织开发...

HowieXue
03/20
0
0
五.jmeter代码学习(2)

使用JMeter做压力测试 1.下载Jmeter 地址:http://jmeter.apache.org/downloadjmeter.cgi 2.启动jmeter 运行bin/jmeter.bat 3.添加线程组 在TestPlan节点上右键,Add-->Threads(Users)-->......

木子木
2014/03/24
0
1
使用JMeter进行性能测试

JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现。 JMeter作用领域 JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、数据...

红薯
2008/12/01
5.1K
10
利用Jmeter进行http接口性能测试

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻...

程序猿拿Q
01/11
0
0
Jmeter基础之---jmeter基础概念

JMeter 介绍: 一个非常优秀的开源的性能测试工具。 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来。 从性能工具的原理划分: Jmeter工具和其他性能工具在原理上完全一致,...

长平狐
2013/03/12
184
0

没有更多内容

加载失败,请刷新页面

加载更多

[Flowable]6.4.1五个war包部署

直接放tomcat http://localhost:8080/flowable-task http://localhost:8080/flowable-modeler http://localhost:8080/flowable-idm http://localhost:8080/flowable-admin http://localhost:......

Danni3
19分钟前
0
0
扩展spring cache 支持缓存多租户及其自动过期

spring cache 的概念 Spring 支持基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使用的抽象,通过在既有代...

冷冷gg
24分钟前
0
0
Kafka连接器深度解读之转换器和序列化释疑

Kafka连接器是Apache Kafka®的一部分,提供数据存储与Kafka之间的流式集成。对于数据工程师来说,只需要使用JSON格式配置文件即可。目前已经有很多数据存储的连接器,仅举几例来说,包括JDB...

李玉珏
30分钟前
0
0
二进制取反

取反,是Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。 概念 编辑 补码的规定如下: 对正数来说,最高位为0,其余各位代表数值本身(以二进制表示)...

天王盖地虎626
今天
5
0
OSChina 周一乱弹 —— 可乐进化史

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# 分享Radiohead的单曲《Creep》 《Creep》- Radiohead 手机党少年们想听歌,请使劲儿戳(这里) @EdmondFrank :刚...

小小编辑
今天
960
17

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部