开源测试工具 Hitchhiker 接口性能测试管理平台 ubuntu docker 部署使用记

小马 · February 07, 2018 · 3028 hits

一 部署准备

项目与参考

https://testerhome.com/topics/11897
https://github.com/brookshi/Hitchhiker
http://doc.hitchhiker-api.com/cn/installation/docker.html
https://docs.docker.com/compose/gettingstarted/
https://docs.docker.com/install/linux/linux-postinstall/
http://wiki.jikexueyuan.com/project/docker-technology-and-combat/commands.html

部署环境介绍

cmd@TR:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial

本机系统一直作为工作机使用,所以您若完全照搬,可能会遇到一些组件依赖问题。遇到error您就搜索,多参考几篇方案择优排除掉即可。

以下将选取比较简单的docker-compose 方式来快速部署Hitchhiker,先尝鲜。

二 部署Hitchhiker

cmd@TR:~$ sudo apt install docker.io
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
bridge-utils containerd runc ubuntu-fan
建议安装:
debootstrap docker-doc rinse zfs-fuse | zfsutils
下列软件包将被【卸载】:
docker-engine
下列【新】软件包将被安装:
bridge-utils containerd docker.io runc ubuntu-fan
升级了 0 个软件包,新安装了 5 个软件包,要卸载 1 个软件包,有 0 个软件包未被升级。
需要下载 17.5 MB 的归档。
解压缩后将会空出 2,278 kB 的空间。
您希望继续执行吗? [Y/n] y


cmd@TR:~$ sudo apt install docker-compose
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
python-backports.ssl-match-hostname python-cached-property python-docker python-dockerpty
python-docopt python-funcsigs python-functools32 python-jsonschema python-mock python-pbr
python-texttable python-websocket python-yaml
建议安装:
python-funcsigs-doc python-mock-doc
下列【新】软件包将被安装:
docker-compose python-backports.ssl-match-hostname python-cached-property python-docker
python-dockerpty python-docopt python-funcsigs python-functools32 python-jsonschema python-mock
python-pbr python-texttable python-websocket python-yaml
升级了 0 个软件包,新安装了 14 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 610 kB 的归档。
解压缩后会消耗 2,614 kB 的额外空间。
您希望继续执行吗? [Y/n] y

由于我是win10+ubuntu16.04 双系统,当初只给ubuntu16.04一共128GB,/home 58GB /分区61 GB,用到目前 /home/cmd 当前用户空间所剩16GB 怕以后麻烦。
所以,我直接到/分区 创建的hitchhiker目录。然后,根据个人习惯更改了所属用户组和用户。

cmd@TR:/$ sudo mkdir hitchhiker
cmd@TR:/$ ls -al|grep hitchhiker
drwxr-xr-x 2 root root 4096 2 6 15:15 hitchhiker
cmd@TR:/$ sudo chown -R cmd:cmd hitchhiker
cmd@TR:/$ ls -al|grep hitchhiker
drwxr-xr-x 2 cmd cmd 4096 2 6 15:15 hitchhiker
# github上下载docker-compose.yml以及mysql.conf文件
cmd@TR:/hitchhiker$ curl -O https://raw.githubusercontent.com/brookshi/Hitchhiker/release/deploy/docker/hitchhiker_and_mysql/docker-compose.yml -O https://raw.githubusercontent.com/brookshi/Hitchhiker/release/deploy/docker/hitchhiker_and_mysql/hitchhiker-mysql.cnf
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 687 100 687 0 0 604 0 0:00:01 0:00:01 --:--:-- 604
100 142 100 142 0 0 401 0 --:--:-- --:--:-- --:--:-- 401
cmd@TR:/hitchhiker$ ls -al
总用量 16
drwxr-xr-x 2 cmd cmd 4096 2 6 15:18 .
drwxr-xr-x 25 root root 4096 2 6 15:15 ..
-rw-rw-r-- 1 cmd cmd 687 2 6 15:18 docker-compose.yml
-rw-rw-r-- 1 cmd cmd 142 2 6 15:18 hitchhiker-mysql.cnf

按需修改配置

cmd@TR:/hitchhiker$ gedit docker-compose.yml
version: '2'
services:
hitchhiker:
image: registry.cn-hangzhou.aliyuncs.com/brook/hitchhiker-cn:v0.9
container_name: hitchhiker
environment:
- HITCHHIKER_DB_HOST=hitchhiker-mysql
- HITCHHIKER_APP_HOST=http://ip:port/
# should change before deploying.
# add environment variable
ports:
- "port:port"
- "11010:11010"
links:
- hitchhiker-mysql:hitchhiker-mysql
hitchhiker-mysql:
image: mysql:5.7
container_name: hitchhiker-mysql
environment:
- MYSQL_ROOT_PASSWORD=hitchhiker888
- MYSQL_DATABASE=hitchhiker-prod
volumes:
- ./hitchhiker-mysql.cnf:/etc/mysql/conf.d/hitchhiker.cnf
- /my/hitchhiker/sqldata:/var/lib/mysql

