https://github.com/unic/periskop
  
  
    Integration testing for ChatOps via Slack  
    https://github.com/unic/periskop
  
chatops command-line-app integration-testing slack slack-bot
        Last synced: 6 months ago 
        JSON representation
    
Integration testing for ChatOps via Slack
- Host: GitHub
 - URL: https://github.com/unic/periskop
 - Owner: unic
 - License: apache-2.0
 - Created: 2016-10-24T07:51:21.000Z (about 9 years ago)
 - Default Branch: master
 - Last Pushed: 2017-01-31T16:52:06.000Z (almost 9 years ago)
 - Last Synced: 2025-05-01T03:38:08.689Z (6 months ago)
 - Topics: chatops, command-line-app, integration-testing, slack, slack-bot
 - Language: Python
 - Homepage:
 - Size: 26.4 KB
 - Stars: 8
 - Watchers: 6
 - Forks: 2
 - Open Issues: 0
 - 
            Metadata Files:
            
- Readme: README.md
 - License: LICENSE
 
 
Awesome Lists containing this project
README
          # periskop - Slack Bot Integration Tests
periskop is an integration testing tool for slack bots. An increasing diverse set of use-cases are implemented with chat bots e.g. ChatOps, Service Desk, etc. 
With periskop we can implement and run integration tests using a simple yaml file.
Here's a quick example of the power of periskop:
```
test_name: chatops_diskspace
bot_name: mrrobot
timeout: 60
slack:
  channel: "#periskop-test"
  as_user: periskop-user
  text: "!diskspace mymachine /var"
expect:
  regex: true
  attachments:
    text: |
      .*{u'failures': 0, u'skipped': 1, u'ok': 3, u'unreachable': 0, u'changed': 1}.*
```
This test `chatops_diskspace` executes the command `!diskspace mymachine /var` in the channel `#periskop-test` as user `periskop-user` and checks for the result in an attachment. The result is a string with regular expression matching.
## Getting Started
Install periskop:
```
pip install periskop
```
Check for successfull installation.
```
periskop --help
```
Create a config file `config.yml` with the necessary information to run tests:
```
slack_token: abcd-efgh-...-...
as_user: myusername
bot_name: mybotname
channel: "#periskop"
```
Make sure that the slack token is a valid API Tester token. We need this kind of token, because bots can't talk to other bots :).
Create your first test `firsttest.yml`:
```
test_name: chatops_diskspace
bot_name: mrrobot
timeout: 60
slack:
  text: "!diskspace mymachine /var"
expect:
  regex: true
  attachments:
    text: |
      .*{u'failures': 0, u'skipped': 1, u'ok': 3, u'unreachable': 0, u'changed': 1}.*
```
List all tests:
```
periskop list
```
Run the test:
```
periskop run firsttest
```
## Test Implementation
### Slack Input
In the examples above we specified the following simple slack command:
```
slack:
  text: "!diskspace mymachine /var"
```
We can not only specify text but use the full set of arguments defined here: [Slack PostMessage API](https://api.slack.com/methods/chat.postMessage#arguments)
### Test Condition
We can test either for a full text match or for regex. The test allows for specification of the complete [message event type](https://api.slack.com/events/message). 
Instead of checking for the attachment you may as well check for the text:
```
expect:
  regex: true
  text: |
    .*ok.*
```
#### RegEx
```
test_name: chatops_diskspace
bot_name: mrrobot
timeout: 60
slack:
  channel: "#periskop"
  as_user: periskop-user
  text: "!diskspace mymachine /var"
expect:
  regex: true
  attachments:
    text: |
      .*{u'failures': 0, u'skipped': 1, u'ok': 3, u'unreachable': 0, u'changed': 1}.*
```
#### Full match
```
test_name: status command
bot_name: mrrobot
timeout: 300
slack:
  channel: "#periskop"
  as_user: periskop-user
  text: "!status mymachine"
expect:
  attachments:
    text: |
      ``` | SUCCESS => {\n    "changed": false, \n    "ping": "pong"\n}```
  text: "@mrrobot: Here is your status for `` host(s):"`
```
## Setup Development Environment
```
git clone https://github.com/unic/periskop.git
python setup.py develop
```
### PyPi
If you want to update the PyPi package, make sure you have a valid `~/.pypirc` configuration:
```
[distutils]
index-servers =
  pypi
  pypitest
[pypi]
repository=https://pypi.python.org/pypi
username=your_username
password=your_password
[pypitest]
repository=https://testpypi.python.org/pypi
username=your_username
password=your_password
```
Then execute
```
pip install pypandoc
brew install pandoc
python setup.py register -r pypi
```