百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

只需四步,教你使用JMeter轻松录制手机App脚本

bigegpt 2024-08-26 11:06 2 浏览

1、 添加线程组

选中“测试计划”,右键依次添加【线程组】,用于保存录制的脚本。

2、 添加HTTP代理服务器

选中“工作台”,右键依次添加【HTTP代理服务器】。

配置HTTP代理服务器,端口可以使用默认8080,目标控制器选择“测试计划>线程组”。

启动HTTP代理服务器,弹出“Root CA……”的提示框,点击“确定”表示HTTP代理服务器开始工作。

3、 配置手机网络代理

进入手机WIFI设置,选择一个WIFI,长按WIFI名称,在弹出的提示框中,选择“修改网络”。

在修改网络页,勾选【显示高级选项】,填写代理服务器主机名(JMeter软件所在的主机IP地址)和代理服务器端口(添加HTTP代理服务器配置的端口,默认8080),保存配置。

4、 查看JMeter录制的手机App脚本

备注:本人不太喜欢用Jmeter的录制功能,因为会录制很多无效的网络请求,但若不知道接口参数的情况下,可以采用录制方式,然后删除修改。

线程组的设置

普通线程组

1、 线程数:设置并发用户线程数量,即通常意义的并发用户数。

2、 Ramp-Up Period (in seconds):设置并发用户加载时间,假设并发用户数设置为100,此处设置为10,则认为jmeter会在10s内加载完成100并发用户数,也就是说每隔10秒加载一个。

3、 循环次数:输入框与复选框只能选择一种,不能同时被选择为场景循环方式;输入框输入数字则被认为是当前线程组所控制的脚本区域的执行次数;【永远】复选框选择后,输入框内的数字将失效,启动后脚本将一直执行下去。

4、 调度器:对于调度而言,顾名思义就是我们想在什么时间开始运行,运行多长时间自动停止诸如此类的场景需求均可以在此设置。

? 启动时间:在设置时间点开始运行场景,比如你想在下班后开始运行,如果时间小于当前时间,启动后立即执行,大于当前时间,启动后等待本地时间到了自动运行

? 结束时间:在设置时间点结束运行场景,比如上班前结束运行,结束时间如果小于开始时间或者当前时间,自动运行后立即终止

? 持续时间:设置当前场景持续运行的时间

? 启动延迟:设置场景启动后多长时间再开始真正运行,比如你想在下班后5分钟开始运行场景

其中持续时间和启动延迟的优先级高于启动时间和结束时间,也就是说当你设置了持续时间或者启动延迟,那么你的启动时间或者结束时间将失效。

5、 几种设置场景组合:

? 不勾选【永远】,选择【调度器】,设置完成后,启动运行也只会运行当前并发用户数循环次数,运行完成即会结束。所以此中选择可用于希望未来某时间点开始运行完成并发用户数循环次数的场景。

? 勾选【永远】,设置启动时间及结束时间,持续时间和启动延迟均为空,可用于希望未来某时间点自动运行并且到未来某时间点自动结束的场景。

? 勾选【永远】, 设置 持续时间和启动延迟, 可用于希望在启动多久后自动运行并持续多长时间的场景。

另外介绍一个调试工具Debug Sampler,会把我们自定义的变量输出在response data中,方便我们调试的时候使用,但在正式执行脚本时需要删除Debug Sample。

jp@gc - Stepping Thread Group

类似loadrunner的场景设置,解释:

This Group will start 100 threads:这次的测试总共会起100个线程。

First , wait for 0 seconds:等待0s后开始起线程,也就是不等待直接起线程。

Then start 10 threads every 30 seconds:每起10个线程后会运行30s,再起余下的10个线程,再运行30s,以此类推。

Using ramp-up 5 seconds:前面每起多少个线程的时候花5s,与上面结合起来即5s内起10个线程,运行30s,然后再再5s内再起10个线程,再运行30s,以此类推。

Then hold load for 60 seconds. :全部的线程起来后,运行60s 后开始停止(跟loadrunner类似,从jmeter聚合报告里面可以看出来,这里的hold load 的意思,其实是这些线程,一直在请求,相当于jmeter普通线程组里面的循环运行)。

Finally , stop 5 threads every 1 seconds:最后停止线程,5个线程停一次,等1s再停5个线程(当然,第一次是hold时间一过就先停5个线程,然后等1s再停余下的5个线程)。