这里看官方说明和个人部署需求按需要更改,我只简单的改了
1 image: registry.cn-hangzhou.aliyuncs.com/brook/hitchhiker-cn:v0.9
2 ip 和port ,ip 我ubuntu配置的是内网固定ip.建议你先配置好固定ip 不要采用随机ip地址。

配置环境变量介绍

我从官方提取出以下可供修改的环境变量

hitchhiker:
environment:
- HITCHHIKER_APP_HOST=http://localhost:6666/ # 修改为本机ip及端口
- HITCHHIKER_APP_LANG # 语言,目前只对邮件内容起作用
- HITCHHIKER_SYNC_ONOFF # 是否支持同步
- HITCHHIKER_SYNC_INTERVAL # 同步间隔,单位()
- HITCHHIKER_DEFAULT_HEADERS # 请求默认带的headers
- HITCHHIKER_SCRIPT_TIMEOUT # 脚本执行时间(毫秒)
- HITCHHIKER_SAFE_VM # 是否使用安全脚本
- HITCHHIKER_ENABLE_UPLOAD # 是否支持上传脚本和数据
- HITCHHIKER_APP_INVITE_DIRECTLY # 不通过邮件验证来邀请成员

- HITCHHIKER_DB_HOST # mysql host
- HITCHHIKER_DB_PORT # mysql端口
- HITCHHIKER_DB_USERNAME # mysql 用户名

- HITCHHIKER_SCHEDULE_DURATION # schedule 监测时间间隔(秒)
- HITCHHIKER_SCHEDULE_STORE_UNIT # schedule 存储的单位,支持按个数存 count 和按天存: day
- HITCHHIKER_SCHEDULE_COUNT # schedule 存储的大小
- HITCHHIKER_SCHEDULE_STORE_CONTENT # schedule record response 是否存储, all表示所有都存下来, forFail表示只存失败的, none表示都不存(这会很大影响数据库大小和性能)
- HITCHHIKER_SCHEDULE_PAGESIZE # schedule record 在浏览器端显示的一页的个数
- HITCHHIKER_SCHEDULE_MAILFORFAIL # 只在失败时发邮件

- HITCHHIKER_STRESS_COUNT # 压力测试表最大长度
- HITCHHIKER_STRESS_PORT # 压力测试的端口
- HITCHHIKER_STRESS_UPDATE_INTERVAL # 压力测试实时更新时的间隔(毫秒)

- HITCHHIKER_MAIL_CUSTOM #是否需要自定义mail,可以使用 "api" "smtp"
- HITCHHIKER_MAIL_API # custom"api"时会使用这个mail接口, Hitchhikerpost {target, subject, content}到这个接口
- HITCHHIKER_MAIL_SMTP_HOST # "smtp.qq.com"
- HITCHHIKER_MAIL_SMTP_PORT
- HITCHHIKER_MAIL_SMTP_TLS # 是否需要走tls加密
- HITCHHIKER_MAIL_SMTP_USER # smtp用户名 "***@qq.com"
- HITCHHIKER_MAIL_SMTP_PASS # smtp密码
- HITCHHIKER_MAIL_SMTP_From # 发邮件的邮箱,默认空会使用user
- HITCHHIKER_MAIL_SMTP_NICKNAME # nickname昵称
- HITCHHIKER_MAIL_SMTP_RU # 证书验证不通过时是否报错

- MYSQL_ROOT_PASSWORD=hitchhiker888 # mysql密码
- MYSQL_DATABASE=hitchhiker-prod # mysql 数据库

然后满怀欢喜开始,走你~~~~结果遇到下边错误

cmd@TR:/hitchhiker$ sudo docker-compose up -d
[sudo] cmd 的密码:
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

不要紧,遇到什么搜什么,知道原来是docker server 底层依赖服务需要先启动

cmd@TR:/hitchhiker$ service docker start

继续,截选部分日志

cmd@TR:/hitchhiker$ sudo docker-compose up -d
[sudo] cmd 的密码:
Pulling hitchhiker-mysql (mysql:5.7)...
5.7: Pulling from library/mysql
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/brook/hitchhiker-cn:v0.9
Creating hitchhiker-mysql
Creating hitchhiker

