自动化测试中的Slack机器人-高级篇

简介: 背景介绍在自动化测试中的Slack机器人-基础篇一文中,我们介绍了如何在Slack上注册一个聊天机器人,并且让它负责Jenkins的运维工作。接下来,我们来详细介绍如何打造自己的自动化机器人。

背景介绍

自动化测试中的Slack机器人-基础篇一文中,我们介绍了如何在Slack上注册一个聊天机器人,并且让它负责Jenkins的运维工作。接下来,我们来详细介绍如何打造自己的自动化机器人。

开发准备

API简介

img_d2ed46e6b3da1f0fe09e0da784141890.png
Slack API

Slack提供了多种语言的API客户端,方便用户使用API来与Slack进行交互。具体请参考Slack Bot API页面介绍。
这里,我们使用第三方的Slack API的封装库Botkit, Botkit实现了对API级别更高级的封装,屏蔽了底层的交互细节,使大家更专注于业务逻辑实现。非常方便,简单易使用。

安装botkit库

由于botkit是nodejs开发的,所以我们首先需要准备nodejs环境。

npm install --save botkit

原型开发

使我们的Bot处于在线状态

将token中填入自己创建的Bot的API Token序列串。

var Botkit = require('botkit');
var controller = Botkit.slackbot();
var bot = controller.spawn({
  token: your_slack_bot_token
})
bot.startRTM(function(err,bot,payload) {
  if (err) {
    throw new Error('Could not connect to Slack');
  }
});

开始处于处于离线状态的autobot.

img_ade9d8e3eb753b672f629551c7763081.png
Bot Offline

将上面的代码保存为bot.js, 然后执行

node bot.js

就可以在Slack中看到我们开发的autobot机器人处于在线状态了,如下图所示;不过由于代码中,我们没做业务逻辑处理,所以我们的机器人还不会做任何事情。

img_0ee8d05f2bbd7df14cd08677600b4217.png
Bot Online

使用一些基本的Bot命令

这里,我们使用botkit提供的bot.hears()命令,来监听聊天中的关键字信息,并进行回复。

基于如下模板编写代码

controller.hears(["keyword","^pattern$"],["direct_message","direct_mention","mention","ambient"],function(bot,message) {
  // do something to respond to message
  // all of the fields available in a normal Slack message object are available
  // https://api.slack.com/events/message
  bot.reply(message,'You used a keyword!');
});

我们监听消息open the (.*) doors, 然后回复该消息,如果是pod bay则回复Sorry信息,否则回复Okay.

controller.hears('open the (.*) doors',  ['message_received'],function(bot,message)
 { 
    var doorType = message.match[1]; //match[1] is the (.*) group. match[0] is the entire group (open the (.*) doors).
     if (doorType === 'pod bay')
     {
        return bot.reply(message, 'I\'m sorry, Dave. I\'m afraid I can\'t do     that.'); 
    }  
    return bot.reply(message, 'Okay');
});

Botkit的其他API介绍和使用样例,点击这里查看,我们在本章中就不过多介绍了。下面我们重点介绍如何使Bot机器人与我们的jenkins系统进行交互。

当前,我们的jenkins地址为 http://localhost:8080

添加自定义jenkins build 相关命令

controller.hears(['jenkins build job (.*)'], 'direct_message,direct_mention,mention', function(bot, message) {
  var matches = message.text.match(/build job (.*)/i);
  var job_name = matches[1];
  console.log(job_name)
  var job_url = encodeURI('http://localhost:8080/job/'+job_name+'/build')
  request.post({url: job_url}, function (error, response, body) {
        if (!error && response.statusCode == 201) {
          console.log(body)
          var str = 'I have notify jenkins server to run this command. ^_^'
          bot.reply(message, str)
        } else {
          bot.reply(message, 'error, maybe the job *'+job_name+'* not found. I am sorry for that. >_<!!')
        }
    })
})

我们主要是用到了nodejs的request库来调用Jenkins 提供的RESTful API实现与Jenkins交互的。如果提示错误信息,请确保jenkins的访问策略配置,我们的用例是没有带Jenkins API Token访问的。

img_dd16428b004e5f0dc886b518c796dce9.png
nodejs requests

添加自定义jenkins robot 相关命令

例如,获取robot framework项目的执行结果情况。


img_210eca06be21ae8d39c9bb5b4deaefb6.png
bot jenkins commands

功能代码实现如下:

