本文主要介绍了在 MeterSphere 中,通过调用第三方 REST API 转 CMD 服务的方式,执行远端被测机上的 Shell 命令或脚本的方法。

使用方法

  1. 关键步骤

下载 VUtil 并部署 REST API 转 CMD 的服务,即可实现在 MeterSphere 中通过调用 Shell 命令的方式执行 Robot Framework 用例。

  1. 详细步骤

Step 1:在被测机上安装 VUtil 并启动。

a. 从 GitHub 中下载 VUtil,并根据 GitHub 上的指导来安装 Node.js、npm install 等支撑库,最后用命令启动服务。

b. Node.js 官方下载地址:https://nodejs.org/en/download/

wget https://nodejs.org/dist/latest-v10.x/node-v10.24.1-linux-x64.tar.xz
tar Jxvf node-v10.24.1-linux-x64.tar.xz
cd node-v10.24.1-linux-x64
./configure
make
make install

检查安装是否 OK:

node -v
npm -v

c. 进入 VUtil 目录,执行 npm install。

d. 进入 VUtil 目录,执行"PORT=4080 node server.js"。

Step 2:在 MeterSphere 上建立自定义 POST 请求,URL 处填写为"http://x.x.x.x:4080/execute/commandform-data 格式,命令 Command 内容为 Linux",请求体中填写 Bash 命令行,比如:

su - testuser -c "echo hello"

Step 3:响应内容如下:当 Linux 命令非正常退出,返回非 0 时(echo $?),Response Code 是 400;当 Linux 命令正常退出,返回 0 时,Response Code 是 200,因此通过返回码可以判断调用命令是否执行成功。

Step 4:既然能够通过 REST API 的方式调用 Linux Bash 命令,那调用 Robot 执行用例也是可以的,在步骤 2 中填写 Robot 的调用命令行,即可实现调用 Robot 框架执行测试用例,例如:

su - testuser -c "/home/testuser/.local/bin/robot -v var1:${var1} -d /tmp/robot --test case1* /home/testuser/robotcase/

Step 5:判断 Robot 脚本是否执行成功,可通过正则匹配响应体字串:|PASS| 来达成。

优化改进

如果觉得 Robot 返回 Log 不够全面,不好定位问题的话。可以仿照 Ride 自带的 Listener 来增加 HTTP 返回响应体的详细程度。

#cat RobotListener.py
class RobotListener(object):
ROBOT_LISTENER_API_VERSION = 2
def start_suite(self, name, args):
print("Starting Suite : " + name + " " + args['source'])
def start_test(self, name, args):
print("Starting test : " + name)
if args['template']:
print("Template is : " + args['template'])

def end_test(self, name, args):
print("Ending test: " + args['longname'])
print("Test Result is : " + args['status'])
print("Test Time is : " + str(args['elapsedtime']))
def log_message(self, message):
print(message['timestamp'] + " : " + message['level'] + " : " + message['message'])

调用 Robot 时,增加参数"—listener RobotListener.py"即可,如:

su - testuser -c "/home/testuser/.local/bin/robot --listener RobotListener.py -v var1:${var1} -d /tmp/robot --test case1* /home/testuser/robotcase/

执行出错后的问题排查

■ 检查 4080 端口是否监听;

netstat -nap | grep -w 4080

■ 检查防火墙是否放行端口;

临时添加:

iptables -I INPUT -p tcp --dport 40880 -j ACCEPT

■ 检查 URL 是否填对。

正确的 URL:

http://x.x.x.x:4080/execute/command

————————————————
版权声明:本文为 CSDN 博主「三只猴」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:

https://blog.csdn.net/weixin_47162063/article/details/117266039

关于 MeterSphere

MeterSphere 是 FIT2CLOUD 飞致云旗下品牌。作为一款一站式的开源持续测试平台( github.com/metersphere ),MeterSphere 涵盖测试跟踪、接口测试、性能测试、 团队协作等功能,全面兼容 JMeter、Postman、Swagger 等开源标准,有效助力开发和测试团队充分利用云的弹性进行高度可扩展的自动化测试,加速高质量的软件交付。

自 2020 年 6 月发布至今,MeterSphere 开源项目得到了开源社区的广泛认可和积极反馈,并已经在众多企业内落地使用。截至 2021 年 5 月,MeterSphere 项目在代码托管平台 GitHub 上获得了超过 4,600 个 Star 和 40,000 次以上的独立下载。


↙↙↙阅读原文可查看相关链接,并与作者交流