全新的命令行自动化测试框架/运用于云原生/中间件/云计算/混沌测试等场景

CmdLinker

CmdLinker将为您提供简单、可操作的命令对象的调用方式,通过链式调用去使用各种命令,获取请求/响应,不在局限于将简单的命令字符串交给各种ssh工具包,修改执行命令时,不在需要进行各种繁琐的字符串的替换之类的操作或直接重新编写命令

仓库地址

复制代码
https://github.com/chineseluo/cmdlinker

适用系统/中间件

  • 所有可在linux/windows下运行的命令
  • 自研云原生中间件的可执行命令
  • 开源组件的命令,docker/redis/mysql/tidb/...

常规使用场景

  • 云原生中间件cli命令的回归
  • 混沌测试
  • 运维部署脚本
  • python版的shell脚本
  • ...

设计思想

  • 将yaml文件编译成可执行的命令对象:cmd_obj
  • 提供链式调用的方式给操作者,set/get
  • 告别繁琐的操作命令字符串的方式,使命令更具有逻辑性
  • 拥抱开源

主要特点

  • 通过指定mode模式(SSH,SHELL),将命令对象yaml文件转换为对应模式下的py模块
  • 提供了命令对象set/get方法,去设置/获取对应命令的参数
  • 提供了内置的checker,可检查命令对象是否符合规范
  • 提供了内置的runner方法,去获取本地/远程命令执行的请求/响应
  • 简化了SSH/SHELL命令的执行操作操作,通过实例化命令对象,调用runner即可获取请求响应

其他

cmdlinker内置了两种模式,SSH/SHELL,用于生成不同场景下的命令对象

  • SSH模式,主要用于执行远程链接的命令,举例:你需要链接到某台服务器,执行命令A,获取A命令的返回结果,可在yaml中配置SSH模式
  • SHELL模式,主要用于本地执行的命令,不需要链接服务器端口,不需要权限认证相关的账号密码,举例:在linux环境执行ls -l,只需要指定SHELL模式即可

使用方法

简单例子:使用linux的free -b -t 举例

yaml 复制代码
entry: "free" # 主命令
mode: "SSH"
parameters:
  - mapping_name: "b" # 映射命令
    original_cmd: "-b" # 映射命令
    value: False # 是否需要值
    mutex: False # 是否互斥
    default: None # 命令默认值
  - mapping_name: "t" # 映射命令
    original_cmd: "-t" # 原命令
    value: False # 命令是否需要值
    mutex: False # 命令之间是否互斥
    default: None # 命令默认值

生成的python对象见example模块下的free.py/Free.yaml文件,会生成两个命令类,入口entry类为Free,子命令类B,子命令T

cmdlinker提供了两种设置命令的方式,运行于不同的场景

  • 保持模式HOLD
  • 传递模式TRANSMIT

保持模式HOLD

复制代码
free = Free(host="192.168.1.5", name="root", pwd="123456", port="22")
free.hset_b().hset_t().runner()

HOLD模式进行hset操作,会返回Free对象本身,可以继续操作Free下的子命令对象

传递模式TRANSMIT

复制代码
free = Free(host="192.168.1.5", name="root", pwd="123456", port="22")
free.tset_b().pre.tset_t().runner()

free = Free(host="192.168.1.5", name="root", pwd="123456", port="22")
free.tset_b().root.tset_t().runner()

TRANSMIT模式进行tset操作,会进入子命令对象本身,Free().tset_t()此时会返回T对象,可以通过pre定位到他的父级命令,或者通过root定位到根命令Free下进行操作


cmdlinker提供了查询设置的命令参数的方法

复制代码
free = Free(host="192.168.1.5", name="root", pwd="123456", port="22")
free.tset_b().pre.tset_t().runner()
# 查询
b = free.b() #返回B命令对象
b.value # 返回b对象的值

cmdlinker提供了查询运行命令的方法

复制代码
free = Free(host="192.168.1.5", name="root", pwd="123456", port="22")
free.tset_b().pre.tset_t().runner()
free.exec_cmd()

exec_cmd()返回执行命令的字符串

cmdlinker提供了查询运行命令对象的方法

复制代码
free = Free(host="192.168.1.5", name="root", pwd="123456", port="22")
free.tset_b().pre.tset_t().runner()
free.collector()

collector()返回一个命令对象列表

cmdlinker提供了运行命令对象的方法

复制代码
free = Free(host="192.168.1.5", name="root", pwd="123456", port="22")
free.tset_b().pre.tset_t().runner()

通过runner()可以执行命令对象的方法,必须从主命令开始,也就是entry命令实例化命令对象,传递子参数,然后调用runner()

OpenSourceTest cmdlinker 社区

欢迎小伙伴加群,讨论cmdlinker相关问题,或提出优化建议!

QQ群(自动化测试-夜行者):816489363

相关推荐
阿里云云原生9 小时前
深入内核:拆解 OpenTelemetry eBPF 探针如何优雅地“透视”多语言微服务?
云原生
java_cj13 小时前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
tiancaijiben15 小时前
阿里云Kubernetes集群托管完全指南:从创建到生产级运维
云计算
互联网推荐官19 小时前
上海软件定制开发公司推荐:从PaaS工程化路径看D-coding的技术取舍
云原生·云计算·paas·软件开发·开发经验·上海
sbjdhjd19 小时前
从零搭建企业级 CI/CD(下):Jenkins+GitLab+Harbor 全链路实战指南
git·servlet·ci/cd·云原生·云计算·gitlab·jenkins
阿昌喜欢吃黄桃19 小时前
RocketMq事务消息原理
java·中间件·消息队列·rocketmq·mq
tiancaijiben19 小时前
阿里云应用实时监控服务ARMS完全接入指南:从探针部署到全链路可观测
云计算
java_cj1 天前
深入kubectl create源码:从YAML到Pod的完整链路拆解
运维·云原生·容器·kubernetes
xingyuzhisuan1 天前
算力租赁平台 GPU 资源隔离方案:显存抢占问题深度排查与解决
大数据·云计算·gpu算力
步步为营DotNet1 天前
基于.NET Aspire 实现云原生应用的高效监控与可观测性
云原生·.net·wpf