录制脚本

jmeter下载安装略过不谈,上步骤:

1.在测试计划新建-threads-线程组

2.在工作台新建-非测试原件-http代理服务器,设置端口和包含网址 不包含网址

3.在手机/浏览器,设置代理服务器网络和端口(自己百度)

4.点击http代理服务器的启动,就可以开始录制脚本了。

HTTP代理服务器的设置如下:

编辑脚本

1.添加断言

1.apply to 指定断言作用范围

2.响应文本

  响应代码 code(200、300)

  响应信息 (msg )

3.参数化数据,导入txt文件

4.设置循环次数和持续时间

5.添加察看结果数

6.开始运行脚本

7.查看结果

8.分析数据

jmeter③添加beanshell脚本断言返回的json内容

step1.

对http请求添加beanshell断言

step2.

导入json解析包,并存入jmeter安装路径的lib文件夹

step3.

根据接口文档编写对应的beanshell脚本

e.g:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; String resp=new String(ResponseData);
JSONObject jsonObject=JSON.parseObject(resp);
int ret=jsonObject.getIntValue("ret");
int errorCode=jsonObject.getIntValue("error_code");
String msg = jsonObject.getString("msg");
//long serverTime=jsonObject.getString("server_time");
Object data = "";
if(jsonObject.containsKey("data")){
Object dataObject=jsonObject.get("data");
if(dataObject instanceof JSONObject){
data= jsonObject.getJSONObject("data");
}else if(dataObject instanceof JSONArray){
data=jsonObject.getJSONArray("data");
}
}else{
Failure=true;
FailureMessage="返回结果中没有data数据";
} if((ret==0)&&(errorCode==0)&&(msg=="")&&(data.toString()!="")){
Failure=false;
}else if(ret==1){
Failure=true;
FailureMessage="ret返回为1,没有活动配置";
}else if(errorCode==500){
Failure=true;
FailureMessage="errorCode=500,没有活动配置";
}else{
Failure=true;
FailureMessage="msg、data返回有误";
}

 

验证是否是json语句-用于json断言

public class TestFast {
public static void main(String[]args){
String resp="";
int length=resp.length();
int flag=-1;
if(length>2){
int i=0;
// 从第1位的字符开始找,是不是{,如果不是,查看下一个,找到第n个,还不是,就报错 while(i<3){
if(resp.charAt(i)==123){
flag=0;
break;
} else{
i++;
} }
if(flag==0){
System.out.println("this is a json");
}else{
System.out.println("this is not a json");
}
//不是,就判断失败,给出结论 }else {
System.out.println("the response is not a json,the length is 0 or 1,or 2(not {})");
}
}
}

  

 

性能测试全过程review

前情提要:1.会一点点jmeter的脚本录制和编辑,完全没实际操作过压测,review一下第一次实践。

     2.压测使用的是HTTP请求,且未加密;

     3.压测的10个接口没有数据关联和数据要求,就是数据随便输入随便设置;

     4.review会省略一些基本知识的解释,比如jmeter的断言/参数化/内置参数、linux基本操作、为什么监控这些数据、基础的计算机网络知识等等

一、.接到任务,拿到道具:

①接口文档

②压测地址

③压测客户机云地址(因为自用的PC机器性能不佳,所以使用的腾讯云部署上面的机器)

④提测邮件/需求

二、.分析提测需求:

  性能指标如下,其实很奇怪啊,如果接口响应时间5s,用户早就流失了吧?

  监控的指标需要有:(日活跃用于设置并发数量,理论30w日活的休闲游戏,单个接口并发200-300线程的数据需要达到对应标准TPS>500,响应时间<1s,CPU消耗80%,内存消耗<80%,不同项目的需求会有出入),TPS,响应时间,服务器CPU占用,服务器Memory占用

  准备测试工具:jmeter(因为只会这个),xshell(用于在腾讯云的跑脚本的ubuntu机器上执行脚本,登陆的时候还要用Authenticator来获取密码)

三、针对接口文档,编写测试脚本

  1.接口文档如下(这里只po一个接口):

    

  2.针对接口文档,编写jmeter脚本

  步骤如下:添加线程组--在线程组上添加samples-http请求-编辑http请求的数据-针对http请求添加Beanshell断言+响应断言(这里提供两种方式断言,任选一种即可)-针对线程组增加监听器-察看结果数+聚合报告(这里提供两种报告,前者用来查看报错信息,后者用来查看压测结果)-设置并发数据

    添加线程组:

    添加HTTP请求,根据接口文档编辑请求内容:

    添加Beanshell断言和响应断言(由于接口比较简单,所以任选其一即可,建议选择响应断言,比较简单方便):

    

      编辑beanshell断言内容:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