介绍几个常用的逻辑控制器

JMeter中的Logic Controller分为两类:

a) 控制测试计划执行过程中节点的逻辑执行顺序,如:循环控制器(Loop Controller)、if控制器(If Controller)等;

b) 对测试计划中的脚本进行分组、方便JMeter统计执行结果以及进行脚本的运行时控制等,如:吞吐量控制器(Throughput Controller)、事务控制器(Transaction Controller)。

一、ForEach控制器(ForEach Controller)

作用:ForEach控制器一般和用户自定义变量一起使用,其在用户自定义变量中读取一系列相关的变量。该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值。

二、包含控制器(Include Controller)

作用:用于引用外部的Jmx文件;从而控制多个测试计划组合

三、事务控制器(Transaction Controller)

作用: 事务控制器会生产一个额外的采样器,用来统计该控制器子结点的所有时间。

四、仅一次控制器(Once Only Controller)

作用:在测试计划执行期间,该控制器下的子结点对每个线程只执行一次,登录场景经常会使用到这个控制器。

五、吞吐量控制器(Throughput Controller)

作用:控制其下的子节点的执行次数与负载比例分配,也有两种方式:

Total Executions:设置运行次数

Percent Executions:设置运行比例(1~100之间,不用写%)

如:设置线程组循环5次,吞吐量控制器1:百分比40,吞吐量控制器2:百分比60

六、If 控制器(If Controller)

作用:根据给定表达式的值决定是否执行该节点下的子节点,默认使用javascript的语法进行判断

脚本参数化的几种方式

一、使用Jmeter自带函数获取参数值

Jmeter中可以产生值的函数有:Random( , , ),threadNum,CSVRead( , ),StringFromFile( , , , ) 。函数调用方法就不细说了,因为Jmeter中有函数助手

1、第一个参数:用于解析服务器响应数据的正则表达式。它会找到所有的匹配项。如果测试人员希望将表达式中的某部分应用在模板字符串中,记得加上圆括号。

2、第二个参数:这是一个模板字符串,函数会动态填写字符串的部分内容。要在字符串中引用正则表达式捕获的匹配组合,请使用语法:$[group_number]$。例如$1$或者 $2$。测试人员的模板可以是任何字符串

3、第三个参数:第3个参数告诉JMeter使用第几次匹配。测试人员的正则表达式可能会找到多个匹配项。对此,测试人员有4种选择:

整数,直接告诉JMeter使用第几个匹配项。 “1”对应第一个匹配,“2”对应第二个匹配,以此类推

RAND,告诉JMeter随机选择一个匹配项

ALL,告诉JMeter使用所有匹配项,为每一个匹配项创建一个模板字符串,并将它们连接在一起

浮点值0到1之间,根据公式(找到的总匹配数目*指定浮点值)计算使用第几个匹配项,计算值向最近的整数取整

4、 第四个参数:如果在上一个参数中选择了“ALL”,那么这第4个参数会被插入到重复的模板值之间

5、 第五个参数:如果没有找到匹配项返回的默认值

6、 第六个参数:重用函数解析值的引用名,参见上面内容

7、 第七个参数:输入变量名称。如果指定了这一参数,那么该变量的值就会作为函数的输入,而不再使用前面的采样结果作为搜索对象

二、使用CSV Data Set Config获取参数值

三、使用用户定义的变量获取参数值

一般配合ForEach控制器一起使用

参数值的传递

一、利用Cookie进行值的传递

用JMeter进行接口调试时,有时候会遇到需要登录的情况,如请求wetest的DataSearchAjax接口:

出现这种情况的原因很明显是未登录引起的。一个较好的解决方法就是将登录后的cookies保存下来,在访问DataSearchAjax接口的时候,带上用户登录后的cookies信息进行查看。

在JMeter中,我们可以通过如下途径进行cookies的传递,如下图添加HTPP Cookie管理器:

再给登录的接口添加前置处理器Bean Shell PreProcessor,用来保存登录的cookies:

我们要在Bean Shell PreProcessor里面添加我们的cookies值了。

二、利用正则匹配提取上一个接口的返回数据作为下个请求的输入

用JMeter进行接口调试时,经常会遇到上一接口的返回值中的某个字段,要作为下一接口的输入,这种情况下,我们需要利用正则匹配来提取我们需要的值。

