Jmeter测试工具讲解

628 阅读7分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情

Jmeter测试工具

Apache JMeter是Apache 组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设 计用于Web应用测试,但后来扩展到其他测试领域。

对于Jmeter大多数印象应该是性能测试。包括我本人在初做测试的两年,对Jmeter 进行多较多的使用 和学习。但也是以性能测试为主。

这里有一个很有意思的的话题,拿出来读者讨论一下。

在自动化测试工具里,这里所说的“自动化”是指是通过工具或程序代替手工测试的条件下。最主流的 就是性能测试工具和自动化测试工具。

如果性能测试工具(LoadRunner、Jmeter)只设置一个虚拟用户运行一遍性能测试脚本是否可以认为是 自动化测试?

如果自动化测试工具(Selenium+多线程技术)是否可以看作是性能测试?

如果这里的自动化测试特指UI层的自动化测试,那么它们之间还是存在明显的区别的。

对于Selnium Web UI 自动化测试来说,用例的执行是需要打开真实浏览器,发送页面请求,通过浏览 器渲染页面(phantomjs模式虽然不打开真正的浏览器,但它同样需要在内存渲染页面)。它的特点是接近或 等同于用户在操作Web页面。对于,浏览器的渲染页面会带来两个问题,一个耗时,二是耗资源(CPU、内 存等硬件资源),所以,通Selenium+多线程技术来说能模拟的虚拟用户数(线程数)非常有限,当然,可 以认为是“性能”测试,但这个性能测试恐怕要验证的是客户端的性能,而并非服务器端的性能了。

对于Jmeter性能测试工具来说,它不需要通过浏览器渲染页面,从接口层面发送请求(虽然 LoadRunner 在性能脚本回放时可以设置打开浏览器观看脚本执行情况,但真正运行性能测试的时候是不是有这个动作 的)。所以,它将非常节省客户端的性能,我们可以在客户端模拟成百上千的虚拟用户。所以,用性能测试 工具,只设置一个虚拟用户运行一遍性能测试脚本是自动化测试,不过是接口层自动化测试,并非UI层自动 化测试。

那么在我看来,用Loadrunner或 Jmeter 做接口测试和Pytho

quests+多线程技术做接口性能试本质 上没有区别;只不过前者能提供丰富的监控和日志;而后者会更加灵活。

通过上面的讨论你是否有了一些眉目。如果你用过Jmeter做性能测试,不管是通过录制或手动添加,一 定会用到“HTTP请求默认值”,这其实就是HTTP接口请求器。如查要做接口自动化只需要把虚拟用户数降

安装Jmeter

Jmeter 官方首页:http://jmeter.apache.org/

关于Jmeter可以做什么,官方上也有非常详细的介绍。另外它的文档也写很详细。如果想学习Jmeter, 那么它的文档将会是最好的教材。

我相信你可以在官网上找到下载地址并把它下载下来。

Jmeter 由Java 语言开发,最新的Jmeter3.0版本的运行需要有Java7 或之后版本的环境。我同样相信 你能搞定Java环境。

接下来,将下载的 apache-jmeter-3.0.zip 解压,进入解压目录.../apache-jmeter-3.0/bin。双击 ApacheJMeter.jar启动,如图

image.png

添加HTTP接口测试

我们的所以工具都会在Jmeter工具中完成,接来就按照一般步骤来创建一个HTTP接口测试。

image.png

如图,右键点击“测试计划”—→“添加”—→“Threads(Users)”——>“线程组”。

image.png

如图设置线程组,线程组主要包含三个参数:线程数、准备时长(Ramp—Up Period(in seconds))、循环次数。

线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。

准备时长:设置的虚拟用户数全部启动的时长。如果线程数为20,准备时长为10(秒),那么需要10秒钟启动20个线程。也就是平均每秒启动2个线程。

循环次数:每个线程发送请求的个数。如果线程数为20,循环次数为100,那么每个线程发送100次请求。总请求数为20*100—2000。如果勾选了“永远”,那么所有线程会一直发送请求,直到手动点击工具栏上的停止按钮,或者设置的线程时间结束。

因为这里要做接口测试,所以各个参数为均1。

image.png

如图,右键点击“线程组”——>“添加”——>“Sampler”——>“HTTP请求”。

image.png

名称:本属性用于标识一个取样器,建议使用一个有意义的名称。

注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。

服务器名称或IP:HTTP请求发送的目标服务器名称或IP地址。

端口号:目标服务器的端口号,默认值为80。

协议:向目标服务器发送HTTP请求时的协议,可以是HTTP或者是HTTPS,默认值为http。

方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE 等。

Content encoding:内容的编码方式,默认值为iso8859

路径:目标URL路径(不包括服务器地址和端口)

自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter自动重定向到新的页面。

Use keep Alive:当该选项被选中时,jmeter和目标服务器之间使用Keep-Alive方式进行HTTP通信, 默认选中。

Use multipart/from-data for HTTP POST:当发送HTTP POST请求时,使用Use multipart/from-data方 法发送,默认不选中。

同请求一起发送参数:在请求中发送URL参数,对于带参数的URL,jmeter提供了一个简单的对参数化的方法。用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对(对应RUL中的名称1=值1)

image.png

右键点击“线程组”—→“添加”——→“监听器”—→“察看结果树”。

image.png

运行测试:

选择菜单栏“运行”—→“启动”,或者点击工具栏启动按钮。

测试结果如图8.17,查看结果树,在响应数据标签,显示HTTP接口返回的数据。

添加新的POST请求

POST请求的添加方式与前面GET请求一样。不过POST请求需要设置参数

image.png

主 服务器名称或IP:127.0.0.1

端口号:8000

方法:POST

路径:/polls/question_vote/

同请求一起发送参数:

点击“添加”按钮,添加POST请求的参数。

image.png

执行测试:

选择菜单栏“运行”—→“清除”,或者点击工具栏清除按钮。然后重新执行启动测试。并查看结果树。

image.png

添加断言

对于自动化测试来说,断言必须要有的,如果没有断言我们只能人眼对比对接口返回的数据,有了断言 功能,就会简化这个过程。Jmeter提供了丰富的断言方法来帮助我们完成这个工作。

image.png

右键点击HTTP请求“添加”——>“断言”—>“响应断言”。

image.png

要测试的响应字段:响应文本、Document(text)、URL样本、响应信息、Response Headers、Lgnore Staus 等选项。虽然接口返回的是Json格式的数据,但对于Jmeter来说返回数据为文本,所以,这里可以勾选“响 应文本”

模式匹配规则:包括、匹配、Equals、Substring。这里只需要验证返回数据中是否包含主要的关键字,所 以,这里勾选“包括”。

要测试的模式:其实就是断言的数据。点击“添加”按钮,输入要断言的数据。

运行测试:

再次清除测试数据,点击启动测试,查看结果树,如图。

image.png