String resp=new String(ResponseData);
if(resp.equals("")||resp==null){
Failure=true;
FailureMessage="resp是空的";
} else if(resp.startsWith("<")){
Failure=true;
FailureMessage="resp以<开头"+resp;
}else{
JSONObject jsonObject=JSON.parseObject(resp);
int ret=jsonObject.getIntValue("ret");
int errorCode=jsonObject.getIntValue("error_code");
String msg = jsonObject.getString("msg");
//long serverTime=jsonObject.getString("server_time");
Object data = "";
if(jsonObject.containsKey("data")){
Object dataObject=jsonObject.get("data");
if(dataObject instanceof JSONObject){
data= jsonObject.getJSONObject("data");
}else if(dataObject instanceof JSONArray){
data=jsonObject.getJSONArray("data");
}
}else{
Failure=true;
FailureMessage="返回结果中没有data数据";
}
//String userId=data.getString("userId");
// 对data的内容来get值
//String openId=data.getString("openId");
//String avatar=data.getString("avatar");
//String nickname=data.getString("nickname");
//如果要看data传回的内容不是空的,怎么判断
if((ret==0)&&(errorCode==0)&&(msg.equals(""))/*&&(serverTime!=0)*/&&(data.toString()!="")){
Failure=false;
}else if(ret==1){
Failure=true;
FailureMessage="ret返回为1";
}else{
Failure=true;
FailureMessage="msg、data返回有误";
}
}

  

    注:这里使用的fastJson来解析json返回,所以需要事先导入fastjson的jar包,导入jar包的步骤很简单,就是把jar包放入jmeter安装路径的lib目录下

      添加响应断言,编辑响应断言:

    

注:这里的响应断言和上面的beanshell实现的是同一个东西,响应断言会更简单,不用自己BBBBB写一大堆。

这里写beanshell主要是因为,当前项目没有用到,但是事实上其他项目会用的比较多,所以想练练_(:з」∠)_。

有的项目使用加密的数据包,我们在请求的时候,需要对数据加密;在断言的时候,要对数据解密;有的项目验证接口之间有数据关联,就导致我们前后的数据需要做关联,用beanshell语句来连接(beanshell preProcessor/beanshell postProcessor/beanshell断言等等)

      添加察看结果数、聚合报告

        注:这里的察看结果数和聚合报告,需要存两个不同的文件,因为存储方式不同,存相同路径的话,会都覆盖成聚合报告

        设置并发数量,并发200线程,持续5min压测

          

四、执行压测

  如果自己的PC性能OK的,直接自己windows跑了。

  如果自己PC不行的,要在linux客户机上跑的,就xshell连接上客户机,然后进入jmeter的bin目录,上传测试脚本,输入语句执行。

    客户机操作:1.安装jdk  2.上传jmeter(脚本有用jar包的,要在lib里面存入jar包)3.进入jmeter的目录,执行脚本

          cd /data/test/apache-jmeter-3.1/bin

          rz -e 上传 test.jmx文件

          java -jar ApacheJMeter.jar -n -t  压测脚本.jmx -l 结果文件.jtl

          sz 结果文件.jtl    导出结果文件到本地

五、 分析结果

  1.分析聚合报告:

      前面编辑脚本:并发200线程,持续5分钟----得到结果:请求总数142w,平均响应时间47ms,错误率0.00%,TPS 4105

      响应时间47ms,响应很快,TPS 4105事务处理能力优越,错误率低于0.01%。说明脚本执行情况很好,此时需要查看服务器的CPU和memory使用情况,确定是否继续加压。

  

      这里服务器性能监控,没有需要自己去捣鼓,直接找运维要zabbix账号上去瞄瞄就可以了,主要查看CPU load,CPU使用情况,memory使用情况。如果发现CPU或者聚合报告的内容异常,可以查看network traffic里面的数据流量( 每秒流量=每秒请求数*请求大小)。

    这里看到,CPU利用率max值是80%,CPU负载的max值是7(意思是当前每核处理的请求数量,服务器是4核的,数值8+就算满载)。

    加压看看TPS有没有增加(这个时候CPU接近满载,加压的话过载的可能性很高)。这里加压到300并发看了下,TPS是差不多了,错误率为0,就不贴图了。

    CPU接近满载,并发数增加的情况下,TPS稳定,结果基本可以确定了。

    这里的memory占用就不贴图了,基本维持在400mb。

      

      

六、出具报告

    提测内容是看30w日活的时候的各个数据,这里策略是加压200时查看各项数据,加压200,CPU占用80%+,memory占用<80%,TPS>500,响应时间<5s,测试通过。

性能测试结果分析

上次测试的内容,今天需要添加一个接口压测。

测试结果如下:

压测的执行时间5分钟,总共发送5w请求,单个请求响应时间是308ms,这里请求设置的connect时间5s,响应时间10s。

并发50线程时,TPS峰值只有150,比其他接口要弱10倍左右,且错误率大于0.01%;

这里本来只关注了tps不合格的问题,已经错误率。master说,这个响应时间太长,而且流量每秒3.4MB,带宽消耗很大。

最后运维确定说是带宽跑满了,问了带宽,30Mbps;

master说难怪了 早就跑满了。。。。

妈个鸡 不懂

