以zabbix登陆接口做测试,zabbix-api:http://192.168.228.45/zabbix/api_jsonrpc.php
curl方式请求
准备工具:yum install -y curl
[root@zabbix job]# curl -H "Content-Type:application/json" -X POST -id '{
"jsonrpc": "2.0",
"method": "user.login",
"params": {"user": "Admin","password": "zabbix"},
"id": 1,
"auth": null}' http://192.168.228.45/zabbix/api_jsonrpc.php
HTTP/1.1 200 OK
Date: Wed, 01 Jul 2020 09:38:17 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
X-Powered-By: PHP/5.4.16
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST
Access-Control-Max-Age: 1000
Content-Length: 68
Content-Type: application/json
{"jsonrpc":"2.0","result":"08f47ee4fa9d55b0928abcd637d9e00e","id":1}[root@zabbix job]#
[root@zabbix job]# curl -H "Content-Type:application/json" -X POST -id '{"jsonrpc": "2.0","method": "user.login","params": {"user": "Admin","password": "zabbix"},"id": 1,"auth": null}' http://192.168.228.45/zabbix/api_jsonrpc.php
fiddler方式请求
下载安装fiddler: https://www.telerik.com/fiddler
打开组合器输入对应的api地址
post请求方式输入对应的http信息头:Content-Type: application/json
参数:{"jsonrpc": "2.0","method": "user.login","params": {"user": "Admin","password": "zabbix"},"id": 1,"auth": null}
点击执行即可查看post请求结果:
此时就能看到json格式返回的zabbix用户登录密钥口令
jmeter方式请求
下载安装jmeter工具: https://jmeter.apache.org/download_jmeter.cgi
jmeter下载官网tar包即可: apache-jmeter-5.3.tgz windows,linux均可使用(均需要jdk环境)
打开jmeter,右击测试计划添加线程组
右击线程组添加一个取样器-----HTTP请求任务
http请求任务填入对应的参数:
这段json参数是取zabbix host主机信息的测试参数
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "e54c3ed48dec483879d3e7b2dc26a640"}
右击线程组–添加—配置元件----http信息头管理器:
“Content-Type:application/json”
线程组----添加----监听器(结果输出工具)—查看结果树:
接着回到http请求点击上方播放按钮开始任务:
此时即可通过观察结果来查看对应的调用结果是否成功:
在linux服务器我们可以通过这个小东西进行压力测试
首先我们在dashboard ui 图形化界面测试是否可以调用成功
测试前我们可以设置本次测试需要运行的次数、并发次数、调度器一共需要执行测试的时间(一般五分钟的并发次数较为稳定、准确)
然后将其保存为运行脚本文件 http-zabbix-login.jmx
首次保存即可直接点击上方的保存按钮,另存为可以点击另存为:
将其上传至linux服务器机器:
<intProp name="LoopController.loops">-1</intProp> 循环次数:-1永远循环
</elementProp>
<stringProp name="ThreadGroup.num_threads">100</stringProp> 并发数 100
<stringProp name="ThreadGroup.ramp_time">3</stringProp> 3秒之后开始每秒100次并发请求,前三秒的每秒请求为 100/3次
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<stringProp name="ThreadGroup.duration">30</stringProp> 持续执行30s
jmeter -n -t http-zabbix-login.jmx -l http-zabbix-login.jtl
-n 面图形化界面执行 -t 指定执行脚本文件 http-zabbix-login.jmx -l 输出结果文件 http-zabbix-login.jtl
[root@zabbix job]# ./jmeter.avg
请输入要执行的脚本文件 jmx 文件全称, 与 jtl 输出结果文件全称: eg : http-zabbix-login.jmx http-zabbix-login.jtl
*** 请输入要执行的脚本文件 jmx 文件全称, 与 jtl 输出结果文件全称: eg : http-zabbix-login.jmx http-zabbix-login.jtl
Please input a jmx---filename1:http-zabbix-login.jmx
Please input a jtl---filename2:http-zabbix-login.jtl
Creating summariser <summary>
Created the tree successfully using http-zabbix-login.jmx
Starting standalone test @ Wed Jul 01 18:13:57 CST 2020 (1593598437817)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
持续运行时间 TPS(并发)请求数 平均请求时间(Avg ms)
summary + 19 in 00:00:02 = 10.1/s Avg: 98 Min: 51 Max: 376 Err: 0 (0.00%) Active: 1 Started: 2 Finished: 1
summary + 282 in 00:00:26 = 10.7/s Avg: 85 Min: 49 Max: 891 Err: 0 (0.00%) Active: 0 Started: 4 Finished: 4
summary = 301 in 00:00:28 = 10.7/s Avg: 85 Min: 49 Max: 891 Err: 0 (0.00%)
Tidying up ... @ Wed Jul 01 18:14:26 CST 2020 (1593598466603)
... end of run
this is tpsdata avg : 10.50 平均TPS数值
this is avgdata avg (ms) : 89.33
this is avgdata avg (s) : .0893 平均请求响应时间(s)
上为自己写的一个求平均值的小脚本:
[root@zabbix job]# cat jmeter.avg
#!/bin/bash
echo "请输入要执行的脚本文件 jmx 文件全称, 与 jtl 输出结果文件全称: eg : http-zabbix-login.jmx http-zabbix-login.jtl"
echo -e "\033[33;40m *** 请输入要执行的脚本文件 jmx 文件全称, 与 jtl 输出结果文件全称: eg : http-zabbix-login.jmx http-zabbix-login.jtl \033[0m"
read -p "Please input a jmx---filename1:" jmx
read -p "Please input a jtl---filename2:" jtl
jmeter -n -t $jmx -l $jtl &> ./jmeter.resful
#jmeter -n -t http-zabbix-login.jmx -l http-zabbix-login.jtl &> jmeter.resful
cat ./jmeter.resful
gawk '{ print $7 }' ./jmeter.resful | grep s | awk -F "/" '{ print $1 }' > ./tps
gawk '{ print $7,$9 }' ./jmeter.resful | grep s | awk '{ print $2 }' > ./avg
tpsdata=`gawk '{ a += $1 }END { print a }' ./tps`
avgdata=`gawk '{ a += $1 }END { print a }' ./avg`
wl=`cat ./tps |wc -l`
echo "this is tpsdata avg : `echo "scale=2; $tpsdata / $wl" | bc`"
echo "scale=2; $tpsdata / $wl" | bc > ./tpsdata
echo "this is avgdata avg (ms) : `echo "scale=2; $avgdata / $wl" | bc`"
avgs=`echo "scale=2; $avgdata / $wl" | bc`
echo "this is avgdata avg (s) : `echo "scale=4; $avgs / 1000" | bc`"
echo "scale=4; $avgs / 1000" | bc > ./avgdata
不要因一次挫败就忘记你原先想要到达的地方。