基于Python的TestAgent实现
问题:
1、本人工作主要做自动化,经常要去Linux后台进行一些脚本操作,有时要去后台执行命令,如果逐个登陆比较费事,效率会大打折扣
2、虽然有可以直接去后台执行命令的AW,但是该AW存在很多问题,而且遇到交互式操作时不能很好的解决
基于以上问题,通过Python写了一个简单的CLI Agent,就叫做TestAgent吧,主要思路:
1、采用POST消息发送到TestAgent,TestAgent进行解析
2、TestAgent接受到消息后,把消息体存为一个文件
3、将文件更改为可执行的,然后启动一个进程去执行脚本
4、如果执行成功将结果返回给客户端,如果失败,同样将错误输出也返回给客户端
5、在POST消息的头域中可以设置超时时间,如果超时,返回“time out”,并将启动的进程给杀掉
代码如下:
#! /usr/bin/env python
import commands
import socket
import time
import os
import multiprocessing
import uuid
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer #HTTPServer的监听端口
PORT=12345 class HttpHandler(BaseHTTPRequestHandler):
tmpfile=''
#处理POST消息
def do_POST(self):
print self.path
content_len = int(self.headers.getheader('content-length',0))
#获取timeout
timeout = int(self.headers.getheader('timeout',0))
if timeout==0:
timeout=5
#解析消息并存储为文件
script=self.rfile.read(content_len)
x=uuid.uuid4()
self.tmpfile="."+str(x.int)
fd=open(self.tmpfile,'w')
fd.write(script)
fd.close()
os.system("chmod +x "+self.tmpfile)
script="./"+self.tmpfile
#执行脚本
self.ExecuteScript(script,timeout) def ExecuteScript(self,script,timeout=5):
#启动另一个进程执行脚本
p=multiprocessing.Process(target=self.ScriptWorker,args=(script,))
p.start()
i=0
while i<timeout:
if(not p.is_alive()):
return "successful"
else:
time.sleep(1)
i=i+1
#超时的话终止进程并杀掉执行任务的进程
p.terminate()
os.system("kill -9 "+str(p.pid))
self.send_error(400,"time out")
self.request.shutdown(socket.SHUT_RDWR)
self.request.close()
#删除临时文件
if self.tmpfile != '':
os.system("rm "+self.tmpfile)
self.tmpfile='' def ScriptWorker(self,script):
#执行脚本,返回状态码和输出
(status,result)=commands.getstatusoutput(script)
print script
print result
#如果成功返回200,如果失败返回400
if status == 0:
self.send_response(200)
else:
self.send_response(400)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write(result)
#删除临时文件
if self.tmpfile != '':
os.system("rm "+self.tmpfile)
self.tmpfile='' if __name__=='__main__':
os.system('rm .*')
server_address=('0.0.0.0',PORT)
http_server=HTTPServer(server_address,HttpHandler)
http_server.serve_forever()
测试:
采用curl或者restful client进行测试
1、执行简单命令

2、执行的命令不存在

3、执行一个Python脚本


4、执行一个超时的脚本

5、执行一个带有timeout头域的脚本



至此,基本所有功能都验证过了
PS:该程序理论上可以执行任何脚本,只要脚本的解释器写正确
使用时一般会再写个monitor脚本,放在crontab中,这样就完全可以不登陆服务器了,可以自动拉起TestAgent
希望该程序可以帮助大家,^v^ !!
地址:https://github.com/litlefirefly/TestAgent
基于Python的TestAgent实现的更多相关文章
- 【Machine Learning】决策树案例:基于python的商品购买能力预测系统
决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...
- 基于Python+Django的Kubernetes集群管理平台
➠更多技术干货请戳:听云博客 时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调 ...
- 关于《selenium2自动测试实战--基于Python语言》
关于本书的类型: 首先在我看来技术书分为两类,一类是“思想”,一类是“操作手册”. 对于思想类的书,一般作者有很多年经验积累,这类书需要细读与品位.高手读了会深有体会,豁然开朗.新手读了不止所云,甚至 ...
- psutil一个基于python的跨平台系统信息跟踪模块
受益于这个模块的帮助,在这里我推荐一手. https://pythonhosted.org/psutil/#processes psutil是一个基于python的跨平台系统信息监视模块.在pytho ...
- 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试
Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...
- 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台
搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...
- 《Selenium2自动化测试实战--基于Python语言》 --即将面市
发展历程: <selenium_webdriver(python)第一版> 将本博客中的这个系列整理为pdf文档,免费. <selenium_webdriver(python)第 ...
- 从Theano到Lasagne:基于Python的深度学习的框架和库
从Theano到Lasagne:基于Python的深度学习的框架和库 摘要:最近,深度神经网络以“Deep Dreams”形式在网站中如雨后春笋般出现,或是像谷歌研究原创论文中描述的那样:Incept ...
- 基于python的互联网软件测试开发(自动化测试)-全集合
基于python的互联网软件测试开发(自动化测试)-全集合 1 关键字 为了便于搜索引擎收录本文,特别将本文的关键字给强调一下: python,互联网,自动化测试,测试开发,接口测试,服务测试,a ...
随机推荐
- 源码编译安装mysql
1 概述 首先来看下mysql的下载地址: http://ftp.plusline.de/mysql/Downloads/ 这里有mysql的各种版本 操作系统:CentOS releas ...
- poj 3280 Cheapest Palindrome
链接:http://poj.org/problem?id=3280 思路:题目给出n种m个字符,每个字符都有对应的添加和删除的代价,求出构成最小回文串的代价 dp[i][j]代表区间i到区间j成为回文 ...
- MFC中CListCtrl控件的使用方法
定义一个派生类CViewList 派生于CListCtrl 在要包含该控件的类(CView)中定义一个CViewList类型的变量 CViewList m_wndListView; 在CView响应的 ...
- VR的国内研究现状及发展趋势
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 一.国内研究现状 我国虚拟现实技术研究起步较晚,与发达国家还有一定的差距. 随着计算机图形学.计算机系统 ...
- Sql Server 中锁的概念
锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏 ...
- 【转载】 删除Win10“这台电脑”中的6个文件夹
转载地址:http://www.myxzy.com/post-431.html Windows 8.1/windows 10对比windows 7都有一个变化,打开“这台电脑”(或“我的电脑”)后,“ ...
- [译]SQL Server分析服务的权限配置
简介: 本文介绍如何配置SSAS数据库和cube相关维度的安全设置. 相对数据引擎来说,在Management Studio中配置分析服务的安全设置基本没什么区别.但是也会有一些限制,比如SSAS的权 ...
- PAT A 1018. Public Bike Management (30)【最短路径】
https://www.patest.cn/contests/pat-a-practise/1018 先用Dijkstra算出最短路,然后二分答案来验证,顺便求出剩余最小,然后再从终点dfs回去求出路 ...
- SQL基础之基本操作
1.UNION操作符 union操作符用来合并两个或多个select语句的结果,要注意union内部的每个select语句必须拥有相同数量的列,而且列也必须拥有相似的数据类型和相同的列顺序.下面是我的 ...
- BestCoder Round #86
A题 Price List 巨水..........水的不敢相信. #include <cstdio> typedef long long LL; int main() { int T; ...