Jmeter录制前端打点接口

Jmeter录制前端打点接口,第1张

        对于接口测试,大多数人下意识想到的后端接口,其实,除了后端接口,前端也有对应的打点接口的,那这些打点接口有什么用呢?一般来说这些打点接口是前端用来记录前端的相关参数在不同的界面跳转的时候,验证查看相关的数据是否读取与传入,方便自己调试的时候查看相关的数据,除此之外,这些打点数据可以用来做一些统计数据,查看前端哪些页面的访问情况,可以收集这些情况做大数据的分析。所以前端的接口,我们录制了主要了为了模拟移动端的打点,方便做数据统计分析用的,也可以作为移动端的一个压力测试,模仿用户高并发访问页面的数据。

       一般来说,前端的打点数据接口和后端有些不一样,为了打点,除了会传入一些通用的字段数据外,还需要输入特定动作的字段,并且特定动作的字段,还会根绝不同的来源类型进行区分,所以相对后端接口来说,需要设置的选项多了不少。例如我自己现在录制的一个沙箱环境的微商城的查看商品的打点接口:

GET /s/pi-mall/1531564428887/i2.gif  这个接口看起来和后端的接口很多不一样,只有一个模块的区分,很多内容需要根据传入的数据进去区分的,具体的抓包截图如下:

从截图上可以看出,这个前端的打点接口需要传入2个url,

一个是左侧的网关接口(host ): gateway.master.sandbox.terran.wxpai.cn

一个是商品详情页面的地址(url)这个地址才是我接口的真正页面地址:http://31612.sandbox.terran.wxpai.cn/mall/mobile/2.4.0/?#/detail?id=17810

然后下面是需要传入的20多个参数。

开始录制的时候,为了方便,我是用了fiddler的headers页面的 request header的内容,这样可以一次性传入所有的参数

复制的时候,发现有部分传入的参数的符号被改了编码样式:

GET /s/pi-mall/1531642985754/i2.gif?url=http%3A%2F%2F31612.sandbox.terran.wxpai.cn%2Fmall%2Fmobile%2F2.4.0%2F%3F%23%2Fdetail%3Fid%3D17810&title=%E5%95%86%E5%93%81%E8%AF%A6%E6%83%85&ua=Mozilla%2F5.0%20(Linux%3B%20Android%207.0%3B%20KNT-AL20%20Build%2FHUAWEIKNT-AL20%3B%20wv)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Version%2F4.0%20Chrome%2F57.0.2987.132%20MQQBrowser%2F6.2%20TBS%2F044109%20Mobile%20Safari%2F537.36%20MicroMessenger%2F6.7.1321(0x26070030)%20NetType%2FWIFI%20Language%2Fzh_CN&screen_width=360&screen_height=640&pixel_depth=32&screen=360x640&referer=http%3A%2F%2F31612.sandbox.terran.wxpai.cn%2Fmall&uid=55527&ent_id=31612&app_type=pi&domain=31612.sandbox.terran.wxpai.cn&user_mark=&device=KNT-AL20%20Build%2FHUAWEIKNT-AL20&os=Android&os_version=7.0&pf=wechat&pf_version=6.7.1321&ch=&prev_ch=&client_type=web&app=pi-mall&log_type=pageview&prev_page=%2Findex¤t_page=%2Fdetail%3Fid%3D17810&path=%2Fdetail%3Fid%3D17810&mod_path=%23%2Fdetail&prev_mod_path=%23%2Fdetail&product_id=17810&sharer_id=&_=1531642985753.49f305a6 HTTP/1.1

开始以为是被加密的时候改码显示了,所以手动一个个改回图一第一次看到参数的格式,并且把 可能会换动的参数给参数化,例如 ent_id 、user_id、product_id 这一类的变量用 ${ent_id} 的格式进行才参数化,这样可以在录制循环前面加个加个自定义变量进行一次性输入。但是发现地址好长,需要对应着一个个参数位置去来回修改,看的眼睛都花了,而且调试了半小时,发现很容易改错了地方,老提示报错。于是决定采用parameters 部分逐个添加对应的参数和数值,这样就不用担心改错了参数了,并且可以和图一的参数表格一一对应,然后完成后的结果如下:

开始以为这样就可以设置成功了,于是单击执行这个任务测试了下,发现报错了:

java.net.URISyntaxException: Illegal character in fragment at index 180:

但是仔细的对着每一个参数和抓包的图一的数据对照,发现没写错什么啊,为什么会报这个错的?然后百度了一下这个错误,才知道原来前端的打点接口后面接的是url,很多格式需要转码,具体的解释如下:

