关联

一、什么是关联

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

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

例如:用户登录后,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  或 jp@gc - 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

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

3、添加压力机
有时压力测试的时候一台压力机可能不能满足需求,我们需要添加多个压力机,或者用其他人的机器进行压测,这个时候我们就需要添加压力机。
1、先在其他电脑上启动jmeter_server,确保都在一个网段上,确保几台机器能ping通
2、修改jmeter配置文件,在remote_hosts 添加对应的IP地址,端口号默认1099
3、本机启动jmeter,在运行中选择远程启动,可以单独启动压力机也可以全部启动
 

如果脚本里边又参数化文件的话,那么在其他压力机上相同位置也得有相同的文件。

我们在本地jmeter看一下添加的压力机

运行->远程启动

或者直接点击全部运行按钮,进行运行,就可以进行压测啦,大家一起来试一下吧

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

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

  1. jmeter简单压测、下载文件

    一.jmeter做简单压测(单机) 1.添加需要压测的HTTP请求 2.添加聚合报告 3.设置压测场景 4.查看聚合报告 二.多机同时进行压测 1.在需要连接的电脑上打开jmeter  bin目录下的 ...

  2. jmeter之登录接口的一次简单压测与分析

    前言:登录接口的一次简单压测与分析 1.接口文档 2.配置元件 3.结果分析 1.接口文档 a.拿到接口文档 接口地址:http://localhost:8080/jpress/admin/login ...

  3. day2.jmeter简单压测,下载文件,Charles手机抓包准备

    一.压测 压测衡量一个系统的好坏:1.tps每秒钟处理的事物数,2.qps响应时间 添加聚合报告,更改线程组,运行接口请求 **添加压力机 1.首先确保都在同一网段 2.其他电脑要先启动jmeter- ...

  4. jmeter简单压测设置

    参数化 随机参数 时间参数 顺序自增函数  文件读取  直接引用 响应断言 用来查看sessionid 关联 关联引用 jmeter操作数据库 安装连接程序包 ip 端口号 哪个数据库 可以执行多条s ...

  5. Jmeter安装与使用(压测)

    一.介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件,Java Se ...

  6. JMeter使用教程2——MySQL压测

    之前写过一篇JMeter使用教程,只是介绍了http请求的压力测试,想到MySQL的测试也挺必要的,于是写下这篇记录一下.如果不知道怎么下载和安装,可以看一下上一篇关于JMeter的文章,地址是:ht ...

  7. jmeter 插件安装之阶梯式压测(五)

    一.Jmeter插件安装 jmeter-plugins-manager-1.4.jar 下载地址:https://jmeter-plugins.org/install/Install/ 下载之后将插件 ...

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

    哈喽,我又来了~ 前提:三台linux虚拟机,一台作为master,另外两台作为slave. 一.server端 1.修改1099端口,client和server通信的端口,可以不修改,默认就是109 ...

  9. jmeter针对websocket协议的压测

    之前一直没有接触过websocket协议,所以一直对websocket的压测存在疑惑,在网上参考文章并不断尝试之后,终于有所得:第一次用jmeter的websoket插件,用的ws非加密协议,请求都能 ...

随机推荐

  1. 手动模拟一个类似jquery的ajax请求

    var $ = { parms:function(obj){ var str = ''; for(var k in obj){ str +=k+'='+obj[k]+'&'; } str = ...

  2. 3.3.3 char 类型

        char类型原本用于表示单个字符.不过,现在情况已经有所变化.如今,有些Unicode字符可以用一个char值描述,另外一些Unicode字符则需要两个 char 值.       char类 ...

  3. 【Codeforces 1091D】New Year and the Permutation Concatenation

    [链接] 我是链接,点我呀:) [题意] 把1~n的n!种排列依次连接成一个长度为nn!的序列. 让你在这个序列当中找长度为n的连续段,使得连续段中的数字的和为n(n-1)/2 输出符合要求的连续段的 ...

  4. 47. Spring Boot发送邮件【从零开始学Spring Boot】

    (提供源代码) Spring提供了非常好用的JavaMailSender接口实现邮件发送.在Spring Boot的Starter模块中也为此提供了自动化配置.下面通过实例看看如何在Spring Bo ...

  5. 线段树题集 (cf版)

    lazy区间修改   : http://acm.hdu.edu.cn/showproblem.php?pid=4902   (hdu4902) http://acm.hdu.edu.cn/showpr ...

  6. noip模拟赛 蒜头君的排序

    分析:其实就是求m个区间的逆序对个数,题目真的是明摆着让我们用莫队算法,套用树状数组就可以了. 具体怎么转移呢?如果移动R,那么对区间[l,r]有影响的是R左边的元素,我们只需要看有多少在R左边比a[ ...

  7. 1827 tarjan+缩点

    #include<stdio.h> #include<stack> #include<iostream> #include<string.h> #inc ...

  8. [bzoj 1041][HAOI2008]圆周上的整点(枚举)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 分析:实质上是求(a,b,c)勾股数的个数,其中c是确定的. 对于勾股数有一组通式: a ...

  9. SQLITE报错database is locked的解决办法

    用firedac连接SQLITE数据库,空间tdbedit绑定字段name,如下语句修改其值时报错. procedure TForm1.Button3Click(Sender: TObject);be ...

  10. [Elasticsearch] 集群的工作原理 - 第一部分

    本文翻译自Elasticsearch官方指南的life inside a cluster一章. ES就是为高可用和可扩展而生的. 扩展能够通过购置性能更强的server(垂直扩展或者向上扩展,Vert ...