jmeter关联、下载文件、简单压测

关联

一、什么是关联

关联是请求与请求之间存在数据依赖关系,需要从上一个请求获取下一个请求需要回传回去的数据。

简单地说就是在测试过程中有些数据的值会经常发生变化,要获取并使用这些数据,把这个动态的信息保存下来,我们就要进行关联。

例如:用户登录后,session信息都不同,有些操作要使用session,就需要将这个动态的信息保存下来。 
还有经常遇到的场景,第二个请求提交的参数要从第一个请求的返回数据中获取。

二、关联的用法

常用的两种关联用法

1.json  Path Extractor提取参数值

2.正则表达式的方法

我们已学生金币充值的接口为例来实验,由于接口需要权限,需要获取登录时的sign值我们就用关联来实现。

登录接口

  • 请求URL  http://api.nnzhp.cn/api/user/login
  • 请求方式    post
  • 请求参数  参数为key-value形式

参数名        必选     类型     说明

username    是       string    用户名

passwd        是        string   密码

     

       登陆用户名:niuhanyang

       密码:aA123456

返回参数说明

参数名         类型   说明

error_code  int       错误编码,0为操作成功

login_info   object   登录对象信息

userId        int        用户id

sign           string     签名

login_time  string  登录时间

打开jmeter,添加登录接口请求,调用查看结果

 获取学生信息接口

  • 请求URL  http://api.nnzhp.cn/api/user/stu_info
  • 请求方式  get
  • 请求参数

参数名        必选     类型     说明

stu_name    是       string    学生姓名

调用接口结果

学生金币充值

  • 请求URL:http://api.nnzhp.cn/api/user/gold_add
  • 请求方式  post
  • 参数 ,

    该接口有权限验证,需要admin用户才可以做操作,需要添加cookie

    cookie中key为登录的用户名,value从登录接口中获取,登陆成功之后会返回sign

参数名        必选     类型     说明

stu_id           是       int    学生id

gold           是        int     金币数量

返回参数说明

参数名         类型   说明

error_code  int       错误编码,0为操作成功

msg            string   提示信息

第一种方法比较简单,使用插件json path  postprocessorh  或 [email protected] - json Path Extractor

如下:在登录接口添加json path  postprocessorh,获取需要参数化的值的信息

$.login_info.sign

提取json串,使用json path extra

意思为给sign赋值,取值第一层为$,第二层为login_info , 第三层为sign ;

{(第一层)

"error_code": 0,

"login_info": {(第二层)

"login_time": "20171210170002",

"sign": "5071cef01583473c7beb6fe1110f937f",(第三层)

"userId": 8

}

}

然后在cookie设置中,sign的值进行参数化,参数化的值用${参数名}

上面的例子中,返回值只有一个结果,如果存在多个结果的场合,我们怎么取值呢?

现在我们以学生ID为例来实验,可以看到上图中的查看学生信息中反回了多个ID号,我们用上边的方式来试一下

添加json  Path Extractor

从学生信息返回的结果看,获取内容的json串取为$.stu_info.id,将stu_id进行参数化为${id},执行

可以看到执行结果是失败的,传入的学生id是我们输入的默认值nono。

我们来看一下学生接口的返回信息

{
        "error_code": 0,
        "stu_info": [
                {
                        "id": 872,
                        "name": "A",
                        "sex": "nn",
                        "age": 33,
                        "addr": "士大夫是非得失的士大夫士大夫",
                        "grade": "33",
                        "phone": "15221223211",
                        "gold": 9500
                },
                {
                        "id": 1053,
                        "name": "A",
                        "sex": "nn",
                        "age": 33,
                        "addr": "士大夫是非得失的士大夫士大夫",
                        "grade": "33",
                        "phone": "16221223211",
                        "gold": 100
                }
        ]
}

上述的返回结果中,有两组信息,包含了两个学生的信息,如果用$.stu_info.id,计算机不知道要去获取,所以我们需要指定一下要获取哪一个ID号

$.stu_info[1].id

[1]因为计算机的计数是从0,开始的,所以1表示的是取第二个学生信息中的id号,我们再来执行一下

执行结果是成功的。

2.正则表达式
需要进行参数化还有一种方法是用正则表达式,如下

执行

下载文件
1.文件上传

我们先来回忆一下在jmeter中文件上传的操作

文件上传类型

  • 请求URL:http://api.nnzhp.cn/api/file/file_upload
  • 请求方式  post
  • 参数

参数名        必选     类型     说明

file              是        file       文件

返回参数说明

参数名         类型   说明

error_code  int       错误编码,0为操作成功

msg            string   提示信息

在jmeter中添加http请求,选择文件,添加参数信息,执行

可以看到上传文件执行成功了。

2.下载文件

现在我们来试一下下载文件是如何操作的

在网络上找到一个图片资源,获取到图片的地址:http://img4.duitang.com/uploads/item/201209/08/20120908180716_3rrvi.jpeg

我们在jmeter中新建一个HTTP请求,填写相应的参数,执行

可以看到下载成功了,那怎么把图片下载到本地呢?这就需要用到Bean Shell Sampler

BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;

具体如何写java代码这里就不具体介绍了,可以找到一段下载文件的代码。

代码如下:

import java.io.*;

byte[] result = prev.getResponseData();  //这个是获取到请求返回的数据,prev是获取上个请求的返回

String file_name = "C:\\besttest\\jmeter\\xiaer.jpg"; //代表存放文件的位置和文件名

File file = new File(file_name);

FileOutputStream out = new FileOutputStream(file);

out.write(result);

out.close();

