每周读书与学习->初识JMeter 元件(三)

每周读书与学习是由清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书的作者推出,分享作者多年的IT从业经历,希望对很多计算机科学技术IT类专业毕业生以及IT从业者有所帮助。

1、取样器

在Jmeter中,取样器通常用来模拟并发用户发出实际请求的操作,向待性能压测的对象发送请求以及接收相应的响应数据。取样器是Jmeter 性能压测的核心组件,如下图所示,通常情况下,如果需要完成一个性能测试场景,那么肯定是离不开取样器的。

从图中可以看到取样器主要包括:

  • 测试活动:是一种用于条件控制的取样器,该取样器不是用于发出请求,而是用于暂停或者停止取样活动,该取样器包含如下功能:

    • Logical Action on Thread-Pause:暂停线程发出取样请求,支持设置暂停的时长,单位为毫秒。
    • Logical Action on Thread-Start Next Thread Loop:直接启动下一个线程循环的操作。
    • Logical Action on Thread-Go to next iteration of Current Loop:直接转到当前循环的下一次迭代操作。
    • Logical Action on Thread-Break Current Loop:直接暂停当前循环的操作。
    • Logical Action on Thread/Test-Stop:等待线程完成相应的操作后,停止当前线程或者所有线程。
    • Logical Action on Thread/Test-Stop Now:直接停止当前线程或者所有线程。
  • HTTP请求:HTTP请求取样器是指可以向指定的Web服务发送HTTP或者HTTPS请求,如果需要对一个HTTP或者HTTPS协议的服务做性能压测,就需要用到该取样器,由于Web服务是一种最常见的服务,所以HTTP请求取样器通常是使用频率最高的取样器。HTTP取样器界面中主要包含如下参数:

    • 协议:默认为HTTP,支持填入HTTP、HTTPS 或者 FILE,FILE协议主要用于访问本地计算机中的文件。
    • 服务器名称或IP:用于设置服务端的IP或者域名地址。
    • 端口号:用于设置服务端的端口号,如果不设置的话,当协议为HTTP时,端口号默认为80,当协议为HTTPS的时候,端口号默认为443。
    • HTTP或者FILE请求的类型:可以通过下拉框来选择HTTP请求的类型,HTTP协议支持的请求类型包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE、PATCH。FILE协议支持的请求类型包括PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK、UNLOCK、REPORT、MKCALENDAR、SEARCH,其中最常用的HTTP请求类型就是GET和POST,我们平时在浏览器中的大部分Web操作基本也都是这两种类型的请求居多。
    • 路径:通常指的是HTTP请求地址路径,但是该地址路径不包含协议名和服务器地址,比如服务端的服务地址http://www.baidu.com/context/url ,那此时路径就应该是/context/url。
    • 内容编码:指的是对发送HTTP请求的内容设置编码字符集,通常用于POST、PUT、PATCH请求,并且此处的内容编码不会与HTTP 请求头中的Content-Encoding有任何的关联关系。
    • 自动重定向:重定向是指HTTP请求会自动重定向到下一个HTTP请求,比如当客户端向服务端发出请求后,服务端可以发送和返回一个特殊的HTTP 响应码来告诉客户端需要重定向到一个新的服务端地址来获取最终的响应,如下图所示。

