利用jmeter模拟手机接口测试

2023-11-20

利用jmeter模拟手机接口测试

(由于批量上传图片不方便,可以到博主网站查阅原版博客: https://blog.zhenglin.work/jmeter/use_jmeter_test_app.html
本文示例是从网上找到的月光茶人APP程序

首先手机操作月光茶人app一个完整的购买支付流程

  • 我们在监听平台中查看其产生的url(接口),下列列表为手机操作支付流程时,监听平台采集到数据

[外链图片转存失败(img-bV5WFR8h-1562124942690)(image/1.png)]

现实测试的APP,我们可以通过开发提供的api文档、抓包工具如fiddler,抓取app的访问请求,都可以获取到接口URL;如何获取具体接口需要灵活应变;通过浏览器访问的程序可以直接通过Chrome调试network就能获取到接口URL.

  • 上面列表是手机操作月光茶人APP:登录、首页列表、产品列表、加入购物车、成功加入到购物车、加入预购订单、预购订单详情、选择支付、订单提交成功产生的URL接口; 这9步构成一个完整的流程;我们把这9步的http请求加入到jmeter里面

[外链图片转存失败(img-G9tTXbc9-1562124942691)(image/2.png)]

  • 通过监控平台采集到URL进行分析,发现其他步骤会用到登录后产生的返回体里面appCartCookieId和appLoginToken动态参数,所以我们要在登录请求后面加入正则表达式提取器 来提取,它返回的参数

[外链图片转存失败(img-NiFNBT7Y-1562124942691)(image/3.png)]

.“appCartCookieId”:"(.+?)". 这个正则表达式 要提取appCartCookieId:后面""里面包含的内容

1 1 1表示 当有多个正则表达式时,只获取第一个,匹配数字1,表示从第一个开始;匹配数字,-1表示取出所有匹配值 0是随机,1 、2 表示匹配第几个

​ 如果有多个值和appCartCookieId匹配,一定要用 1 1 1这种形式来选择值,若有极端情况,有多个匹配值且位置不定 如:“address":{“area”:{“store_id”:“1”,“shippingGroup”:"",“pathNames”:“中国/广东省/深圳市/宝安区/福永/福围-下沙南”,“name”:“福围-下沙南”,“id”:“1000000”,“pathNames4Print”:“深圳市宝安区福永福围-下沙南”},“isDefault”:“1”,“telephone”:“18812341234”,“id”:“100347013e14430696ec765ff464429c” 取"18812341234后面的id,可以写成"18812341234",“id”:"(.+?)".*

​ 如果手机号是变动的,可以写成"1[3|4|5|8][0-9]\d{4,8}",“id”:"(.+?)".* 手机号正则表达式不能写成:^1[3|4|5|8][0-9]\d{4,8} , 和 ,^和 表示行开始和结束,要去掉,这里手机号并不是独占一行。

  • 接下的步骤就可以引用这两个参数,如下图可以写成parameters里面引用参数,也可以直接在body data里面编写多个参数,多个参数用&来连接

[外链图片转存失败(img-gCFfdloU-1562124942692)(image/4.png)]

如果想在路径里面使用上一个请求产生的参数,body data或者parameters必须带上这个参数,哪怕请求body体用不上这个参数

[外链图片转存失败(img-YZvBYJzf-1562124942692)(image/5.png)]

  • 最后添加用于查看结果的“查看结果树”和“聚合报告”,在“查看结果树”里面可以详细看到响应的数据、请求数据、取样结果等信息

[外链图片转存失败(img-0uDhFHGu-1562124942693)(image/6.png)]

[外链图片转存失败(img-AFbFcWyD-1562124942693)(image/7.png)]

[外链图片转存失败(img-IIvcWlGr-1562124942694)(image/8.png)]

  • 聚合报告汇总了接口访问总量错误信息等关键指标

[外链图片转存失败(img-1iHqOgLc-1562124942694)(image/9.png)]

  • 也可以把抓包获取的header添加到jmeter里面(模拟的更真实一些,表头一般是存储设备等信息的)

[外链图片转存失败(img-2XdJMZOt-1562124942695)(image/10.png)]

[外链图片转存失败(img-GJhJPsdA-1562124942696)(image/11.png)]

这样发送过来的请求,监控平台上设备就显示为iphone了

[外链图片转存失败(img-yjU7zS2H-1562124942697)(image/12.png)]

模拟登录月光茶人APP后选购支付流程大量并发的实现

如果APP对登录有限制,同一账号只能同时登录一次,且手里没有多余的账号如何进行并发测试呢,这个时候只需单独对登录http请求进行控制即可;其他请求操作可以放在一块进行并发测试;

新建一个setUp Thread Group

​ 使用这个进程组的好处时,他可以和tearDown Thread Group一起使用,构成一个 登录+中间各种操作/请求+退出的流程(单独使用setUp、tearDown也可以),登录请求放在setUp Thread Group,退出请求放在tearDown Thread Group里面,剩下的各种操作http请求放在线程组里面,我们此处没有用到退出操作就不需要新建tearDown Thread Group线程组了;

如下图,在setUp Thread Group里面添加登录http请求后,我们需要获取appCartCookieId和 appLoginToken参数并且要全局化,下面其他进程中的http请求能继续使用;首先用正则表达式提取器提取相关参数,具体操作步骤前面有说过,不再赘述

[外链图片转存失败(img-GePiQjlS-1562124942698)(image/13.png)]

[外链图片转存失败(img-fZT4hpdl-1562124942699)(image/14.png)]

“(.+?)”.* , (.+?)表示惰性匹配,表示从“开始,然后匹配到” 然后存起来;用\1 \2 或者$1 $2 取出第一个 第二个字符;

使用全局变量

添加后置处理器BeanShell PostProcessor,把上一步正则表达式提取器提取参数全局化;如下图

[外链图片转存失败(img-vYYCGbr6-1562124942700)(image/19.png)]

parameters参数填写正则表达式提取器提取的参数,然后在script模块进行全局化申明:

String appCartCookieId = bsh.args[0];

 

​         print (appCartCookieId);

 

​         ${__setProperty(newappCartCookieId,${appCartCookieId},)}

引用全局化参数

在其他进程组里面,进行引用全局化参数,引用格式:${__P(newappCartCookieId,)}

[外链图片转存失败(img-8HNcytdE-1562124942701)(image/15.png)]

上图除了全局变量外,还引用了其他参数:

_terminal-type=ios&appCartCookieId=KaTeX parse error: Expected group after '_' at position 2: {_̲_P(newappCartCo…{__P(newappLoginToken,)}&userId=e19fd14f3ebf48bcbc79d09d6775ff04;也可以写成parameters的形式,详细讲解可以参考:http://www.cnblogs.com/allen-zml/p/6552535.html

[外链图片转存失败(img-7cs6UA2r-1562124942702)(image/20.png)]

可以在登录线程组里面添加http信息头管理,填写设备信息tid、uid等这样模拟出来的请求更接近iOS移动设备发出的请求;

[外链图片转存失败(img-ZWM0fLRd-1562124942703)(image/16.png)]

控制吞吐量

  • 确定要添加控制吞吐量的位置后,添加-定时器-Constant Throughput Timer,然后填写如图相关信息

[外链图片转存失败(img-6F8TbwsH-1562124942704)(image/17.png)]

  • 如果想控制每秒2个并发,红色区域1填写120即可,如果Constant Throughput Timer添加到所有线程组的前面,都要用到此控制器,下拉选择all active threads选项;如果放到某一进程组,只供此进程组使用,可以选择this thread only;

[外链图片转存失败(img-PGi1ftk7-1562124942704)(image/18.png)]

博主博客网站:https://blog.zhenglin.work

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用jmeter模拟手机接口测试 的相关文章

随机推荐

  • LeetCode-----第八题-----字符串转换整数 (atoi)

    字符串转换整数 atoi 难度 中等 请你来实现一个 atoi 函数 使其能将字符串转换成整数 首先 该函数会根据需要丢弃无用的开头空格字符 直到寻找到第一个非空格的字符为止 接下来的转化规则如下 如果第一个非空字符为正或者负号时 则将该符
  • Java-spring相关八股

    1 Java中有哪几种方式来创建线程执行任务 继承Thread类 public class zhouyuThread extends Thread public static void main string args zhouyuThre
  • XL4015-ADJ 5A 大电流DC-DC原理图分享

    如有问题 请加扣扣群 460189483 最近咨询LM2596S ADJ 3A芯片竟然已经10元rmb了 于是找到5A负载能力的XL4015 ADJ 正品4元 以后就用这个代替啦 通过比较发现 XL4015的温度低一点 效率高一点 电流大一
  • Android 实时获取SurfaceView渲染的内容截图

    近期的需求 偶尔需要获取当前SurfaceView上渲染的内容视图 因为是通过网页端控制的 类似预览功能吧 百度了好久 没找到能用的 无意间发现了这个类PixelCopy java 网上没什么介绍 安卓系统封装的一个类PixelCopy j
  • 解决plt.title()中文显示问题

    我们直接用plt title 默认是显示英文 如图 应该在代码前加这几行代码就行了 解决中文显示问题 plt rcParams font sans serif SimHei plt rcParams axes unicode minus F
  • VMware虚拟机安装Ubuntu系统步骤详解

    VMware虚拟机安装Ubuntu系统步骤详解 Ubuntu系统介绍 VMware安装Ubuntu步骤 一 Ubuntu系统的下载 二 VMware workstation的下载安装 三 配置Ubuntu虚拟机系统 四 VMware安装Ub
  • vue插件(vue-print-nb)实现打印功能

    vue插件vue print nb实现打印功能 1 安装vue print nb 2 引入Vue项目 3 在组件中使用 4 vue print nb插件优化 1 安装vue print nb Vue2 0版本安装方法 npm install
  • 重命名文件或目录(renameTo)

    File or directory with old name File file new File oldname File or directory with new name File file2 new File newname R
  • list scala 当前位置 遍历_【Scala笔记——道】Scala List 遍历 foldLeft / foldRight详解...

    HOF foldLeft foldRight foldLeft 和 foldRight 都是对于 List 遍历的 高阶函数 是对列表遍历过程中进行函数操作的高阶函数抽象 List 遍历 假设有两个方法如下 求和 def sum ints
  • lyapunov直接法

    文章目录 定义6 6 Lyapunov第一定理 Lyapunov第二定理 用于刻画渐进稳定 内积分析 定义6 6 Lyapunov第一定理 假设 A C A subset C A C是闭的 如果存在A的邻域D和满足下面两条件的连续函数
  • 简单镜面反射

    前言 本篇博客只是一个简单的实现镜面反射功能的例子 主要是当做笔记使用 通过反射光向量实现流程 如下所示 核心要点 如下所示 1 顶点镜面反射颜色值等于反射光颜色乘以反射强度来获取 而入射光向量 法向量 视角向量 反射光向量的关系图如下所示
  • 【计算机毕业设计】基于微信小程序的电影院票务系统

    基于微信小程序的电影院票务系统 开发语言 Java 框架 ssm JDK版本 JDK1 8 服务器 tomcat7 数据库 mysql 5 7 一定要5 7版本 数据库工具 Navicat11 开发软件 eclipse myeclipse
  • 利用背景渐变实现边框样式

    css实现信封边框和虚线样式 利用线性渐变背景以及背景重复完成 1 利用渐变背景实现信封边框样式 div class letter border div letter border margin 100px width 750px heig
  • shopify 前端教程(还在学可能有很多错误理解以及知识点)

    第一步 本地开发环境的搭建 第一步是安装ruby gem 以下是官网的链接 Downloads rubyinstaller org 友情提示 官网下载速度非常慢 我不会翻墙 我是在csdn搜索别人下载好的安装 Windows下安装 ruby
  • 【Arthas】Arthas 类查找和反编译原理

    1 概述 转载 Arthas 类查找和反编译原理 2 开篇 Arthas支持通过类相关的操作命令 包括sc sm jad等 sc Search Class 命令搜索出所有已经加载到 JVM 中的 Class 信息 sm Search Met
  • Windows实例如何通过本地安全策略限制远程登录的IP地址

    Windows实例如何通过本地安全策略限制远程登录的IP地址 阿里云 禁止所有的IP地址连接服务器的RDP端口 远程连接登录服务器 单击 开始 选择 运行 输入gpedit msc 单击 确定 打开本地组策略编辑器 在左侧依次找到 计算机配
  • 新版jdk的keytool没有md5,怎么解决?

    第一种方案 降级你的java sdk版本 jre1 8 0 201 jdk8以下的版本是可以的 参考 Android平台签名证书 keystore 生成指南 DCloud问答 第二种方法参考 http www 360doc com cont
  • Qt中两个类通过信号槽进行传输数据遇到的问题

    1 场景需求 在QGraphicsItem类中发生重绘后 希望将改动的信息在主窗口MainWindow中的textedit控件中显示出来 例如在选中的QGraphicsItem生成的对象item后 在被鼠标选中时 在textedit中显示这
  • openwrt 进入failsafe模式

    OpenWrt固件通过reset键恢复出厂设置方法 此方式适用于 忘记 OpenWrt 登入密码 配错路由器IP地址导致无法访问路由器 配错firewall或路由表导致无法登入路由器甚至无法ping路由器 操作步骤 1 把电脑的IP地址设为
  • 利用jmeter模拟手机接口测试

    利用jmeter模拟手机接口测试 由于批量上传图片不方便 可以到博主网站查阅原版博客 https blog zhenglin work jmeter use jmeter test app html 本文示例是从网上找到的月光茶人APP程序