例如,若要提取相应数据中的userid字段作为下个接口的输入的话,可以在该接口请求后面添加正则表达式提取器:

我们给正则表达式提取器命名为get_userid,并填写引用名称、正则表达式、模板、匹配数值、缺省值,填写后的如如下:

填写完成后,在添加新的HTTP请求,来测试提取到的user_id字段:

想了解更多工具的操作方法及使用技巧请关注图片右下角的号

还有更多的干货分享等着你哦

相关推荐

Docker篇(二):Docker实战,命令解析

大家好,我是杰哥上周我们通过几个问题,让大家对于Docker有了一个全局的认识。然而,说跟练往往是两个概念。从学习的角度来说,理论知识的学习,往往只是第一步,只有经过实战,才能真正掌握一门技术所以,本...

docker学习笔记——安装和基本操作

今天学习了docker的基本知识,记录一下docker的安装步骤和基本命令(以CentOS7.x为例)一、安装docker的步骤:1.yuminstall-yyum-utils2.yum-con...

不可错过的Docker完整笔记(dockerhib)

简介一、Docker简介Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,...

扔掉运营商的 IPTV 机顶盒,全屋全设备畅看 IPTV!

其实现在看电视节目的需求确实大大降低了,折腾也只是为了单纯的让它实现,享受这个过程带来的快乐而已,哈哈!预期构想家里所有设备直接接入网络随时接收并播放IPTV直播(电信点播的节目不是太多,但好在非常稳...

第五节 Docker 入门实践:从 Hello World 到容器操作

一、Docker容器基础运行(一)单次命令执行通过dockerrun命令可以直接在容器中执行指定命令,这是体验Docker最快捷的方式:#在ubuntu:15.10容器中执行ech...

替代Docker build的Buildah简单介绍

Buildah是用于通过较低级别的coreutils接口构建OCI兼容镜像的工具。与Podman相似,Buildah不依赖于Docker或CRI-O之类的守护程序,并且不需要root特权。Builda...

Docker 命令大全(docker命令大全记录表)

容器生命周期管理run-创建并启动一个新的容器。start/stop/restart-这些命令主要用于启动、停止和重启容器。kill-立即终止一个或多个正在运行的容器rm-于删除一个或...

docker常用指令及安装rabbitMQ(docker安装rabbitmq配置环境)

一、docker常用指令启动docker:systemctlstartdocker停止docker:systemctlstopdocker重启docker:systemctlrestart...

使用Docker快速部署Storm环境(docker部署confluence)

Storm的部署虽然不是特别麻烦,但是在生产环境中,为了提高部署效率,方便管理维护,使用Docker来统一管理部署是一个不错的选择。下面是我开源的一个新的项目,一个配置好了storm与mono环境的D...

Docker Desktop安装使用指南:零基础教程

在之前的文章中,我多次提到使用Docker来安装各类软件,尤其是开源软件应用。鉴于不少读者对此有需求,我决定专门制作一期关于Docker安装与使用的详细教程。我主要以Macbook(Mac平台)为例进...

Linux如何成功地离线安装docker(linux离线安装httpd)

系统环境:Redhat7.2和Centos7.4实测成功近期因项目需要用docker,所以记录一些相关知识,由于生产环境是不能直接连接互联网,尝试在linux中离线安装docker。步骤1.下载...

Docker 类面试题(常见问题)(docker面试题目)

Docker常见问题汇总镜像相关1、如何批量清理临时镜像文件?可以使用sudodockerrmi$(sudodockerimages-q-fdanging=true)命令2、如何查看...

面试官:你知道Dubbo怎么优雅上下线的吗?你:优雅上下线是啥?

最近无论是校招还是社招,都进行的如火如荼,我也承担了很多的面试工作,在一次面试过程中,和候选人聊了一些关于Dubbo的知识。Dubbo是一个比较著名的RPC框架,很多人对于他的一些网络通信、通信协议、...

【Docker 新手入门指南】第五章:Hello Word

适合人群:完全零基础新手|学习目标:30分钟掌握Docker核心操作一、准备工作:先确认是否安装成功打开终端(Windows用户用PowerShell或GitBash),输入:docker--...

松勤软件测试:详解Docker,如何用portainer管理Docker容器

镜像管理搜索镜像dockersearch镜像名称拉取镜像dockerpullname[:tag]列出镜像dockerimages删除镜像dockerrmiimage名称或id删除...