当重定向为自动重定向时,如果Jmeter收到了重定向后将会自动进行重定向,但是自动重定向只针对POST和GET请求,在Jmeter的日志中是不会特别记录重定向过程的。

    • 跟随重定向:如果需要使用跟随重定向,那就不能勾选自动重定向,当同时了勾选了自动重定向和跟随重定向时,只有自动重定向会生效。Jmeter会记录跟随重定向过程中的所有请求响应,此时可以通过Jmeter监听器中的查看结果树这个元件来查看跟随重定向的请求与响应内容,通常来说,当HTTP 响应的CODE码为302或者301时,需要使用跟随重定向来进行处理。在HTTP 响应的CODE中,当CODE为以3开头时,通常表示的是一个重定向响应。
    • 使用KeepAlive:是指Jmeter在发出HTTP的取样器请求时,会在HTTP的请求头中添加Connection:keep-alive,表示保持当前的连接为活动状态,让当前连接可以复用,在高并发的压测场景中启用 Keep-Alive 模式肯定通常会更高效,性能会更,因为可以避免建立/释放连接的带来的开销。
    • 对POST使用multipart/form-data:表示使用multipart/form-data的方式来提交HTTP POST表单请求(即将 HTTP 请求头的Content-Type设置为multipart/form-data),multipart通常表示允许客户端在一次HTTP POST 请求中,通过多个Part的方式来向服务端发送数据,如下图所示的HTTP的POST请求中,包含了多个DATA,而每个DATA都可以有自己单独的Content-Type,客户端使用multipart的方式将这些DATA 一次都提交给服务端。
    • 与浏览器兼容的头:通常会与multipart/form-data搭配使用,当使用multipart/form-data来提交POST表单请求时,会屏蔽HTTP请求头中的原有Content-Type和Content-Transfer-Encoding设置,让Content-Type和Content-Transfer-Encoding不起作用,发送HTTP请求时会仅仅在请求头加入Content-Disposition这个请求头。
    • 参数:用于设置HTTP 请求的参数,支持以Key(参数名) Value(参数值)的形式来设置HTTP请求的参数,并且每个参数还可以设置其编码类型和内容类型,常见的内容类型如下所示。
      • 文本类型:
      • text/plain:表示纯文本文件。
      • text/xml:表示XML格式的数据。
      • text/html:表示HTML网页文件格式的数据。
      • text/css:表示CSS样式表文件。
      • text/javascript:表示JavaScript脚本文件。
      • text/csv:表示CSV格式数据。
      • 应用程序类型:
        • application/xml:表示XML数据文件。
        • application/json:表示JSON数据格式。
        • application/pdf:表示PDF文档文件。
        • application/zip:表示ZIP压缩文件。
        • application/x-gzip:表示GZip压缩文件。
        • application/x-tar:表示TAR压缩文件。
        • application/octet-stream:表示二进制数据流,通常用于未知文件类型。
        • multipart类型:
          • multipart/form-data:通常用于HTML表单的方式上传,可以包含文本和二进制数据。
          • multipart/mixed:表示包含多个独立部分的混合体,每个部分可以有不同的类型。
          • multipart/alternative:表示包含同一内容的多个版本,通常是文本和HTML格式的邮件正文。
          • multipart/related:表示包含相互依赖的部分,比如同时包含HTML页面和内嵌的图片或样式表等。
          • multipart/byteranges:表示当响应中包含多个字节范围时使用,通常用于部分内容请求。
          • multipart/report:表示用于邮件报告,通常包含消息和相关的错误报告等。
          • multipart/x-mixed-replace:通常用于表示持续更新的数据流,比如实时图片流等。
          • 图像类型:
            • image/png:表示PNG图像文件。
            • image/jpeg:表示JPEG图像文件。
            • image/gif:表示GIF动画图像文件。
            • image/bmp:表示BMP图像文件。
            • image/svg+xml:表示SVG矢量图像文件。
          • 音频类型:
            • audio/wav:表示WAV音频文件。
            • audio/mpeg:表示MP3音频文件。
            • audio/ogg:表示OGG音频文件。
            • audio/webm:表示WebM音频文件。
          • 视频类型:
            • video/avi:表示AVI视频文件。
            • video/mp4:表示MP4视频文件。
            • video/quicktime:表示QuickTime视频文件。
            • video/webm:表示WebM视频文件。
    • 消息体数据:用于设置POST 请求的消息体(通常又叫HTTP Body),这个通常仅用于POST 请求,在HTTP协议规范中,比如像GET等其他请求是没用消息体这一说的。
    • 文件上传:用于设置文件上传的参数,当使用Jmeter做性能压测时,如果是对一个文件上传接口做性能压测,那么就需要用到文件上传这个选项了,设置文件上传时,文件名称通常填入文件的绝对路径,比如需要上传D盘根目录下的1.jpg文件,那么就应该填入d:\1.jpg,参数名称填入HTTP请求接口中要求的参数名即可。
    • 客户端实现:客户端实现位于HTTP 取样器请求的高级选项中,用于选择客户端的实现方式,在Jmeter中客户端的实现包括Java和HttpClient4两个选项,HttpClient4指的是使用外部第三方封装好的JAR包来直接发送HTTP取样器请求,而Java表示Jmeter使用Java原生底层JDK的方式来发送HTTP取样器请求,当没用指定该选项时,会从Jmeter 熟悉配置文件中读取JMeter.httpsampler的值来决定使用哪种客户端实现,如果属性配置文件中也没有进行设置,那么会直接使用HttpClient4。
    • 超时连接:用于设置打开连接的超时的时长,单位为毫秒。
    • 响应超时:用于设置响应超时的时长,单位为毫秒。
    • 从HTML文件获取所有内涵的资源:用于设置让Jmeter从HTML文件中解析其中被引用到的图片、Java小程序、JavaScrip文件等其他资源文件,可以同时通过正则表达式的方式来设置网址必须匹配和URLS must not match 来自定义确定需要解析哪些资源文件。
    • 源地址:用于设置Jmeter发送请求时的源地址,该源地址通常可以为某个IP或者电脑的主机名,也可以为某个网卡的设备等。
    • 代理服务器:用于设置网络代理服务器的IP、端口号、用户名和密码等信息。通常当发送HTTP取样器请求需要用到网络代理时,才需要设置代理服务器的相关信息。
  • 调试取样器:用于生成一个包含所有JMeter变量和属性值的取样器请求,可以通过Jmeter监听器中的查看结果树这个元件来查看到具体获取到的变量和属性值,通常在调试Jmeter性能测试脚本时才会用到。

  • JSR223 Sampler:指的是使用JSR223(全称为Java Specification Request 223,是一个Java语言平台发布的规范)脚本语言来生成取样器请求,支持BeanShell、Bash、EcmaScript、Groovy、Java、JavaScript、Jexl、Jexl2等脚本语言,同时也支持将外部参数传递给脚本作为参数来使用。

  • AJP/1.3 取样器:该取样器和HTTP请求取样器很类似,该取样器使用Tomcat mod_jk协议,并且当需要文件上传时,不支持多文件上传,仅仅使用第一个文件,该取样器的其他配置和HTTP请求取样器几乎一致,可以参考HTTP请求取样器进行设置。

  • Access Log Sampler:用于通过读取访问日志的方式来生成HTTP请求,支持的访问日志应用包括Tomcat(Java语言编写的应用服务容器)、Resin(CAUCHO公司下的应用服务容器,同样采用Java语言编写)、Weblogic(Oracle公司下的一个应用服务容器)等,比如某个Tomcat的访问日志如下:

