Jmeter头遭入门 - http接口测试

首先明确几个jmeter的主要逻辑单元概念:

1. Test plan:故名思意,测试计划,可以是以测试者为单位的测试工作区域,也可以是以测试项目为单位的测试工作区域。比如,我可以将我自己的测试工作划分成一个test plan,集中管理我自己的测试工作。也可以将整个测试项目当作是一个test plan,好处同一个测试项目的测试配置大多相同,可以共享相同的config element。

2. Thread group:线程组的意思。在性能或者压力测试中,可以将一个线程看作是一个模拟的用户,比如,我开10个线程就可以开标说有10个用户同时访问我测试的接口。线程组中可以指定我需要多少用户并发,同时Thread group作为一个Jmeter的组建,也可以在其上加入要测试的各种接口,比如http接口、ftp接口等等。

3. Sampler:一个sampler可以视为一个测试用例,sampler有很多种类,例如http request、jave request、ftp request等等。在sampler中,我们可以维护上对于该种类sampler的基本信息。对与每个sampler,可以逐个添加信息,也可以只维护基本信息,然后使用config element来整体维护。config element对于整个Thread group下的所有sampler生效。

4. listener:当测试的接口跑起来之后,需要知道测试结果。listener负责监控和展示测试的状态和结果。

 

对于http接口,我们使用的sampler是http request,以下为简单测试流程:

如图,左侧的是test plan的结构,此图中一个Test plan下含一个Thread group,Thread group下含若干个sampler。

如上图,选中test plan,可以看到test plan中的选项:

Use Defined Variables:用于设定在本test plan中所使用的默认参数。例如图中,Name是server,Value是www.baidu.com,那么在此test plan中所有的{#server}都使用这里的配置。

Run Thread Groups consecutively(i.e.one at time):表示线程组间顺序执行,不勾选表示线程组之间是并行执行。

Run tearDown Thread Groups after shutdown of main threads:这个选项里提到了teardown thread group,这个teardown线程组是在每个线程组运行完毕之后所采取的最后的步骤,类似于java中的finally,或者junit框架中的@After注解。勾选这个选项,表示当线程组在执行的时候遇到错误停止了,那么会调用这个teardown thread group进行善后。

Functional Testing mode:这个选项表示当使用了listener的时候,允许将测试的response数据或者其他的结果数据写进文件中去。但是,当勾选了这个选项之后Jmeter的性能会下降,所以在做压力测试的时候不允许使用这个选项。

Add directory or jar to classpath:如果是想自己测试的类或者扩展,那么需要在这里选择待测试的类所依赖的jar包。如果不采用这种方法,也可以直接将依赖包放在jmeter目录下的lib文件夹下。还有一种方法来指定依赖包,在jmeter.properties文件里面维护上依赖包的位置,其对应的字段为user.classpath 。

上图是thread group的配置,这里可以指定需要模拟的用户数量,即需要开启的线程数(Number of Threads)。也可以指定启动并达到指定线程数所需要的时间,例如,我开了100个线程,Ramp-up Period设置为10秒,那么每秒启动的线程数量为100/10=10个。在loop count中可以设定循环的次数,如果勾选forever,那么循环将永不停止。

Delay Thread creation until needed:延迟该线程的创建,直到该线程所对应的sampler开始采样了,才开始创建。

Scheduler:调度器。勾选了这个选项,才可以输入Scheduler Configuration的参数,其中,Duration表示测试一共持续多少秒。Startup delay表示延迟多长时间启动。

 

对于sampler,我们只看http request。图中选中的是一个http sampler。在此,可以填入protocol、server、port number(不填的话,默认是80)、method、path等等。

Redirect Automaticallly表示不将重定向视为一个独立的请求,Follow Redirects表示将重定向当成是一个独立的请求。

Use multipart/form-data for POST:http协议有三部分状态行、请求头、请求体。

multipart/form-data可以堪称是一种特殊的post。它在post基础上,拥有一个特殊的请求头,并使用固定的boundary来分割请求中多个post的内容。

Content-Type: multipart/form-data; boundary=${bound}

其中${bound} 是一个占位符,代表我们规定的分割符,可以自己任意规定,但为了避免和正常文本重复了,尽量要使用复杂一点的内容。如:--------------------53332342342342342

multipart/form-data的请求体也是一个字符串,不过和post的请求提不同的是它的构造方式,post是简单的name=value键值连接,而multipart/form-data是添加了分隔符等内容的构造体,请求体具体如下:

--------------------53332342342342342 Content-Disposition: form-data; name="param1" ABCD --------------------53332342342342342 Content-Disposition: form-data; name="param2" 0987654321 --------------------53332342342342342 Content-Disposition: form-data; name="fileparam"; filename="test.txt" Content-Type: text/plain contents of file --------------------53332342342342342

multipart/form-data既可以上传键值对,又可以上传文件。

在Jmeter中,勾选Use multipart/form-data for POST,将会发送一个multipart/form-data或者application/x-www-form-urlencoded的post请求。

如若要上传文件,需要维护Parameters和Files uploads两个标签。

Browser-compatible headers When using multipart/form-data, this suppresses the Content-Type and Content-Transfer-Encoding headers; only the Content-Disposition header is sent.

Browser-compatible headers:勾选这个选项,当发送multipart/form-data请求的时候,请求头将不会使用Content-Type和Content-Transfer-Encoding(用来描述传输过程中的编码格式,不填默认7bit,7BIT的含义是所有的数据以ASC-II格式的格式编码,8BIT则可能包含非ASCII字符(每行不超过1000字符)。BINARY可能不止包含非ASCII字符,还可能不是一个短行(超过1000字符)),只会发送Content-Disposition的请求头。

在thread group上加入View Result Tree,点击执行即可查看测试结果,每次成功与否将会被显示在结果栏中,点击结果可以看到该请求的具体信息。同时在这个listener中,可以查询,也可以写到文件中。

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值