测试hitchhiker服务是否通

cmd@TR:/hitchhiker$ curl http://ip:port/
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="shortcut icon" href="./favicon.ico"><title>Hitchhiker API</title><link href="./static/css/main.b825d6e7.css" rel="stylesheet"></head><body><div id="root"></div><script type="text/javascript" src="./static/js/main.200fd664.js"></script></body></html>

然后用firefox或chrome 即可访问到http://ip:port/ 该主页了。

三 部分问题解决

以上是临下班前弄的,弄好访问到主页后即关机下班了。
第二天启动主机后,curl http://ip:port/ 不通
那应该是docker未添加系统自启动daemon服务,docker服务未正常随系统自启动并提供底层服务。

cmd@TR:/hitchhiker$ service docker start  
#这一步会两次弹窗提示你 "需要通过认证才能启动docker.socket" “需要通过认证才能启动docker.service 来执行docker相关服务

cmd@TR:~$ service docker status
docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; disabled; vendor preset: enabled)
Active: active (running) since 2018-02-07 08:27:16 CST; 2s ago
Docs: https://docs.docker.com
Main PID: 7179 (dockerd)
Tasks: 26
Memory: 68.9M
CPU: 535ms
CGroup: /system.slice/docker.service
├─7179 /usr/bin/dockerd -H fd://
└─7232 containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=

2 07 08:27:12 TR dockerd[7179]: time="2018-02-07T08:27:12.528391931+08:00" level=info msg="Loading containers
2月 07 08:27:13 TR dockerd[7179]: time="
2018-02-07T08:27:13.512621856+08:00" level=info msg="Firewalld running:
2 07 08:27:14 TR dockerd[7179]: time="2018-02-07T08:27:14.916624296+08:00" level=info msg="Default bridge (do
2月 07 08:27:15 TR dockerd[7179]: time="
2018-02-07T08:27:15.304831501+08:00" level=info msg="Loading containers
2 07 08:27:16 TR dockerd[7179]: time="2018-02-07T08:27:16.450245104+08:00" level=warning msg="failed to retri
2月 07 08:27:16 TR dockerd[7179]: time="
2018-02-07T08:27:16.581379525+08:00" level=warning msg="failed to retri
2 07 08:27:16 TR dockerd[7179]: time="2018-02-07T08:27:16.604540073+08:00" level=info msg="Daemon has complet
2月 07 08:27:16 TR dockerd[7179]: time="
2018-02-07T08:27:16.604595466+08:00" level=info msg="Docker daemon" com
2月 07 08:27:16 TR dockerd[7179]: time="
2018-02-07T08:27:16.614947535+08:00" level=info msg="API listen on /var
2 07 08:27:16 TR systemd[1]: Started Docker Application Container Engine.

然后到hitchhiker 目录 启动hitchhiker镜像服务

cmd@TR:/hitchhiker$ docker-compose start 
Starting hitchhiker-mysql ...
Starting hitchhiker ... error
ERROR: for hitchhiker-mysql ('Connection aborted.', error(13, 'Permission denied'))
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

遇到了一个错误,去搜索了下,学习了下docker部署的相关问题。


https://stackoverflow.com/questions/29101043/cant-connect-to-docker-from-docker-compose
Post-installation steps for Linux

This section contains optional procedures for configuring Linux hosts to work better with Docker.

Manage Docker as a non-root user

The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can only access it using sudo. The docker daemon always runs as the root user.

If you dont want to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.

To create the docker group and add your user:

# 1. Create the docker group.
$ sudo groupadd docker

# 2. Add your user to the docker group.
$ sudo usermod -aG docker $USER

# 3. Log out and log back in so that your group membership is re-evaluated.

# 4. Verify that you can run docker commands without sudo.
$ docker run hello-world
This command downloads a test image and runs it in a container. When the container runs, it prints an informational message and exits.



http://www.linuxidc.com/Linux/2017-06/144717.htm

6.可选配置

6.1 创建一个docker

  docker后台进程是绑定的Unixsocket而不是TCP端口。默认情况下,Unixsocket属于用户root,其它用户要使用要通过sudo命令。由于这个原因,docker daemon通常使用root用户运行。
  为了避免使用sudo当你使用docker命令的时候,创建一个Unix组名为docker并且添加用户。当docker daemon启动,它会分配Unix socket读写权限给所属的docker组。
  注意:docker组不等价于用户root,如果想要知道的更多关于安全影响,查看docker daemon attack surface
  sudo groupadd docker
  sudo usermod -aG docker $USER
  退出再重进,确保该用户有正确的权限。
  校验生效,通过运行docker命令不带sudodocker run hello-world,如果失败会有以下类似的信息:Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?确保DOCKER_HOST环境变量没有设置。如果有取消它。