127.0.0.1 - - [21/Oct/2003:05:37:21 -0500] "GET /index.jsp?%2Findex.jsp= HTTP/1.1" 200 8343

通过Access Log Sampler即可读取这条日志中的请求类型、请求地址等信息来生成一个新的 HTTP请求。

  • BeanShell 取样器:通过编写BeanShell脚本语言的方式来生成取样器请求,支持将外部参数传递给脚本作为参数来使用。
  • Bolt Request:该取样器用于通过Bolt网络应用协议运行Cypher(一种专门为查询图而优化设计的标准查询语言)查询,通常与配置元件中的Bolt Connection Configuration元件搭配使用,比如对Neo4j数据库(一个高性能的NOSQL图形数据库)进行性能压测时,就可以采用该取样器。
  • FTP请求:FTP请求取样器用于向FTP协议的服务器发起请求,支持向FTP服务器发送检索文件或者上传文件、下载文件等请求,该请求取样器在界面中包含的参数如下:
    • 服务器名称或IP:设置FTP服务器的域名或者IP地址。
    • 端口号:设置FTP服务器的端口号。
    • 远程文件:要检索的文件或要上传的目标文件的名称。
    • 本地文件:要上传的文件或下载的目标(通常默认为远程文件中填写的文件名称)。
    • 本地文件内容:设置需要上传的文件内容,该设置会覆盖本地文件的设置,即当设置了本地文件内容后,本地文件配置就不生效。
    • 选择请求类型:选择是检索获取文件还是上传文件。
    • 使用二进制模式:设置是否使用二进制模式来传输文件,默认为ASCII模式。
    • 保存文件响应:是否将检索到的文件内容存储到响应数据中,如果传输模式为ASCII,则内容将在Jmeter监听器中的查看结果树这个元件中可查看到。
    • 登录配置:指设置FTP服务器的用户名和密码,如果FTP服务器支持匿名访问,可以不设置登录配置。
  • GraphQL HTTP Request:GraphQL HTTP Request取样器是HTTP请求取样器的一种特殊形式,用于通过HTTP请求的方式对GraphQL API进行查询或者编辑等操作,GraphQL 是一种API服务的查询的语言,与传统的 RESTful API不同,GraphQL API 对数据提供了一套简单并且容易理解的完整描述,使得客户端请求能够更加准确的获取其需要的数据。GraphQL HTTP Request取样器的界面参数和HTTP请求取样器非常类似,但是GraphQL HTTP Request取样器中新增了如下参数:
    • Query:用于设置GraphQL查询语句,是一个必填参数。
    • Variables:用于以JSON字符串的方式来设置GraphQL查询变量,非必填参数。

如下图所示是一个Query语句和Variables之间的对应关系,在查询语句中需要用到id变量,然后在Variables中通过JSON字符串的方式来设置了id的值。

  • JDBC Request:JDBC Request取样器是通过JDBC传输协议的方式向数据库发起查询、修改、删除等请求,只要是支持JDBC协议的数据库都可以通过JDBC Request取样器来进行性能压测。JDBC Request取样器通常与配置元件中的JDBC Connection Configuration元件一起搭配使用,在JDBC Connection Configuration元件中设置待进行性能压测的JDBC数据服务器的相关连接等配置信息,然后通过JDBC Request取样器向数据库发起请求,JDBC Request取样器包含的参数如下:
    • Variable Name of Pool declared in JDBC Connection Configuration:用于设置在JDBC Connection Configuration元件中设置的名称,这样JDBC Request取样器就知道应该从哪个Connection Configuration元件中读取配置信息了。
    • Query Type:选择查询的类型,支持Select(查询)、Update(更新)、Callable(调用)、Commit(提交)、Rollback(回滚)等类型。
    • SQL Query:用于设置需要执行的SQL语句。
    • Parameter values:设置SQL语句中用到的参数。
    • Parameter types:设置SQL语句中用到的参数类型。

