如何快速全面验证网络端口连通性

1. 说明

  如何高效的验证压力机能否访问被测服务器的指定端口?我们常用的方法是手动远程到被测服务器去执行telnet命令,或者试几笔交易?那么,有没有更加便捷手段……

2. 背景简述

  我们测试、生产环境的网络端口访问权限都很严格,每有新的压测项目,压测前期的准备工作必有网络工单申请的流程,网络工单中涉及的压力机访问被测服务器端口都有一定的有效期。

  再有就是经常会遇到:以前压测过的项目所涉及的端口访问权限,时间久了我们也很难清楚的知道,目前压力机到被测服务器端口的连通性。我们8月项目排期比较满,用了很多时间来做各个服务器端口验证工作,那么有没有一种快速全面的验证方式呢?

  手工验证工作其实是很痛苦的一件事,于是我就萌生了一种想法,能不能改变现状,把验证网络的端口的效率提上来。目前采用的随机挑选法,总感觉不靠谱(其实是被坑过)。如果那么多的服务器每个都自己手动去验证,这种重复性的工作,感觉浪费好多时间。

3. 常见方案

  脚本场景:百度首页,10vu-50vu,每分钟增加10vu,增加到最大50vu保持1min后,开始以每分钟10vu递减,总计运行10分钟。

  我们常用的方案有两种:

    • 随机挑选一个服务器进行验证
    • 压力机单线程执行被测交易脚本

  这两种的方案,都不是那么完美。随机挑选一台被测服务器进行验证,即使这台服务器验证通过,就能保证其余服务器均正常么,显然不是,这明明是在犯以偏概全的错误,其实也是在给自己的懒找借口。我们再简单说下直接用压力机单线程执行被测交易脚本,确实问题不大,能满足我们遇到得大多数情况。那么什么情况不太适用呢,那就生产压测,在生产环境压测,有些敏感的交易是不能随便发送

4. BaoLu NetworkPort Sampler

  • 插件图:

  • Master模式验证

我们以百度的443端口为例:

结果图:

我们再将端口号改成8888,看下结果:

 

  •  Slave模式验证

在Maser模式基础上,启动一台Salve机器,IP为192.168.1.117 ,JMeter GUI模式下分布式执行

再来看下salve机器控制台日志:

jmeter-slave.log 部分日志

 1 2021-08-26 22:56:26,375 INFO c.l.n.s.CheckNetworkPortSampler: 
 2     ___   ___           ___      ___      ___      ___   ___
 3    /\__\ /\  \         /\  \    /\  \    /\  \    /\__\ /\__\
 4   /:/  /_\:\  \       /::\  \  /::\  \  /::\  \  /:/  //:/ _/_
 5  /:/__//\/::\__\     /::\:\__\/::\:\__\/:/\:\__\/:/__//:/_/\__\
 6  \:\  \\::/\/__/     \:\::/  /\/\::/  /\:\/:/  /\:\  \\:\/:/  /
 7   \:\__\\:\__\        \::/  /   /:/  /  \::/  /  \:\__\\::/  /
 8    \/__/ \/__/         \/__/    \/__/    \/__/    \/__/ \/__/
 9 10 Initializing..... baolu-jmeter-plugins V1.0.0