执行并查看结果:
可以看到在填写的下载路径文件夹下,可以看到下载好的文件

 压测

一、什么是压力测试
压力测试通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大的服务级别的测试。通俗地讲,压力测试是为了发现在什么条件下您的应用程序的性能会变得不可接受。

再直白一点就是被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定(资源占用情况)

二、压力测试的工具

最常用的压力测试工具是loadrunner和jmeter

下面我们说一下jmeter中怎么做简单的压测

以上面的登录接口为例

登录接口

  • 请求URL  http://api.nnzhp.cn/api/user/login
  • 请求方式    post
  • 请求参数  参数为key-value形式

参数名        必选     类型     说明

username    是       string    用户名

passwd        是        string   密码 

       登陆用户名:niuhanyang

       密码:aA123456

添加线程组,添加http请求,添加聚合报告

设置压测的并发数,这里我们设置100个并发,循环10次,持续30s

下面看一下各个参数的含义:

Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值

#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100,我们设置的为100个用户循环10次,所以一共的请求为100*10=1000

Average:平均响应时间——默认情况下是单个 Request 的平均响应时间(单位是毫秒),当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间

Median:中位数,也就是 50% 用户的响应时间

90% Line:90% 用户的响应时间

Min:最小响应时间

Max:最大响应时间

Error%:本次测试中出现错误的请求的数量/请求的总数

Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的Transaction per Second 数

KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

根据具体的压测结果与目标需求进行比较来分析是否满足需求以及需要进行的优化操作

好了,先简单想这么多了,具体工作中遇到什么问题再慢慢学习吧~加油

时间: 2024-08-02 03:32:29

jmeter关联、下载文件、简单压测的相关文章

Jmeter安装与使用(压测)

一.介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等等.JMeter可用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或者分析不同负载下的整体性能. 同时,JMeter可以帮助你对你的应用程序进行回归测试.通过你创建的测试脚本和assertions来验证你的程序返

Jmeter(五)性能压测

一.压力测试场景设置--windows环境 压力测试:一般压测时间10-15min,N个并发用户一直在请求.监控服务的cpu.内存等: 稳定性测试:一般压测一周,2天,1天等,看系统会不会崩掉,会不会内存泄露等. 一般我们在做压力测试的时候,分单场景和混合场景,单场景也就是咱们压测单个接口的时候,多场景也就是有业务流程的情况下,比如说一个购物流程,那么这样的场景就是混合场景,就是有多个接口一起来做操作. 1.单场景,一个请求就可以了  2.混合场景,多个请求 3.压测时间,一般场景都是运行10-

Jmeter(十三)阶梯式压测

阶梯式压测,就是对系统的压力呈现阶梯性增加的过程,每个阶段压力值都要增加一个数量值,最终达到一个预期值.然后保持该压力值,持续运行一段时间. Jmeter中有个插件可以实现这个场景,这个插件就是:Concurrency Thread Group 一.安装 在Jmeter选项中打开插件管理,在待安装插件中搜索Concurrency关键词,如下图: 安装这个插件并重启Jmeter,在测试计划中可以添加这个插件 二.使用介绍 插件界面如下图: Target Concurrency:目标并发数 Ramp

JMeter在linux上分布式压测步骤(二)

哈喽,我又来了~ 前提:三台linux虚拟机,一台作为master,另外两台作为slave. 一.server端 1.修改1099端口,client和server通信的端口,可以不修改,默认就是1099 2.启动jmeter-server (这里启动的时候可以看到ip后面的端口不是1099,这里不用管,1099是client和server的通信端口,和这个没有关系) 二.client端:配置master和slave 1.进入到jmeter的bin目录下,打开jmeter.properties c

jmeter实现SMTP邮件协议压测

实现目的 通过jmeter的SMTP取样器,调用SMTP协议,批量进行邮件的发送,已达到压测的目的. 脚本实现 User Defined Variables定义用户变量 编辑SMTP Sampler取样器,设置邮件发送相关参数 响应断言 原文地址:https://www.cnblogs.com/jun-zi/p/12043550.html

Jmeter之下载文件

前言 我们可以利用postman工具来测试下载文件的接口,那么假如要利用Jmeter工具来进行下载接口的测试,又该如何测试呢? 下载文件的接口地址:/pinter/file/api/download?id={下载文件序号}:请求类型为get 一:添加下载http请求,填入接口地址,添加察看结果树 二:添加监听器-保存响应到文件,写入下载文件的存放路径和文件名 三.该接口运行后,可以到存放下载文件的路径找到下载的文件,若下载的文件是文本文件,在响应结果还会显示文本内容. 原文地址:https://

Struts2上传与下载文件 简单例子

之前转载过一篇上传与下载的文章 ,参考一下自己整理验证了一下 package com.jereh.edu.entity; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Uns

JMeter在linux上分布式压测遇到的坑(三)

master和slave机要在同一网段内,才能做分布式(Jmeter要配环境变量,这样不用手动起server) 分布式不成功,解决方案: 1.master端和slave端要ping通 2.ping通后,telnet ip port (Linux端),看一下1099端口是否被占用 3.防火墙 4.jmeter的log,如果请求发过去,但是没有返回结果,看看网段的问题 主要步骤: master端修改: 1.修改remote_hosts=ip:port:改成要启动的Linux机的ip以及端口 slav

Python FTP 下载文件 简单示例

简单的FTP下载 ,不加任何异常判断. <span style="font-size:14px;">import os from ftplib import FTP ftp_addr = '10.10.0.1' f=FTP(ftp_addr) f.login('anonymous') f.cwd("apk_download/") remote_file = '20141223140651.apk' f.retrbinary("RETR %s&q