如下图所示是一个在SQL查询语句中如何设置SQL语句中用到的参数和参数类型的示例,在SQL语句中用两个问号来定义了需要传入的两个变量,而在Parameter values中通过逗号分割的方式按照顺序传入了两个实际的参数值,并且在Parameter types中通过逗号分割的方式按照顺序的方式定义了这两个实际的参数值的数据类型,数据类型通常是指的Java开发语言中的基本数据类型,这些基本数据类型被定义在Java JDK的java.sql.Types这个class类中,可以通过访问http://docs.oracle.com/javase/8/docs/api/java/sql/Types.html 获取常见的基本数据类型详细说明。

    • Variable Names:用于设置变量名称。
    • Result Variable Name:用于将查询的结果设置保存为一个变量,以供性能压测的其他步骤中可以进行引用。
    • Query timeout(s):用于设置查询的超时时长,单位为秒。
    • Limit ResultSet:用于设置对查询的结果集的返回的记录数量的限制,如果不设置代表不进行限制。
    • Handle ResultSet:用于设置对查询的结果集进行如何处理,默认为Store As String,表示存储为字符串,同时支持设置为Store As Object(以对象的方式存储,Jmeter是通过Java语言开发,而Java语言是一种面向对象的开发语言,这里的Object指的就是Java语言中的对象)、Count Records(对结果进行统计)等。
  • JMS点到点:JMS点到点取样器是通过点对点连接的方式来发送和接收JMS消息,JMS是Java Message Service的简写,即Java消息服务应用程序接口,通常用于两个Java应用程序之间通过发送JMS消息的方式来进行异步通信,如下图所示,通常是一个应用程序生产消息,而另一个应用程序消费消息,通过消息队列的方式来完成异步通信。