11 12 2021-08-26 22:56:26,438 INFO o.a.j.e.StandardJMeterEngine: Starting ThreadGroup: 1 : Thread Group
13 2021-08-26 22:56:26,438 INFO o.a.j.e.StandardJMeterEngine: Starting 1 threads for group Thread Group.
14 2021-08-26 22:56:26,438 INFO o.a.j.e.StandardJMeterEngine: Thread will continue on error
15 2021-08-26 22:56:26,438 INFO o.a.j.t.ThreadGroup: Starting thread group... number=1 threads=1 ramp-up=1 delayedStart=false
16 2021-08-26 22:56:26,441 INFO o.a.j.t.ThreadGroup: Started thread group number 1
17 2021-08-26 22:56:26,441 INFO o.a.j.e.StandardJMeterEngine: All thread groups have been started
18 2021-08-26 22:56:26,444 INFO o.a.j.t.JMeterThread: Thread started: 192.168.1.117:1099-Thread Group 1-1
19 2021-08-26 22:56:26,503 INFO o.a.j.s.SampleResult: Note: Sample TimeStamps are START times
20 2021-08-26 22:56:26,503 INFO o.a.j.s.SampleResult: sampleresult.default.encoding is set to UTF-8
21 2021-08-26 22:56:26,503 INFO o.a.j.s.SampleResult: sampleresult.useNanoTime=true
22 2021-08-26 22:56:26,503 INFO o.a.j.s.SampleResult: sampleresult.nanoThreadSleep=5000
23 2021-08-26 22:56:26,533 INFO c.l.n.s.CheckNetworkPortSampler: 192.168.1.117 -> www.baidu.com 443 connected
24 2021-08-26 22:56:26,556 INFO o.a.j.t.JMeterThread: Thread is done: 192.168.1.117:1099-Thread Group 1-1
25 2021-08-26 22:56:26,556 INFO o.a.j.t.JMeterThread: Thread finished: 192.168.1.117:1099-Thread Group 1-1
26 2021-08-26 22:56:26,561 INFO o.a.j.e.StandardJMeterEngine: Notifying test listeners of end of test
27 2021-08-26 22:56:26,561 INFO o.a.j.s.DataStrippingSampleSender: Test Ended on 192.168.1.117:1099
28 2021-08-26 22:56:26,561 INFO o.a.j.s.BatchSampleSender: Test Ended on 192.168.1.117:1099
29 2021-08-26 22:56:26,575 INFO o.a.j.e.StandardJMeterEngine: Test has ended on host 192.168.1.117:1099 
30 2021-08-26 22:57:05,125 INFO o.a.j.s.BatchSampleSender: Using batching for this run. Thresholds: num=100, time=60000
31 2021-08-26 22:57:05,126 INFO o.a.j.s.DataStrippingSampleSender: Using DataStrippingSampleSender for this run with stripAlsoOnError: true
32 2021-08-26 22:57:05,158 INFO o.a.j.e.RemoteJMeterEngineImpl: Creating JMeter engine on host 192.168.1.117:1099 base '.'
33 2021-08-26 22:57:05,158 INFO o.a.j.e.RemoteJMeterEngineImpl: Remote client host: 192.168.1.109
34 2021-08-26 22:57:05,158 INFO o.a.j.s.FileServer: Set new base='.'
35 2021-08-26 22:57:05,164 INFO o.a.j.e.RemoteJMeterEngineImpl: Cleaning previously set properties: {}
36 2021-08-26 22:57:05,164 INFO o.a.j.e.StandardJMeterEngine: Applying properties {}
37 2021-08-26 22:57:05,169 INFO o.a.j.e.RemoteJMeterEngineImpl: Running test
38 2021-08-26 22:57:05,170 INFO o.a.j.e.StandardJMeterEngine: Running the test!
39 2021-08-26 22:57:05,171 INFO o.a.j.s.SampleEvent: List of sample_variables: []
40 2021-08-26 22:57:05,229 INFO o.a.j.e.StandardJMeterEngine: Starting ThreadGroup: 1 : Thread Group
41 2021-08-26 22:57:05,229 INFO o.a.j.e.StandardJMeterEngine: Starting 1 threads for group Thread Group.
42 2021-08-26 22:57:05,229 INFO o.a.j.e.StandardJMeterEngine: Thread will continue on error
43 2021-08-26 22:57:05,229 INFO o.a.j.t.ThreadGroup: Starting thread group... number=1 threads=1 ramp-up=1 delayedStart=false
44 2021-08-26 22:57:05,230 INFO o.a.j.t.ThreadGroup: Started thread group number 1
45 2021-08-26 22:57:05,230 INFO o.a.j.e.StandardJMeterEngine: All thread groups have been started
46 2021-08-26 22:57:05,230 INFO o.a.j.t.JMeterThread: Thread started: 192.168.1.117:1099-Thread Group 1-1
47 2021-08-26 22:57:10,271 ERROR c.l.n.s.CheckNetworkPortSampler: 192.168.1.117 -> www.baidu.com 8888 connection timed out
48 2021-08-26 22:57:10,306 INFO o.a.j.t.JMeterThread: Thread is done: 192.168.1.117:1099-Thread Group 1-1
49 2021-08-26 22:57:10,307 INFO o.a.j.t.JMeterThread: Thread finished: 192.168.1.117:1099-Thread Group 1-1
50 2021-08-26 22:57:10,312 INFO o.a.j.e.StandardJMeterEngine: Notifying test listeners of end of test
51 2021-08-26 22:57:10,313 INFO o.a.j.s.DataStrippingSampleSender: Test Ended on 192.168.1.117:1099
52 2021-08-26 22:57:10,313 INFO o.a.j.s.BatchSampleSender: Test Ended on 192.168.1.117:1099
53 2021-08-26 22:57:10,325 INFO o.a.j.e.StandardJMeterEngine: Test has ended on host 192.168.1.117:1099 

6. 结语

本次实验,宝路仅采用一台salve机器,毕竟家里电脑有限。。。。当我们有N多个目的服务器IP PORT的连通性要验证,再搭配个CSV Data Set Config配件原件即可。

采用插件的形式也方便了测试平台的快速接入,大家根据自己的实际情况来操作!最后,希望能对大家有所帮助,有任何意见或建议欢迎反馈!

对了!目前该插件已在 baolu-jmeter-plugins 文章中更新,欢迎下载体验!