参考以上按照这个执行了
sudo groupadd docker

sudo usermod -aG docker $USER
再执行docker run hello-world检查

cmd@TR:~$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly

好了,然后就可以正常开启

#然后还是要先start docker service
cmd@TR:/hitchhiker$ service docker restart

# hitchhiker下启动hitchhiker服务
cmd@TR:/hitchhiker$ docker-compose start
Starting hitchhiker-mysql ... done
Starting hitchhiker ... done

马上测试连接
cmd@TR:/hitchhiker$ curl http://ip:port/
curl: (7) Failed to connect to ip port port: 拒绝连接

#等了一会就又好了?
cmd@TR:/hitchhiker$ curl http://ip:port/
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="shortcut icon" href="./favicon.ico"><title>Hitchhiker API</title><link href="./static/css/main.b825d6e7.css" rel="stylesheet"></head><body><div id="root"></div><script type="text/javascript" src="./static/js/main.200fd664.js"></script></body></html>

常用docker-compose 命令

http://wiki.jikexueyuan.com/project/docker-technology-and-combat/commands.html


#列出所有容器
cmd@TR:~$ docker-compose ps
ERROR:
Can't find a suitable configuration file in this directory or any
parent. Are you in the right directory?
Supported filenames: docker-compose.yml, docker-compose.yaml

#需要在 /hitchhiker 目录下执行

cmd@TR:/hitchhiker$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------
hitchhiker pm2-docker index.js Up 0.0.0.0:11010->11010/tcp, 8080/tcp, 0.0.0.0:9146->9146/tcp
hitchhiker-mysql docker-entrypoint.sh mysqld Up 3306/tcp


#停止容器服务

cmd@TR:/hitchhiker$ docker-compose stop
Stopping hitchhiker ... done
Stopping hitchhiker-mysql ... done

四 添加docker服务自启动daemon服务

这套很熟,找到以前自己添加daemon服务的wiki,搞之。
添加docker 随当前登录账号自启动服务.在ubuntu系的类似发行版中(还有kali)

runlevel 显示上次的运行级别和当前的运行级别,“N”表示没有上次的运行级别

cmd@TR:~$ runlevel
N 5

rcconf 是提供当前用户runlevel的启动服务daemon配置,rcconf只会修改你当前用户运行级别的启动项

cmd@TR:~$ sudo rcconf

在ubuntu系的类似发行版中(还有kali),sysv-rc-conf提供runlevel0-6所有级别的启动服务选项配置:

cmd@TR:~$ sudo sysv-rc-conf

https://docs.docker.com/install/linux/linux-postinstall/ 这是官方的,附上大家参考
OK啦,这样就部署好啦。

五 简单使用体验

和postman的使用高度相像,我用起来问题不大。
简单迁移过来一个请求
这是 Hitchhiker

这是postman

这个 给手工业务测试人员 用会好一些 .
场景是这样的 , 边做集成或系统测试期间 ,就可以弄一些接口测试 , 这样后期发版回归微调后 , 以后再发版就可以 继续微维护了 .
手工业务测试人员 做些接口测试 对服务理解也有好处 对服务业务实现逻辑梳理也有好处.鉴于postman是付费才可用一些高级功能,Hitchhiker无疑是一个好的替代品。

六 stress test压力测试的部署

其它小节使用不难,照着官方doc帮助即可顺利执行到压力测试。这里需要详细说下。
(补充更正:目前0.9版本的,已经不用这个Hitchhiker-Node做压力端了,这个是go语言写的。作者已经内置nodejs实现的压力端了,不用配置该节了,直接界面Run now即可发压力)
1 先创建stress test

2 部署Hitchhiker-Node
去下载 https://github.com/brookshi/Hitchhiker-Node/releases 下的 linux_64.zip
解压到某目录下后,如下:

cmd@TR:~$ cd Hitchhiker-Node/

cmd@TR:~/Hitchhiker-Node$ ls -al
总用量 9860
drwxrwxr-x 2 cmd cmd 4096 2 7 17:15 .
drwxr-xr-x 100 cmd cmd 4096 2 7 17:15 ..
-rw-rw-r-- 1 cmd cmd 64 2 7 17:16 config.json
-rw-rw-r-- 1 cmd cmd 10081261 10 29 22:25 Hitchhiker-Node_linux_amd64