JMS点到点取样器界面包含的参数如下,在使用JMS点到点取样器之前,建议先找一些相关资料学习下JMS消息,这样会更容易理解如下参数的具体含义。

    • QueueConnection Factory:用于设置连接到消息队列工厂的JNDI(Java Naming and Directory Interface的简写,即Java命名和目录接口,是Java底层的一种标准的命名系统接口)名称,该参数为必填。
    • JNDI Name Request queue:用于设置消息发送到的队列的JNDI名称,该参数为必填。
    • JNDI Name Reply queue:用于设置接收队列的JNDI名称,该参数为非必填参数,如果设置了该参数表示Jmeter将监视该参数设置的对应的队列以获取对发送的请求的响应结果。
    • Number of samples to aggregate:用于设置要聚合的消息样本数以方便读取,该参数为必填。
    • JMS Selector:用于设置按照JMS规范定义的消息过滤条件,通常用于设置仅提取符合过滤条件的消息,该参数为非必填参数,该参数的语法格式遵守SQL 92规范(数据库的一个ANSI/ISO标准)。
    • Communication style:用于通过下拉框的方式选择通信的样式,支持Request Only(仅仅发送消息,不会监听该消息的回复)、Request Response(发送消息并且会监听该消息的回复)、Read(仅从队列中读取消息)、Browse(仅浏览消息,并且不会删除消息,比如获取消息的总数量)、Clear(清除队列中的所有消息)。
    • Use alternate fields for message correlation:该复选框用于设置响应消息与原始请求消息的字段类别,如果选中Use Request Message Id代表使用请求JMSMessageID,否则将使用请求JSCorrelationID,如果选中Use Response Message Id将使用响应JMSMessageID,否则将使用响应JMX CorrelationID。
    • Timeout:用于设置回复的消息的超时时长,单位为毫秒,如果在指定时间内未收到回复消息,则取样器执行会失败,如果在超时后收到的特定回复消息将直接被丢弃。默认值为2000毫秒,如果设置为0表示永远不会超时。
    • Expiration:用于设置消息过时前的过期时间,单位为毫秒,如果不指定过期时间,则默认值为0,代表永不过期。
    • Priority:用于设置消息的优先级,从0(最低)到9(最高)共有十个优先级,如果不指定优先级,则默认级别为4。
    • Use non-persistent delivery mode:表示是否启用DeliveryMode.NON_PERSISTENT模式(非持久模式)。
    • Content:用于设置消息的内容。
    • JMS Properties:用于设置JMS属性,JMS属性是指特定于底层消息传递的属性,支持设置名称和值以及类型(默认为字符串类型)。
    • Initial Context Factory:用于初始化消息的上下文工厂,该参数非必填。
    • JNDI properties:用于设置JNDI属性。
    • Provider URL:用于设置提供JMS消息的URL地址。
  • JMS发布:JMS发布取样器用于将JMS消息发送发布到指定的目标主题或者队列中,类似于JMS消息的生产者,当需要对一个JMS消息队列进行发送消息的性能压测时,就需要用到该取样器,该取样器界面包含的参数如下:
    • Use JNDI properties file:用于设置是否使用JNDI属性配置文件,该配置文件必须放在classpath路径(Java语言的类库路径)下,如果不勾选该选项,JMeter将使用"JNDI Initial Context Factory"和"Provider URL" 参数来创建JNDI连接。
    • JNDI Initial Context Factory:用于设置JNDI上下文工厂的名称。
    • Provider URL:用于设置JMS Provider的URL地址。
    • Destination:用于设置JMS 消息的目的地(通常指主题或队列名称)。
    • Setup:用于设置Destination的类型,可以选择At startup(表示目标名称是静态的,在运行中始终不变)和Each sample(表示在每个性能测试样本中,目标名称都是动态的)。
    • Authentication:用于设置JMS Provider身份验证。
    • User:配合Authentication参数一起使用,用于设置身份验证的用户名。
    • Password:配合Authentication参数一起使用,用于设置身份验证的密码。
    • Expiration:用于设置消息过时前的过期时间(单位为毫秒),如果不指定过期时间,则默认值为0(永不过期)。
    • Priority:用于设置消息的优先级。从0(最低)到9(最高)总共有十个优先级。如果不指定优先级,则默认级别为4。
    • Reconnect on error codes (regex):用于设置强制重新连接的JMSException错误代码的正则表达式。如果为空,则不会进行重新连接。
    • Number of samples to aggregate:用于设置要聚合的消息样本数以方便读取,该参数为必填。
    • Message source:用于设置消息源,该参数包括From File(表示从引用的文件中获取,如果选择此选项,表示该文件将被所有样本读取和重用)、Random File from folder specified below(表示从下面指定的文件夹中选择一个随机文件,并且文件夹必须包含扩展名为.dat的Bytes Messages文件,或扩展名为.txt或.obj的Object或Text消息文件)、Text area(表示从文本或者对象中获取消息)三个选项。
    • Message type:用于设置消息的类型,包括Text,、Map、 Object message or、Bytes Message四种类型。
    • Content encoding:用于设置读取消息内容的字符集选项,包括RAW(原始消息加载,不支持变量)、DEFAULT(系统默认编码,支持对变量的处理)、Standard charsets(按照指定的编码来读取文件和处理变量)三种类型。
    • Use non-persistent delivery mode:表示是否启用DeliveryMode.NON_PERSISTENT模式(非持久模式)。
    • JMS Properties:用于设置JMS属性,JMS属性是指特定于底层消息传递的属性,支持设置名称和值以及类型(默认为字符串类型)。
  • JMS订阅:JMS订阅取样器用于从指定的目标消息(主题或队列)中订阅JMS消息,类似于JMS消息的消费者,该取样器界面包含的参数如下:
    • Use JNDI properties file:用于设置是否使用JNDI属性配置文件,该配置文件必须放在classpath路径(Java语言的类库路径)下,如果不勾选该选项,JMeter将使用"JNDI Initial Context Factory"和"Provider URL" 参数来创建JNDI连接。
    • JNDI Initial Context Factory:用于设置JNDI上下文工厂的名称。
    • Provider URL:用于设置JMS Provider的URL地址。
    • Destination:用于设置JMS 消息的目的地(通常指主题或队列名称)。
    • Durable Subscription ID:用于设置持久订阅的ID,首次使用时,如果JMS Provider还不存在相应的队列,它将会自动生成相应的队列。
    • Client ID:用于设置持久订阅时使用的客户端ID,当存在多个并发用户线程时,一定要设置一个类似${__threadNum}这样的变量来进行区分。
    • JMS Selector:用于设置按照JMS规范定义的消息过滤条件,通常用于设置仅提取符合过滤条件的消息,该参数为非必填参数,该参数的语法格式遵守SQL 92规范(数据库的一个ANSI/ISO标准)。
    • Setup:用于设置Destination的类型,可以选择At startup(表示目标名称是静态的,在运行中始终不变)和Each sample(表示在每个性能测试样本中,目标名称都是动态的)。
    • Authentication:用于设置JMS Provider身份验证。
    • User:配合Authentication参数一起使用,用于设置身份验证的用户名。
    • Password:配合Authentication参数一起使用,用于设置身份验证的密码。
    • Number of samples to aggregate:用于设置要聚合的消息样本数以方便读取,该参数为必填。
    • Save response:用于设置取样器是否存储响应结果,如果设置为否,则只返回响应长度。
    • Timeout:用于设置超时的时长(单位为毫秒),如果设置为0表示永不超时。
    • Client:用于选择客户端的实现类型,支持使用MessageConsumer.receive(表示对每个请求的消息都调用接收方法进行接收)和使用MessageListener.onMessage()两种实现类型。
    • Stop between samples:如果勾选了该选项表示Jmeter将在每个性能测试样本结束时调用Connection.stop来停止连接,然后在每个新样本开始时调用Connection.start来启动连接,如果未勾选,表示Jmeter将在线程开始时调用Connection.start,直到线程结束才调用Connection.stop。
    • Separator:用于设置多个消息之间的分隔符,比如支持设置\n、\r、\t来对消息进行分割。
    • Reconnect on error codes (regex):用于设置需要强制重新连接时的JMSException错误代码的正则表达式,如果设置为空,则不会进行重连。
    • Pause between errors (ms):用于设置发生错误时订阅服务器将暂停的时长,单位为毫秒。
  • JUnit请求:JUnit请求取样器用于调用Java的单元测试代码进行取样器操作,该取样器和下面即将要讲解的Java请求取样器很类似,Jmeter在启动时,会扫描Jmeter安装目录的lib\junit目录下实现了Java Junit标准的Java测试类,将符合Junit标准的测试类都加载到Java 虚拟机(即Java的运行环境),这样JUnit请求取样器就可以执行这些Junit测试类,如下图所示,在学习JUnit请求之前,建议读者们先找一些Java语言的基础书籍先学习一下Java语言,在对Java语言有一定了解之后,会更容易理解JUnit请求取样器。

