远程交互的自动化处理

背景
nginx

在平常的测试工做中,常常会遇到和远程的服务器进行交互的状况,例如,小编此次就遇到了须要处理远程k8s上的日志文件的状况。若是每次都须要打开k8s的界面,在命令行里面执行,操做就会变得很是的繁琐,也不太方便,因而就来探索一个比较方便的途径,可以自动化的获取文件到本地,来方便的在本地自动化处理。docker


准备工做
编程

1.  提取思路ruby

因为k8s是docker化的部署方式,因此须要使用docker命令来进行日志文件的导出,主要用到的docker命令以下:服务器

docker ps  //列出正在运行的容器docker images //列出镜像docker cp ${Name}:/container_path local_path //从容器目录拷贝文件到本地目录


2. 命令发送方式
微信

看到这里,你们应该发现,不管是从定位镜像,仍是拷贝文件,都是分步来执行的,这样一步步的去操做,这样离咱们的目标还比较远,因而须要一个可以按序执行的序列,expect。ssh

2.1 介绍工具

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

经过expect-send对:expect等待输出并断定特定的字符,当字符匹配,则send下一步的操做。spa

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

” 对应转义字符: \\\”[ 对应转义字符: [} 对应转义字符: }$ 对应转义字符: \\\$\ 对应转义字符: \\\` 对应转义字符: \

2.2 实现

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

set timeout 3600spawn ssh root@$fromIpexpect { "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}"

而后根据本身的须要,组成相应的脚本执行。


具体实现结果

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

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


本文分享自微信公众号 - 搜狗测试(SogouQA)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索