远程交互的自动化处理

发表于:2020-7-10 09:41

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:0.0    来源:搜狗测试

  背景
  在日常的测试工作中,经常会遇到和远程的服务器进行交互的情况,例如,小编这次就遇到了需要处理远程k8s上的日志文件的情况。如果每次都需要打开k8s的界面,在命令行里面执行,操作就会变得非常的繁琐,也不太方便,于是就来探索一个比较方便的途径,能够自动化的获取文件到本地,来方便的在本地自动化处理。
  准备工作
  1.提取思路
  由于k8s是docker化的部署方式,所以需要使用docker命令来进行日志文件的导出,主要用到的docker命令如下:
  docker ps  //列出正在运行的容器
  docker images  //列出镜像
  docker cp ${Name}:/container_path local_path //从容器目录拷贝文件到本地目录
  2. 命令发送方式
  看到这里,大家应该发现,无论是从定位镜像,还是拷贝文件,都是分步来执行的,这样一步步的去操作,这样离我们的目标还比较远,于是需要一个能够按序执行的序列,expect。
  2.1 介绍
  expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信。
  通过expect-send对:expect等待输出并判定特定的字符,当字符匹配,则send下一步的操作。
  在操作时,需要注意一些特殊的字符转义:
   ” 对应转义字符: \\\”
  [ 对应转义字符: [
  } 对应转义字符: }
  $ 对应转义字符: \\\$
  \ 对应转义字符: \\\
  ` 对应转义字符: \
  2.2 实现
  根据expect的使用方式,首先进行用户名密码的自动登录
   set timeout 3600
  spawn ssh  root@$fromIp
  expect {
  "yes/no" { send "yes\r";exp_continue }
  "password" { send "$fromPwd\r" }
  }
  然后根据每一步的输出匹配情况,来匹配执行下一步的命令
   例:
  获取镜像
  expect "#"
  send "dockerImage=\`docker ps | grep 'container-name' | awk -F' ' '{ print \\\$1  }' | head -n 1\`\r"
  拷贝文件
  expect "#"
  send "docker cp \\\${dockerImage}:${fromPath} ${localpath}"
  然后根据自己的需要,组成相应的脚本执行。
  具体实现结果
  完成了前面的准备工作之后,便可以编写自己的自动化处理脚本,方便的将远端的文件拉取到本地进行自动化处理,从而获取自己需要的信息。下面是小编的处理结果情况:
  之后便可以丢到本地随意处理了。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号