JUnit请求取样器界面包含的主要参数如下:

    • Search for JUnit4 annotations:用于设置是否只选择搜索JUnit4标准的单元测试类来进行测试,Junit标准随着不断的发展,可以分为很多的版本,主流的版本包括Junit3、JUnit4,目前Junit已经有最新的Junit5版本了。
    • Package filter:支持以逗号分割的方式来通过设置Java Package的方式来过滤需要测试单元测试类,在Java语言中,每个Java类都是可以在不同的Package目录下,这样可以更好的管理Java类,避免大量的Java类都是在同一个目录下,不好区分和管理。
    • Class name:用于设置从加载出来的单元测试类中选择自己想要的单元测试类来进行JUnit请求取样测试。
    • Constructor string:用于设置传递给字符串构造函数的字符串,如果设置了字符串,取样器将使用字符串构造函数而不是默认的空构造函数,构造函数是Java开发语言中的一个基础概念,如果对构造函数不了解,可以先从相关书籍中学习一下Java的基础开发,此处不再对构造函数的概念做赘述。
    • Test method:用于选择单元测试类中的测试方法,通常一个单元测试类可以包含多个不同的测试方法,该参数通常会与Class name参数联动选择使用。
    • Success message:用于设置Test method运行成功时输出的消息。
    • Success code:用于设置Test method运行成功时输出的响应码。
    • Failure message:用于设置Test method运行失败时输出的消息。
    • Failure code:用于设置Test method运行失败时输出的响应码。
    • Error message:用于设置Test method运行报错(通常指抛出了异常)时输出的消息。
    • Error code:用于设置Test method运行报错(通常指抛出了异常)时输出的响应码。
    • Do not call setUp and tearDown:用于设置不调用单元测试类中的setUp和tearDown方法,setUp和tearDown是Junit单元测试标准中两个默认的方法,分表用于运行初始化和运行结束时,对相关的运行资源进行销毁,如下图所示,是一个标准的Junit单元测试类的基本结构。
    • Append assertion errors:用于设置是否将断言错误附加到响应消息中,在单元测试中为了判断某个单元测试方法是否执行成功,所以在单元测试方法中都会设置有相应的断言来判断单元测试方法是否执行成功。
    • Append runtime exceptions:用于设置是否将运行时异常(即当运行发送报错抛出异常时)附加到响应消息中。
    • Create a new Instance per sample:当对某个单元测试类进行测试时,用于设置是否需要为每个线程都创建一个新的Junit类实例对象,默认值为false,表示一旦创建了一个实例对象后,在多线程并发用户中每个线程用户都会共享使用这一个实例对象,Java是一个面向对象的开发语言,在运行时,都是以实例对象的方式来运行。
  • Java请求:Java请求取样器用于直接调用Java代码进行取样器操作,该取样器和JUnit请求取样器非常类似,如下图所示,Jmeter在启动时,会扫描Jmeter安装目录的lib\ext目录下符合Java请求取样器标准的Jar包中的Java Class类,然后加载到Java虚拟机中供运行,这些Java Calss 通常都是实现了org.apache.jmeter.prototool.java.sampler. JavaSamplerClient这个抽象接口。

从图中可以看到,Jmeter中很多其他的取样器,比如FTP请求取样器、SMTP取样器、TCP取样器等,都是通过实现了org.apache.jmeter.prototool.java.sampler. JavaSamplerClient这个抽象接口来达到其取样功能的。

