python Telnet 设备控制
wptr33 2025-01-01 22:57 45 浏览
- 需求:
自动化测试中,需要操作多台硬件设备(通过Telnet连接)。
- 需求分解:
- 在测试CASE中,支持连接多个Telnet.
- 记录测试log要清晰
- 能够获取到某次expect到的行之前的log(如输入ls命令, expect到命令提示符后,希望可以获取到ls产生的详细内容做二次分析)
- 能获取到expect到的行的log内容
- 解决方案
上述需求,单纯用telnetlib库,需要额外做较多的工作,才能满足。刚好最近有个测试项目有这样的需求,封装起来给需要的人提供便利和参考。测试开发人员可以把更多的精力放在CASE的业务逻辑设计上。
移步码云:
TelnetLibForTester: 基于Telnetlib库封装的库。方便测试开发工程师,快速方便的控制多台telnet设备,同时可以自动抓取测试log。节省CASE开发时间。
- 使用示例
from custom_telnet import CustomTelnet
def login(client, name, pwd):
if client.custom_expect(['login']):
client.custom_write(name + b'\n')
if client.custom_expect(['Password']):
client.custom_write(pwd + b'\n')
if client.custom_expect([':~#39;]):
return True
return False
if __name__ == '__main__':
'''
测试CASE:
client1 和 client2 连接,login
client1输入ls后,expect到指定log后,client2做操作ls
'''
client_1 = CustomTelnet('10.10.10.10', 23)
client_2 = CustomTelnet('10.10.10.11', 23)
if not login(client_1, b'user1', b'hello'):
raise Exception('client1 login fail')
if not login(client_2, b'user2', b'hello1'):
raise Exception('client2 login fail')
client_1.flush_log()
client_2.flush_log()
client_1.custom_write(b'ls\n')
if client_1.custom_expect([':~#39;]):
print(client_1.match) # client_1.match 匹配到的那一行的内容
for _ in client_1.before: # client_1.before flush_log()时刻之后,expect到的log之前的log内容,是一个String数组,每一个数组元素代表一行log
if '测试客户端安装流程图' in _:
print(_)
client_2.custom_write(b'ls\n')
client_2.custom_expect([':~#39;])
for tmp in client_2.before:
if 'anaconda3' in tmp:
print(tmp)
# print(client_2.before)
- LOG示例
2021-07-24 23:00:40,033 # Ubuntu 16.04.7 LTS
2021-07-24 23:00:40,543 # user1 login:
2021-07-24 23:00:40,624 # => user1
2021-07-24 23:00:41,051 # Password:
2021-07-24 23:00:41,066 # => hello
2021-07-24 23:00:41,084 #
2021-07-24 23:00:41,141 # Last login: Sat Jul 24 23:00:03 CST 2021 from user1-lt.com on pts/22
2021-07-24 23:00:41,221 # Welcome to Ubuntu 16.04.7 LTS (GNU/Linux 4.15.0-117-generic x86_64)
2021-07-24 23:00:41,221 #
2021-07-24 23:00:41,222 # * Documentation: https://help.ubuntu.com
2021-07-24 23:00:41,222 # * Management: https://landscape.canonical.com
2021-07-24 23:00:41,223 # * Support: https://ubuntu.com/advantage
2021-07-24 23:00:41,223 #
2021-07-24 23:00:41,224 # 294 个可升级软件包。
2021-07-24 23:00:41,224 # 232 个安全更新。
2021-07-24 23:00:41,224 #
2021-07-24 23:00:41,225 # New release '18.04.5 LTS' available.
2021-07-24 23:00:41,226 # Run 'do-release-upgrade' to upgrade to it.
2021-07-24 23:00:41,226 #
2021-07-24 23:00:41,738 # user1@user1:~$
2021-07-24 23:00:42,950 # => ls
2021-07-24 23:00:42,962 # ls
2021-07-24 23:00:42,974 # 123.zip lava2_docker
2021-07-24 23:00:42,975 # 1.txt learncode
2021-07-24 23:00:42,975 # 1.txt.1 liteide
2021-07-24 23:00:42,999 # IMG_20181112_095712.jpg 测试客户端安装流程图.dia
2021-07-24 23:00:43,000 # index.html 公共的
2021-07-24 23:00:43,000 # IOT_CASE_LOG_KEY_WORD.xlsx 模板
2021-07-24 23:00:43,003 # lava 音乐
2021-07-24 23:00:43,003 # lava2-0227 桌面
2021-07-24 23:00:43,505 # user1@user1:~$
相关推荐
- redis的八种使用场景
-
前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...
- 基于Redis的3种分布式ID生成策略
-
在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...
- 基于OpenWrt系统路由器的模式切换与网页设计
-
摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...
- 这篇文章教你看明白 nginx-ingress 控制器
-
主机nginx一般nginx做主机反向代理(网关)有以下配置...
- 如何用redis实现注册中心
-
一句话总结使用Redis实现注册中心:服务注册...
- 爱可可老师24小时热门分享(2020.5.10)
-
No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...
- Apportable:拯救程序员,IOS一秒变安卓
-
摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...
- JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透
-
以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...
- 3月26日更新 快速施法自动施法可独立设置
-
2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...
- Redis 是如何提供服务的
-
在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...
- lua _G、_VERSION使用
-
到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...
- China's top diplomat to chair third China-Pacific Island countries foreign ministers' meeting
-
BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...
- 移动工作交流工具Lua推出Insights数据分析产品
-
Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...
- Redis 7新武器:用Redis Stack实现向量搜索的极限压测
-
当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...
- Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求
-
重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)