首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >远程交互的自动化处理

远程交互的自动化处理

作者头像
用户5521279
发布2020-07-14 11:03:10
发布2020-07-14 11:03:10
42300
代码可运行
举报
文章被收录于专栏:搜狗测试搜狗测试
运行总次数:0
代码可运行

背景

在日常的测试工作中,经常会遇到和远程的服务器进行交互的情况,例如,小编这次就遇到了需要处理远程k8s上的日志文件的情况。如果每次都需要打开k8s的界面,在命令行里面执行,操作就会变得非常的繁琐,也不太方便,于是就来探索一个比较方便的途径,能够自动化的获取文件到本地,来方便的在本地自动化处理。

准备工作

1. 提取思路

由于k8s是docker化的部署方式,所以需要使用docker命令来进行日志文件的导出,主要用到的docker命令如下:

代码语言:javascript
代码运行次数:0
运行
复制
docker ps  //列出正在运行的容器
docker images  //列出镜像
docker cp ${Name}:/container_path local_path //从容器目录拷贝文件到本地目录

2. 命令发送方式

看到这里,大家应该发现,无论是从定位镜像,还是拷贝文件,都是分步来执行的,这样一步步的去操作,这样离我们的目标还比较远,于是需要一个能够按序执行的序列,expect。

2.1 介绍

expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信。

通过expect-send对:expect等待输出并判定特定的字符,当字符匹配,则send下一步的操作。

在操作时,需要注意一些特殊的字符转义:

代码语言:javascript
代码运行次数:0
运行
复制
” 对应转义字符: \\\”
[ 对应转义字符: [
} 对应转义字符: }
$ 对应转义字符: \\\$
\ 对应转义字符: \\\
` 对应转义字符: \

2.2 实现

根据expect的使用方式,首先进行用户名密码的自动登录

代码语言:javascript
代码运行次数:0
运行
复制
set timeout 3600
spawn ssh  root@$fromIp
expect {
    "yes/no" { send "yes\r";exp_continue }
    "password" { send "$fromPwd\r" }
}

然后根据每一步的输出匹配情况,来匹配执行下一步的命令

代码语言:javascript
代码运行次数:0
运行
复制
例:
获取镜像
expect "#"
send "dockerImage=\`docker ps | grep 'container-name' | awk -F' ' '{ print \\\$1  }' | head -n 1\`\r"

拷贝文件
expect "#"
send "docker cp \\\${dockerImage}:${fromPath} ${localpath}"

然后根据自己的需要,组成相应的脚本执行。

具体实现结果

完成了前面的准备工作之后,便可以编写自己的自动化处理脚本,方便的将远端的文件拉取到本地进行自动化处理,从而获取自己需要的信息。下面是小编的处理结果情况:

之后便可以丢到本地随意处理了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档