在Java请求取样器界面中展示的是两个实现了org.apache.jmeter.prototool.java.sampler. JavaSamplerClient这个抽象接口的测试类,分别为org.apache.jmeter.protocol.java.test.JavaTest和org.apache.jmeter.protocol.java.test.SleepTest,如下图所示,而且在Java请求取样器中,也可以自己指定参数以及该参数对应的值,而且也可以在Jmeter监听器中的查看结果树这个元件中来查看到Java请求以及该请求对应的响应结果,在本书的后续章节中,还会详细介绍如何来实现一个自定义的Java请求取样器。

  • LDAP扩展请求默认值:LDAP扩展请求默认值取样器是用于设置LDAP请求的默认值,LDAP是Lightweight Directory Access Protocol的简写,即轻量目录访问协议,目录服务是一种和数据库很类似的服务,和数据库不同的是,目录服务是以树状的层次结构来存储数据。
  • LDAP请求:LDAP请求取样器用于通过LDAP协议向支持LDAP协议的目录服务发起取样器请求,请求的类型支持添加测试、删除测试、搜索测试、修改测试。LDAP请求取样器界面包含的参数如下:
    • 服务器名称:用于设置目录服务的域名或者IP地址。
    • 端口:用于设置目录服务的端口号,默认为389。
    • DN:用于设置LDAP协议操作的DN(最顶层的根部目录)。
    • 用户名:用于设置访问目录服务的用户名。
    • 密码:用于设置访问目录服务的密码。
    • 测试配置:由于选择请求的类型,支持选择添加测试、删除测试、搜索测试、修改测试这四种类型。
  • 邮件阅读者取样器:邮件阅读者取样器是指使用POP3(Post Office Protocol - Version 3的简写,即邮局协议版本3,用于支持使用客户端远程管理在邮件服务器上的电子邮件)或IMAP(Internet Mail Access Protocol的简写,即交互邮件访问协议,同样是用于从本地邮件客户端访问远程服务器上的邮件)协议读取指定邮件服务器上的邮件,该取样器通常用于模拟多线程并发用户来读取邮件服务器上邮件,该取样器界面包含的参数如下:
    • Protocol:用于设置邮件通讯协议,支持POP3, POP3s, IMAP, IMAPS,可以根据实际的邮件服务器来进行设置。
    • Server Host:用于设置邮件服务器的域名或者IP地址。
    • Server Port:用于设置邮件服务器的端口号。
    • Username:用于设置邮件服务器的登录用户名。
    • Password:用于设置邮件服务器的登录密码。
    • Folder:用于设置IMAP或者IMAPS邮件协议服务器的读取文件夹。
    • Number of messages to retrieve:用于设置需要检索的邮件数量。
    • Fetch headers only:用于设置是否仅检索邮件头。
    • Delete messages from server:用于设置是否在检索完对应的邮件后,从邮件服务器中删除对应的邮件。
    • Store the message using MIME(raw):用于设置是否将邮件存储为MIME((Multipurpose Internet Mail Extensions)的简写,即多用途互联网邮件扩展类型,是一种文件的扩展类型,以方便支持此扩展类型的应用程序可以打开该文件),如果设置了该选项,则会将整个原始消息存储在响应数据中。
    • Security settings:用于设置邮件传输的安全加密协议,支持无加密、SSL、StartTLS三种类型。
    • Trust All Certificates:用于设置是否接受独立于CA的所有证书。
    • Use local truststore:用于设置只接受本地受信任的证书。
    • Local truststore:当设置了Use local truststore选项后,可以同时设置受信任证书的文件的本地信任库路径。
    • Override System SSL/TLS Protocols:用于设置是否覆盖系统的SSL/TLS协议,通常会和Security settings参数搭配进行配置。
  • SMTP取样器:SMTP取样器是一个模拟通过SMTP协议向邮箱服务器发送邮件的取样器,并且支持通讯连接中设置安全协议(支持SSL和TLS)以及用户身份验证,如果使用安全协议,将对服务器证书进行验证,该取样器支持的证书认证包括信任所有证书和使用本地信任库(将根据本地信任库的证书文件进行验证)两种方式,该取样器界面包含的参数如下:
    • Server:用于设置邮箱服务器的域名或者IP地址。
    • Port:用于设置邮箱服务器的端口号。
    • Connection timeout:用于设置连接的超时时长,单位为毫秒,默认为不超时。
    • Read timeout:用于设置读取的超时时长,单位为毫秒,默认为不超时。
    • Address From:用于设置发件人的邮箱地址。
    • Address To:用于设置收件人的邮箱地址,多个邮箱地址之间用分号隔开。
    • Address To CC:用于设置抄送人的邮箱地址,多个邮箱地址之间用分号隔开。
    • Address To BCC:用于设置秘密抄送人的邮箱地址,多个邮箱地址之间用分号隔开。
    • Address Reply-To:用于设置备选回复的邮箱地址,多个邮箱地址之间用分开隔开。
    • Use Auth:用于设置是否使用身份验证。
    • Username:当设置身份验证时,需要设置身份验证的用户名。
    • Password:当设置身份验证时,需要设置身份验证的密码。
    • Use no security features:不使用任何的安全验证。
    • Use SSL:使用SSL安全认证协议。
    • Use StartTLS:使用StartTLS安全认证协议,通常在SSL和StartTLS中二选一。
    • Enforce StartTLS:强制使用StartTLS,如果服务器不支持StartTLS,则运行直接终止。
    • Trust All Certificates:用于设置信任所有的证书来验证。
    • Use local truststore:用于设置使用本地信任库来验证。
    • Local truststore:用于设置本地信任库的路径。
    • Override System SSL/TLS Protocols:用于设置使用自定义的SSL/TLS协议来覆盖系统默认的SSL/TLS协议,多个之间以空格来分割,比如TLSv1 TLSv1.1 TLSv1.2等。
    • Subject:用于设置邮件的主题。
    • Suppress Subject Header:用于禁用邮件主题头。
    • Include timestamp in subject:用于设置在邮箱的主题中添加时间戳。
    • Add Header:用于添加邮件的主题头(通常以Key/Value的形式)。
    • Message:用于设置邮件的正文描述。
    • Send plain body (i.e. not multipart/mixed):用于设置是否发送纯文本。
    • Attach files:用于设置邮件中是否添加附件。
    • Send .eml:用于设置是否发送.eml文件。
    • Calculate message size:用于设置是否计算邮件的大小。
    • Enable debug logging:用于设置是否启用Debug日志,通常在脚本调试时,可以启用该选项以看到更多的日志。
  • OS进程取样器:OS进程取样器是一个可用于在本地计算机操作系统上执行命令的取样器,如同命令行工具一样,可以执行从命令行中运行的所有命令,支持的操作系统包括Windows和Linux操作系统,OS进程取样器界面包含的参数如下:
    • 要执行的命令:设置需要执行的命令。
    • 工作目录:设置需要在哪个目录下执行命令。
    • 命令行参数:设置待执行的命令后面需要加的参数。
    • 环境变量设置:运行命令时添加到环境中的变量(通常为Key/Value的形式),类似于在Windows和Linux操作系统中设置临时的环境变量。
    • Standard input (stdin):用于设置待执行命令的标准输入的文件名。
    • Standard output (stdout):用于设置命令执行完成后标准输出的文件名,如果不设置该参数,则会自动捕获命令执行完的标准输出作为响应数据返回。
    • Standard error (stderr):用于设置命令执行报错时标准错误的输出文件名。
    • 检查返回码:用于设置是否检查命令执行完成后的返回码,不管是在Linux命令行或者Windows命令行执行一条命令,命令执行完成后,操作系统都是会有返回码返回的。
    • Timeout:用于设置命令执行的超时时长,单位为毫秒,默认为0,表示不超时。
  • TCP取样器:TCP取样器用于直接通过TCP/IP协议来向TCP 服务器发送取样请求,该取样器通常是通过文本的形式直接向服务器发送请求,该取样器界面包含的参数如下:
    • TCPClient classname:用于设置TCP客户端的类名。
    • 服务器名称或IP:用于设置TCP服务器的域名或者IP地址。
    • 端口号:用于设置TCP服务器的端口号。
    • 连接超时:用于设置TCP连接的超时时长,单位为毫秒。
    • 响应超时:用于设置TCP请求的响应的超时时长,单位为毫秒。
    • Re-use connection:用于设置TCP/IP连接是否重用,如果勾选了此选项,则连接将一直处理打开状态,不会关闭,后续的请求会持续使用该连接来完成请求。
    • 关闭连接:如果勾选此选项,则每次取样请求结束后,就会关闭连接,下一个取样请求将需要重新建立连接。
    • SO_LINGER:用于设置SO_LINGER(即延迟时长,单位为秒)。
    • 行尾(EOL)字节值:用于设置请求行尾的字节值大小,EOL通常指TCP/IP协议中的扩展头部结尾,用于表示扩展头部的结束。
    • 要发送的文本:设置TCP请求需要发送的文本消息。
    • 用户名:设置TCP请求验证的用户名。
    • 密码:设置TCP请求验证的密码。

