既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
logging.basicConfig(
level=logging.INFO, # 定义输出到文件的log级别,大于此级别的都被输出
format='%(asctime)s %(filename)s : %(levelname)s %(message)s', # 定义输出log的格式
datefmt='%Y-%m-%d %A %H:%M:%S', # 时间
filename=filenames, # log文件名
filemode='a') # 写入模式“w”或“a”
# 配置这一段是为了输出至屏幕
#console = logging.StreamHandler() # 定义console handler
#console.setLevel(logging.INFO) # 定义该handler级别
#formatter = logging.Formatter('%(asctime)s %(filename)s : %(levelname)s %(message)s') # 定义该handler格式
#console.setFormatter(formatter)
#logging.getLogger().addHandler(console) # 实例化添加handler
if(loglevel=='info'):
logging.info(message)
elif(loglevel=='error'):
logging.error(message)
else:
logging.info(message)
# 配置这一段是为了输出至屏幕
#输出完需要清理
#logging.getLogger().removeHandler(console)
def selmongodata(self):
#数据库环境
mongoenv=“dev”
#客户编号
appCode=“”
#场景
orderType=“”
#供应商
channel=“”
#业务
yewu=“”
try:
mongoenv = sys.argv[1]
appCode = sys.argv[2]
orderType = sys.argv[3]
channel = sys.argv[4]
yewu = sys.argv[5]
except Exception as err:
loginfo='workcode:【'+workcode+'】,【---输入参数有误error---】【'+err+'】'
this.console_out(loginfo,'error')
print('error')
#终止任务
sys.exit(0)
mongoconf=""
if mongoenv=="dev":
mongoconf=DEV_MONGO_HOST
elif mongoenv=="stg":
mongoconf=STG_MONGO_HOST
elif mongoenv=="pro":
mongoconf=PRO_MONGO_HOST
else:
mongoconf=DEV_MONGO_HOST
myquery = { "appCode": appCode ,"orderType":orderType,"channel":channel}
loginfo='workcode:【'+workcode+'】,【---执行查询命令---】数据库环境:【'+mongoenv+'】,查询条件:【'+str(myquery)+'】'
this.console_out(loginfo,'info')
try:
myclient=pymongo.MongoClient(mongoconf)
mydb=myclient["boluome"]
mycol=mydb["data_statistics"]
s_str=mycol.find_one(myquery)
#print(type(s_str),type(s_str),s_str)
loginfo='workcode:【'+workcode+'】,【---执行查询命令---】,返回值:【'+str(s_str)+'】,查询条件:【'+str(myquery)+'】'
#{'_id': ObjectId('5bf64f5be4ba49123aef2cda'), --数据库uuid
# 'appCode': 'zjrcu', --客户编号
# 'orderType': 'waimai', --场景
# 'channel': 'eleb', --供应商
# 'updatedAt': 1544429100000, --更新时间戳
# 'orderCountNum': 128, --当天下单总量
# 'orderPayNum': 117, --当天支付订单量
# 'orderCancelNum': 11, --当天取消订单量
# 'orderTobePayNum':0, --当天待支付订单量
# 'date': '2018-12-10 16:05'} --数据更新时间
print(s_str[yewu])
this.console_out(loginfo,'info')
myclient.close()
except Exception as err:
loginfo='workcode:【'+workcode+'】,【---执行查询命令---】,返回值:【'+str(err)+'】,查询条件:【'+str(myquery)+'】'
this.console_out(loginfo,'error')
#若异常返回
print('error')
#生成配置文件
def setmongoconf(self,mongoconf):
myclient=pymongo.MongoClient(mongoconf)
mydb=myclient[“boluome”]
mycol=mydb[“data_statistics”]
s_str=mycol.find()
#print(type(s_str),type(s_str),s_str)
#{'_id': ObjectId('5bf64f5be4ba49123aef2cda'), --数据库uuid
# 'appCode': 'zjrcu', --客户编号
# 'orderType': 'waimai', --场景
# 'channel': 'eleb', --供应商
# 'updatedAt': 1544429100000, --更新时间戳
# 'orderCountNum': 128, --当天下单总量
# 'orderPayNum': 117, --当天支付订单量
# 'orderCancelNum': 11, --当天取消订单量
# 'orderTobePayNum':0, --当天待支付订单量
# 'date': '2018-12-10 16:05'} --数据更新时间
pythons="/etc/zabbix/qingyunsdk/zabbixmongodb.py"
huanjing="dev"
for x in s_str:
strs_orderCountNum="UserParameter=mongodata-"+huanjing+"-"+x["appCode"]+"-"+x["orderType"]+"-"+x["channel"]+"-orderCountNum,"+pythons+" "+huanjing+" "+x["appCode"]+" "+x["orderType"]+" "+x["channel"]+" orderCountNum"
strs_orderPayNum="UserParameter=mongodata-"+huanjing+"-"+x["appCode"]+"-"+x["orderType"]+"-"+x["channel"]+"-orderPayNum,"+pythons+" "+huanjing+" "+x["appCode"]+" "+x["orderType"]+" "+x["channel"]+" orderPayNum"
strs_orderCancelNum="UserParameter=mongodata-"+huanjing+"-"+x["appCode"]+"-"+x["orderType"]+"-"+x["channel"]+"-orderCancelNum,"+pythons+" "+huanjing+" "+x["appCode"]+" "+x["orderType"]+" "+x["channel"]+" orderCancelNum"
strs_orderTobePayNum="UserParameter=mongodata-"+huanjing+"-"+x["appCode"]+"-"+x["orderType"]+"-"+x["channel"]+"-orderTobePayNum,"+pythons+" "+huanjing+" "+x["appCode"]+" "+x["orderType"]+" "+x["channel"]+" orderTobePayNum"
print(strs_orderCountNum)
print(strs_orderPayNum)
print(strs_orderCancelNum)
print(strs_orderTobePayNum)
myclient.close()
if name == ‘main’:
#本次任务的编号
workcode=datetime.datetime.now().strftime(“%Y%m%d%H%M%S.%f”)
this=zabbixmongodb()
#数据连接参数说明
#配置说明
authSource=admin 验证用、
replicaSet=foba 副本集群模式,副本名称为foba;
readPreference=secondaryPreferred 当主节点不能读取时候会自动切换至从节点读取 ,
serverSelectionTimeoutMS=3 设置超时后重试3次,测试下来基本1秒左右。如果不加这个会一直重试,30秒结束
DEV_MONGO_HOST = ‘mongodb://root:密码@192.168.0.7,192.168.0.10/?authSource=admin&replicaSet=foba&readPreference=secondaryPreferred&serverSelectionTimeoutMS=3’
STG_MONGO_HOST = ‘mongodb://root:密码@192.168.2.3,192.168.2.4/?authSource=admin&replicaSet=foba&readPreference=secondaryPreferred’
PRO_MONGO_HOST = ‘mongodb://root:密码@mongo-m.localdomain,mongo-s.localdomain,mongo-s2.localdomain/?authSource=admin&replicaSet=foba&readPreference=secondaryPreferred’
#生成配置文件,zabbix时候调用,执行python3 /Users/ll/Desktop/work/gogs/qingyunsdk/zabbixmongodb.py > /Users/ll/Desktop/work/gogs/qingyunsdk/dev-mongo.conf
#this.setmongoconf(DEV_MONGO_HOST)
#执行查询命令
this.selmongodata()
### 2.2、上传python脚本至服务器,并测试通过
上传该zabbixmongodb.py程序至服务器,我是上传至zabbix-server所在服务器,其实这个可以上传任务服务器,上面的环境需要有python3和zabbix-agent
安装pyhton连接mongodb的插件pymongo
使用pip3 install pymongo
[root@i-pumjfiuu ~]# cd /etc/zabbix/
[root@i-pumjfiuu zabbix]# ls
qingyunsdk tcp\_connections.sh zabbix\_agentd.conf zabbix\_agentd.conf.bak zabbix\_agentd.d
![](https://img-blog.csdnimg.cn/20181214171805982.png)
[root@i-pumjfiuu zabbix]# cd qingyunsdk/
[root@i-pumjfiuu qingyunsdk]# ls
conf dev-mongo.conf logs qingyun.py setgiturl.py zabbixmongodb.py
[root@i-pumjfiuu qingyunsdk]# pwd
/etc/zabbix/qingyunsdk
[root@i-pumjfiuu qingyunsdk]#
#赋可执行权限
[root@i-pumjfiuu qingyunsdk]# chmod +x zabbixmongodb.py
测试脚本是否起作用
[root@i-pumjfiuu qingyunsdk]# ./zabbixmongodb.py dev hxb menpiao lvmama orderPayNum
0
[root@i-pumjfiuu qingyunsdk]# cd ..
[root@i-pumjfiuu zabbix]# ls
qingyunsdk tcp\_connections.sh zabbix\_agentd.conf zabbix\_agentd.conf.bak zabbix\_agentd.d
[root@i-pumjfiuu zabbix]# cd zabbix\_agentd.d/
[root@i-pumjfiuu zabbix\_agentd.d]# ls
dev-mongo.conf mongo.conf.bak
[root@i-pumjfiuu zabbix\_agentd.d]#
编辑dev-mongo.conf,配置zabbix的监控项
比如我这边,添加以下内容,其中mongodata-dev-icbc-jiayouka-juhe-orderCountNum 就是zabbix的键值:
[root@i-pumjfiuu zabbix\_agentd.d]# vim dev-mongo.conf
UserParameter=mongodata-dev-icbc-jiayouka-juhe-orderCountNum,/etc/zabbix/qingyunsdk/zabbixmongodb.py dev icbc jiayouka juhe orderCountNum
再编辑zabbix\_agentd.conf文件
[root@i-pumjfiuu zabbix\_agentd.d]# cd ..
[root@i-pumjfiuu zabbix]# vim zabbix\_agentd.conf
添加以下三项:
#开启远程脚本执行权限
EnableRemoteCommands= 1
zabbix的脚本配置读取目录地址
Include=/etc/zabbix/zabbix_agentd.d/*.conf
#脚本使用root权限执行
AllowRoot=1
执行重启命令使配置生效
[root@i-pumjfiuu zabbix]# service zabbix\_agentd restart
然后使用zabbix\_get命令测试刚配置的键值是否能正常获取数据
[root@i-pumjfiuu zabbix]# /usr/bin/zabbix\_get -s 192.168.1.70 -p 10050 -k "mongodata-dev-icbc-jiayouka-juhe-orderCountNum"
![](https://img-blog.csdnimg.cn/20181214173120997.png)
ok,正常,如果这里报错就需要检查下zabbix的zabbix\_agentd.conf和dev-mongo.conf 的配置
### 2.3、配置zabbix web页面,获取数据入库
找到主机zabbix server,新建监控项,配置如下
设置键值:mongodata-dev-oklife-game-yizhong-orderCountNum
![](https://img-blog.csdnimg.cn/20181214173534207.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1MjcwMDIyMg==,size_16,color_FFFFFF,t_70)
建立图形验证该键值是否能正常获取数据
![](https://img-blog.csdnimg.cn/20181214173649587.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1MjcwMDIyMg==,size_16,color_FFFFFF,t_70)
ok,能获取数据
### 2.4 、配置grafana展现数据,详细配置可参考我之前的grafana文章
![](https://img-blog.csdnimg.cn/20181214173905637.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1MjcwMDIyMg==,size_16,color_FFFFFF,t_70)
![img](https://img-blog.csdnimg.cn/img_convert/4643e33545fb4a872f57bea85549fccd.png)
![img](https://img-blog.csdnimg.cn/img_convert/3c0ef46e3e08588c76baf48a8d4758c9.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
img-h2pZDM12-1715897157339)]
[外链图片转存中...(img-88OG6KRZ-1715897157340)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**