(解答参考地址:https://blog.csdn.net/maybe_frank/article/details/78714449)

于是按照这个格式一个个的改会转码的格式(原来是自己一个错误的理解,擅自改回正常的显示格式引起的错误,一直以为前段打点接口传入参数内容和后端接口一直,原来是需要转码的),这个坑踩的不冤,于是按照这个格式修改完毕后,重新执行了一次就OK了

终于顺利的完成了第一个前段打点接口的录制了。

本文只讲jmeter分布式压测怎么在Linux环境下配置:

使用分布式压测,是因为单个压测机并发到不到系统要求,所以多个压测机同时去压。

一般是由一个主机(master)和几台压力机(slave)组成。

主机 主要是起到启动和收集结果功能(当然也可以参与压测但不建议),测试脚本jmx在这台机器下,执行的时候会发送给每台压力机。

压力机 主要接受主机发送的压测脚本,同时进行压测,并把结果回传给主机。

以下是本人的压测环境,可以参考的去配置:

都是在Linux环境下(有些是主机Windows,压力机Linux,都是这样配置)

master主机:10.244.162.8

slave压测机(三台):10.244.162.9,10.244.162.10,10.244.162.11

主机ping一下压测机,是否可以ping通,否则关闭防火墙或者多个网卡(一台机器可能配置多个网卡多个IP,尤其是Windows当做主机)。

jdk,jmeter安装在主机和压力机下,尽量版本统一,jmeter在这几个机器服务都可以启动jmeter -v,如果权限不够到bin/目录下,命令: chmod 777 jmeter jmeter-server jmeter.sh 。(安装比较简单,这里就不多赘述)

保存。

在apache-jmeter-5.1.1/bin下执行./jmeter-server(代表jmeter启动,监听状态,等待主机发送测试脚本和执行命令) ,

有些启动命令:./jmeter-server -Djava.rmi.server.hostname=10.244.162.10(当前机器的ip),我觉得都行,没编辑配置文件那一项这样启动。

启动就设置完成。

如果是Windows当主机,重启一下jmeter在运行-远程启动既可以看到压测机。

如果是Linux下主机,需要用到命令:

我是在测试jmx脚本的目录下执行,这样方便收集信息。

sh (jmeter启动)  -n -t (jmx脚本) -R  (压力机ip,多个中间用英文逗号隔开) -l (test.jtl)  -e -o  (压测报告结果html文件夹)

sh /app/apache-jmeter-5.2.1/bin/jmeter.sh -n -t test.jmx -R 10.244.162.9,10.244.162.10 -l test.jtl  -e -o  test

注意:主机只传jmx给压力机,如果压测脚本有引用变量文件,比如csv,txt文件等是不传的,压力机也要有这些变量文件,复制过去存放的目录和上面压力机./jmeter-server启动的目录一致(就是你在哪个目录启动的就放在哪个目录下),否则压力机找不到变量文件,执行会报错或者直接结束无测试结果。

一、配置java环境1:先查看系统32/64: uname -a

根据系统的版本去Oracle官网下载jdk,下载后安装jdk即可。

2:配置JAVA环境变量:

vi /etc/profile

追加如下内容:

JAVA_HOME=/opt/jdk1.6.0_20

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME

export PATH

export CLASSPATH

其中的JAVA_HOME为jdk的安装路径

3:验证 echo $PATH 或者 java -version

二、安装resin

下载resin后,解压运行安装脚本: ./resin.sh console。然后在自己pc上访问 server ip:port 看到resin默认欢迎页面即说明安装成功。之后把在web项目的war包拷进 ren目录下的webapps 文件夹内,即可在外网访问服务器上的web项目了。

三、 安装jmeter

下载:同样在jemeter官网下载 对应的安装包,解压后执行:./jmeter -n -t ../ssdb_test.jmx -l ../log.jtl

命令说明:

a.-n 参数说明不用验证是否安装了图形库

b. .jmx文件可以在windows环境下的用jmeter图形化生成,涉及参数以及测试结果的.csv文件路径可以直接 用notepad++ vi 等修改.jmx文件,确保其相对于.jmx文件路径正确。

c.log.jtl 保存测试结果 既然没装图形界面库,那么测试结果.jtl文件就只能在windows下用jmeter来查看了。执行效果如下:

[@zjm_44_250 bin]# ./jmeter -n -t ../ssdb_test.jmx -l ../log.jtl

Creating summariser <summary>

Created the tree successfully using ../ssdb_test.jmx

Starting the test @ Mon Dec 29 18:43:20 CST 2014 (1419849800772)

Waiting for possible shutdown message on port 4445

summary =100 in 0.3s = 289.9/s Avg: 105 Min:3 Max: 285 Err:0 (0.00%)

Tidying up ...@ Mon Dec 29 18:43:21 CST 2014 (1419849801734)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7240102.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-03
下一篇2023-04-03

发表评论

登录后才能评论

评论列表(0条)

    保存