2、本次学习总结

  • 取样器的使用,包括HTTP请求、调试取样器、JSR223 Sampler、AJP/1.3 取样器、Access Log Sampler、BeanShell 取样器、Bolt Request、FTP请求、GraphQL HTTP Request、JDBC Request、JMS点到点、JMS发布、JMS订阅、JUnit请求、Java请求、LDAP请求、邮件阅读者取样器、SMTP取样器、OS进程取样器、TCP取样器等,取样器是Jmeter性能测试的核心元件,也是读者们需要重点掌握的内容,其中HTTP请求、JDBC Request、TCP取样器建议读者们优先进行重点掌握。

出处 :本次学习的内容参考自清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书

相关推荐
百度测试开发4 天前
超细整理,保险项目-性能测试bug+吞吐量+并发用户数分析(详细)
自动化测试·软件测试·软件测试工程师·接口测试·软件测试面试·性能测试·jmeter性能测试
Light604 天前
领码课堂 | React 核心组件与高级性能优化全实战指南
性能调优·状态管理·微前端·server·components·react 架构
张永清7 天前
每周读书与学习->初识JMeter 元件(二)
性能调优·jmeter性能测试·性能分析·每周读书与学习
张永清21 天前
每周读书与学习->初识JMeter 元件(一)
性能调优·jmeter性能测试·性能分析·每周读书与学习
张永清1 个月前
每周读书与学习->认识性能测试工具JMeter
性能调优·jmeter性能测试·性能分析·每周读书与学习
张永清1 个月前
Apache JMeter性能测试工具属性配置最全的整理
jmeter·性能测试·性能调优·性能分析·教材
p@nd@1 个月前
【SQL优化案例】SQL改写 - 用 UNION ALL 替代 OR
oracle·性能调优·sql优化·oracle优化
张永清1 个月前
性能测试中性能分析与调优学习大纲整理
性能测试·性能调优·性能分析
张永清1 个月前
《JMeter核心技术、性能测试与性能分析》 教学大纲及标准
jmeter·性能测试·性能调优·性能分析·教材