controller.hears(['jenkins get job-robot-result (.*)'], 'direct_message,direct_mention,mention', function(bot, message) {
  var matches = message.text.match(/get job-robot-result (.*)/i);
  var job_name = matches[1];
  console.log(job_name)
  var job_url = encodeURI('http://localhost:8080/job/'+job_name+'/lastBuild/robot/api/json?pretty=true')
  request({url: job_url}, function (error, response, body) {
    //   console.log(response)
      if (!error && response.statusCode == 200) {
        var json = JSON.parse(body)
        var critical_failed = json['criticalFailed']
        var critical_total = json['criticalTotal']
        var pass_percentage = json['passPercentage']

        var reply_with_attachments = {
            "attachments": [
                {
                    "fallback": "Required plain-text summary of the attachment.",
                    "color": "#36a64f",
                    "pretext": "result from jenkins server.",
                    "title": "The last build robot result of " + job_name,
                    "title_link": job_url,
                },
                {
                    "fields": [
                        {
                            "title": "Failed Cases",
                            "value": critical_failed,
                            "short": true
                        },
                        {
                            "title": "Total Cases",
                            "value": critical_total,
                            "short": true
                        },
                        {
                            "title": "Pass Percentage",
                            "value": pass_percentage + '%',
                            "short": true
                        }
                    ]
                }
            ]

        }
        console.log(JSON.stringify(reply_with_attachments))
        bot.reply(message, reply_with_attachments)

      }
      else {
          bot.reply(message, 'something error, maybe the job name is not correct. please make sure.')
      }
     })
})

还可以添加其他一些命令,这里就不再介绍了。

img_73be7fb8f820bd664834d34818a776ca.png
Get Job Build Info
img_c3304f4d876a09f674d19acdffbd5d1a.png
All Commands

总结

好了,至此,我们也介绍完了如何打造自己的Slack聊天运维机器人了,至于如何使自己的机器人更智能,还需要自己慢慢完善,我这里仅仅是给出一个样例,方便大家入门。

目录
相关文章
|
1月前
|
传感器 编解码 机器人
Sony BRC-300P 三个1/4英寸7型高级CCD传感器一体式标清机器人紧凑型摄像机
Sony BRC-300P 三个1/4英寸7型高级CCD传感器一体式标清机器人紧凑型摄像机
|
3月前
|
机器人
在钉钉中,自动化小助手是一种机器人
在钉钉中,自动化小助手是一种机器人【1月更文挑战第20天】【1月更文挑战第100篇】
79 3
|
9月前
|
运维 前端开发 数据可视化
你所不知道的新技术,机器人全自动化开发并上线
一个新“技术”产品的发布,它可谓是软件行业里的神级作品,可以实现自动化编写程序与运维,它的能力不止能负责一个端(大家都知道现代的开发分组,都是分为前端、后端、测试、运维等)的工作,它可是“全栈工程师”,一个“人”可以搞定一个团队的工作,包括“后端开发、前端开发、测试、运维”。那它到底是谁?怎么这么厉害
122 0
|
11月前
|
机器学习/深度学习 人工智能 机器人
一项人工智能、化学和分子机器人的交叉研究,加速创新和药物发现,并简化复杂的化学过程自动化
一项人工智能、化学和分子机器人的交叉研究,加速创新和药物发现,并简化复杂的化学过程自动化
|
机器人 区块链 Windows
国王小组:开发数字货币交易所搭建声波高级机器人如何运行
秒合约交易所系统开发实现技术分析及代码部署 秒合约交易所开发详细丨秒合约交易所系统开发详细及规则丨秒合约交易所系统源码部署 数字货币交易所开发源码丨数字货币交易所系统开发(详细及逻辑) 交易所开发正式版丨区块链交易所系统开发实现技术功能及源码 交易所开发案例丨交易所系统开发(详细及流程)丨交易所成熟及源码系统 交易所开发(稳定版)丨交易所系统开发(方案及逻辑)丨 交易所系统源码功能 什么是去中心化交易所系统开发丨浅谈uniswap丨justswap 交易所源码(整体架构演示) 交易所搭建,交易所源码是怎么开发的? 区块链交易所怎么搭建?
国王小组:开发数字货币交易所搭建声波高级机器人如何运行
|
人工智能 机器人
2023年的智能自动化和机器人流程自动化发展趋势展望
根据调研机构的记录,全球在2022年前8个月至少达成17起并购交易,2021年至少达成了5起重大并购交易。这种并购活动已经不可逆转地改变了RPA供应商的格局,使一个多样化的、初创企业丰富的市场成熟为一个由5个“大型供应商”主导的市场。
142 0
2023年的智能自动化和机器人流程自动化发展趋势展望
|
Kubernetes 机器人 API
详谈:量化合约对冲交易机器人软件开发功能详情支持测试
详谈:量化合约对冲交易机器人软件开发功能详情支持测试,可定制,源代码交付
|
人工智能 IDE 机器人
数字机器人及超级自动化产品和方案提供商朗思科技加入龙蜥社区
欢迎朗思科技加入龙蜥社区。未来,为社区贡献技术力量,并携手社区伙伴共同促进社区建设以及行业生态持续发展。
数字机器人及超级自动化产品和方案提供商朗思科技加入龙蜥社区
|
安全 机器人 数据挖掘
虚拟数字机器人仿真测试验证平台(最大支持12个机器人关节)
虚拟数字机器人仿真测试验证平台(C6657+FPGA架构)
虚拟数字机器人仿真测试验证平台(最大支持12个机器人关节)
|
IDE 机器人 Java
Java隐藏技-自动化机器人
Java隐藏技-自动化机器人
171 0
Java隐藏技-自动化机器人

热门文章

最新文章