背景:公司在发布版本的时候,需要维护几百台服务器,往每个服务器上面部署相同的应用。发布完成后,需要测试对每个环境进行相同的环境,目前的测试验证是手工进行的。最近公司要实现这么个功能,让我自动化处理环境验证,并且要保证效率(就是并发咯),执行完成后把结果发送给相关人员。发布版本的时候,会存在分批次发布的问题(几百台服务器分几天发布),这样执行验证的时候,需要预先知道运维到底发布了哪些环境。
需要实现的功能:1、实现自动话验证 2、接收运维传递的服务器参数,解析为服务器的访问url 3、环境太多,线性执行效率太低,考虑多线程 4、ui自动化存在不稳定问题,第一次失败的环境需要重新执行 5、执行结果通过邮件发送给相关人员。
理清需要实现的功能后,跟运维沟通,运维传递服务器信息的时候 是以url格式传递给我,服务器信息拼接在url后面,以逗号分割。我这边部署一个web服务,接收到url请求后,解析url,把服务器信息转变为url信息,解析后的url信息传递给执行脚本。解决这个后,基本就没什么问题了
多线程并发。使用了threading
threads=[]
nloops=range(len(loops))
count=0
drs=[]
urls=[]
for i in range(len(loops)):
login(i,drs,loops,count,urls)
count=count+1
for i in drs:
t=threading.Thread(target=loop,args=(i,))
threads.append(t)
for i in nloops:
threads[i].start()
for i in nloops:
threads[i].join()
关于threading控制线程数的问题,因为服务器有几百台,如果不控制线程数量,性能方面会有问题,所以在线程外面,切割服务器分组,每次只多线程运行一个组的测试,执行完毕后再执行下一个组。服务器分组的格式为
def splist(l,s):
"将list等分 l"
return[l[i:i+s] for i in range(len(l)) if i%s==0]
剩下来就是个人的盲点知识了,部署web服务器,运维传递请求参数,我接收后执行。翻了下django,部署了一个服务,如果需要其它pc访问,在启动服务器的时候 设置服务器ip为0.0.0.0:8000
《待续》。。。。。。。。。。。