jmeter-录制, 编辑脚本,性能测试全过程review的更多相关文章

  1. JMeter性能测试基础 (4)-使用JMeter录制测试脚本

    在进行压力测试时,由于很多web页面包含了Ajax异步请求等内容,为模拟用户真实输入,除了对html的访问外,还需要将其它的访问考虑入内,这时最好的办法就是对实际访问过程中的所有请求进行录制. 例如, ...

  2. 【转】使用Jmeter录制web脚本

    1.web性能测试以及web http请求基本原理. 再介绍录制jmeter脚本之前,我们先谈一下web性能测试.web就是调用http/https接口, 其实没有是什么复杂度可言.只是我们必须清楚, ...

  3. jmeter 使用jmeter 录制web脚本

    1.打开jmeter.鼠标右击工作台.添加HTTP代理服务器 2.设置端口号.目标控制器.分组 3.添加查看结果树 4.点击启动.确定完成 5.打开浏览器直接进行操作.就可以看到所录制的脚本信息

  4. Jmeter录制APP脚本

    启动 jmeter.bat 在 Test Plan 下 添加 Thread Group 在 WorkBench 下 添加 HTTP(S) Test Script Recorder: 配置 Global ...

  5. JMeter 录制APP脚本

    具体步骤: 1.启动JMeter: 2.在“测试计划”中添加“线程组”: 3.“工作台”中添加“HTTP代理服务器”: 4.配置代理服务器:端口:8888(默认值),HTTPS Domains:192 ...

  6. 使用Jmeter录制web脚本

    1:启动Jmeter: 2:选择测试计划,右键->添加->Threads(users)>线程组 3:选择这个线程组,右键->添加->配置元件->HTTP请求默认值, ...

  7. Jmeter录制pc脚本

    1.打开jmeter后可以看到左边窗口有个“测试计划”和“工作台”,右键“测试计划”,添加 Threads(Users) →线程组,再右键 线程组→添加 配置元件→Http请求默认值 Http请求默认 ...

  8. JMeter录制Web脚本

    设置Firefox浏览器代理, 点击右上角的菜单: 点击选项: 点击高级: 点击设置: 点击手动配置代理, 输入本地的IP地址和端口号8888,与JMeter代理服务器的端口号保持一致: 好了,浏览器 ...

  9. jmeter录制rabbitmq消息-性能测试

     一.目的 为了测试系统的稳定性,在UAT环境下,通一段时间内不间断发送MQ消息来验证系统是否会出现异常. 二.测试工具 使用测试工具:jmeter5.2.1,火狐浏览器71.0,RabbitMQ管理 ...

随机推荐

  1. delphi 怎么实现主窗口退出时,有一个提示框?

    无论点窗口上的[按钮]还是[右上角的叉],能出现一个提示窗口,“是”-退出窗口,“否”-重新登录(调出登录窗口),“取消”-返回.MessageBox能实现吗?还是要调用新窗口(我调用窗口,有些错误) ...

  2. Vue混合mixins

    前面的话 本文将详细介绍Vue混合mixins 概述 混合 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式.混合对象可以包含任意组件选项.以组件使用混合对象时,所有混合对象的选 ...

  3. 【python练习题】程序15

    #题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. n = input('请输入成绩 :') n = int(n) if ...

  4. codeforces259B

    Little Elephant and Magic Square CodeForces - 259B Little Elephant loves magic squares very much. A  ...

  5. Nginx 返回响应过滤响应内容

    陶辉94课 过滤模块 从下到上顺序 ngx_http_proxy_module 模块 Syntax: proxy_ignore_headers field ...; Default: — Contex ...

  6. Neutron 网络基本概念

    Neutron 网络基本概念 上次我们讨论了 Neutron 提供的功能,今天我们学习 Neutron 模块几个重要的概念. Neutron 管理的网络资源包括 Network,subnet 和 po ...

  7. UOJ274 [清华集训2016] 温暖会指引我们前行 【LCT】【最大生成树】

    题目分析: 差评,最大生成树裸题.hack数据还卡常. 代码: #include<bits/stdc++.h> using namespace std; ; struct LCT{ ],d ...

  8. LOJ2116 [HNOI2015] 开店 【点分治】

    题目分析: 观察题目发现度数不小于三,考虑从边分治入手,用点分治代替.将树划分成重心链接的结构,称为点分树.令当前询问的点为$ u $.那么我们考虑点分树的根到$ u $的一条路径.考虑根结点,排除掉 ...

  9. CODEFORCES掉RATING记 #4

    比赛:Codeforces Round #427 (Div. 2) 时间:2017.7.31晚 开场发现有6道题,都是水题(可能我只会做水题) A:比较\(2t_1+sv_1\)与\(2t_2+sv_ ...

  10. bzoj 2429: [HAOI2006]聪明的猴子 (最小生成树)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2429 思路:就是找最小生成树最大的一条边,最小生成树的性质,最后加入的那条边就是最大的 实现 ...