#Hitchhiker-Node_linux_amd64 默认权限 664 无法执行。需要 更改为 755 775
cmd@TR:~/Hitchhiker-Node$ sudo chmod 755 Hitchhiker-Node_linux_amd64
[sudo] cmd 的密码:

cmd@TR:~/Hitchhiker-Node$ ls -al
总用量 9860
drwxrwxr-x 2 cmd cmd 4096 2 7 17:15 .
drwxr-xr-x 100 cmd cmd 4096 2 7 17:15 ..
-rw-rw-r-- 1 cmd cmd 64 2 7 17:16 config.json
-rwxr-xr-x 1 cmd cmd 10081261 10 29 22:25 Hitchhiker-Node_linux_amd64

修改config.json localhost为你当初部署Hitchhiker设置的 IP

{
"Address": "ip:11010",
"Interval": 10
}

3 启动 Hitchhiker-Node

cmd@TR:~/Hitchhiker-Node$ ./Hitchhiker-Node_linux_amd64 
info: 2018/02/07 17:20:09 main.go:12: set max procs: 8
info: 2018/02/07 17:20:09 client.go:51: read config
info: 2018/02/07 17:20:09 client.go:66: connect: success
info: 2018/02/07 17:20:09 client.go:120: send request run result 0
info: 2018/02/07 17:20:09 client.go:68: status: idle

4 手动点击执行
Run now 立即执行后,Hitchhiker-Node便可接收到请求,并产生压力
结果见图

七 利用firefox写请求脚本

我的firefox版本

直接按F12,开启调试控制台(firebug已经在最新的去掉了)
切到网络监视器
操作页面。填写注册内容,提交注册请求后,抓取到该请求。点击“编辑和重发”

进入编辑和重发,分别复制请求头Headers和请求体Body内容。

分别复制到Hitchhiker 对应Request的Headers和Body

在Request下的Test下简单编写断言,从右侧直接点即可。

当然还有其他很多的方式,比如还有firefox 和chrome F12 选中请求右键的,复制为curl。hitchhiker有个直接导入curl命令的功能。

八 docker容器的维护

主要是docker的docker-compose命令 和容器内的nodejs 系里边的pm2命令。这个我也是现搜索,学习的。
如何进入hitchhiker容器 与 如何查看容器内hitchhiker 实时操作日志
话不多说,也都是现学现查,现弄明白的,直接上命令。

#先查到Name hitchhiker  下边 docker exec 要接
cmd@TR:/hitchhiker$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------
hitchhiker pm2-docker index.js Up 0.0.0.0:11010->11010/tcp, 8080/tcp, 0.0.0.0:9146->9146/tcp
hitchhiker-mysql docker-entrypoint.sh mysqld Up 3306/tcp

#进入hitchhiker容器内
cmd@TR:/hitchhiker$ docker exec -it hitchhiker bash

#默认到了该目录 看看有啥
root@ad0e1f6acb76:/usr/src/Hitchhiker/build# ls
common global_data index.js.map logs middlewares pm2.json run_engine setup.js utils
controllers index.js interfaces mail models public services setup.js.map

#找到了logs目录 进之
root@ad0e1f6acb76:/usr/src/Hitchhiker/build# cd logs

#发现个日志,老方法 tail -f 走你~~~
root@ad0e1f6acb76:/usr/src/Hitchhiker/build/logs# ls -al
total 4240
drwxr-xr-x 2 root root 4096 Feb 6 10:05 .
drwxr-xr-x 15 root root 4096 Feb 6 10:05 ..
-rw-r--r-- 1 root root 4327792 Feb 8 08:25 log_file.log

root@ad0e1f6acb76:/usr/src/Hitchhiker/build/logs# tail -f log_file.log

查看输出内容后,确认无误,应该是容器hitchhiker的服务实时操作日志。

九 docker容器内容的更新

更新 docker Hitchhiker容器内容
只需要到

cmd@TR:/hitchhiker$ ls -al
总用量 16
drwxr-xr-x 2 cmd cmd 4096 2月 6 15:46 .
drwxr-xr-x 26 root root 4096 2月 27 18:53 ..
-rw-rw-r-- 1 cmd cmd 734 2月 6 15:46 docker-compose.yml
-rw-rw-r-- 1 cmd cmd 142 2月 6 15:18 hitchhiker-mysql.cnf

修改docker-compose.yml 的版本号 v0.10 为hitchhiker最新的
hitchhiker:image: registry.cn-hangzhou.aliyuncs.com/brook/hitchhiker-cn:v0.10

再执行该句 就会自动更新容器内容
cmd@TR:/hitchhiker$ sudo docker-compose up -d

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 0 条回复 时间 点赞
simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 13 Dec 14:44
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up