背景

  • HttpRunner是一个接口自动测试的框架,利用json/yaml格式文件配置测试用例
  • HttpRunner Manager是一个基于WebUI的测试用例管理工具,是基于python的
    • erlang是一种通用的面向并发的编程语言,目的是创造一种可以应对大规模并发活动的编程语言和运行环境
    • RabbitMQ是一个由Erlang语言开发的AMQP(高级消息队列协议)的开源实现,它支持多个消息传递协议。RabbitMQ可以部署在分布式和联合配置中,以满足高规模、高可用性的需求,另外安装rabbitmq需要先安装erlang。
  • Fiddler是一个接口抓包工具,可以直接通过Fiddler抓包后导出为测试用例使用
  • mysql是免费的可搭建再linux上的数据库,主要用于承载HttpRunner Manager的仓库

资料

HttpRunner

HttpRunner Manager

Mysql

Fiddler

环境搭建

HttpRunner

windows

  1. 安装python环境

  2. 依次执行如下命令

    1
    2
    3
    4
    5
    pip install httprunner
    pip install har2case

    httprunner -V
    har2case -V
  3. 使用

    • 先用fiddler抓取需要测试的接口,而后将其导出为.har格式的文件(此处假设为devin.har)

    • 依次执行如下命令:

      1
      2
      3
      4
      生成一个json文件
      har2case devin.har
      在生成的json文件基础上生成一个yaml格式文件,此处假设为devin.yml
      har2case devin.har -2y
    • 执行生成的测试用例

      1
      hrun devin.yml

linux

安装命令同windows下安装和使用方式

HttpRunner Manager

window

  1. 下载源码,同时要确保安装好了mysql环境

    https://github.com/HttpRunner/HttpRunnerManager

  2. 下载解压后,HttpRunner Manager 中的settings.py文件的数据库信息直接更改配置就好了,尽量数据库用root,这样后期不容易出现权限问题,具体如下(红色字体的内容都是需要根据实际的信息来进行填写,确认自己要用的数据库):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    if DEBUG:
    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'qa-httpRunner', # 新建数据库名
    'USER': 'root', # 数据库登录名
    'PASSWORD': 'password', # 数据库登录密码
    'HOST': 'ip', # 数据库所在服务器ip地址
    'PORT': '3306', # 监听端口 默认3306即可
    }
    }
    STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'), # 静态文件额外目录
    )
    else:
    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'qa-httpRunner', # 新建数据库名
    'USER': 'root', # 数据库登录名
    'PASSWORD': 'password', # 数据库登录密码
    'HOST': 'ip', # 数据库所在服务器ip地址
    'PORT': '3306', # 监听端口 默认3306即可
    }
    }
  3. 同时还需要修改通知的邮箱信息, 也位于settings.py文件

    1
    2
    EMAIL_SEND_USERNAME = ''  # 定时任务报告发送邮箱,支持163,qq,sina,企业qq邮箱等,注意需要开通smtp服务
    EMAIL_SEND_PASSWORD = '' # 邮箱密码
  4. 如若安装Erlang、RabbitMQ,则还需要配置如下内容,其也位于settings.py文件中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    djcelery.setup_loader()
    CELERY_ENABLE_UTC = True
    CELERY_TIMEZONE = 'Asia/Shanghai'
    # 127.0.0.1即为rabbitmq-server所在服务器ip地址
    BROKER_URL = 'amqp://guest:guest@127.0.0.1:5672//' if DEBUG else 'amqp://guest:guest@127.0.0.1:5672//'
    CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
    CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
    CELERY_ACCEPT_CONTENT = ['application/json']
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_RESULT_SERIALIZER = 'json'

    CELERY_TASK_RESULT_EXPIRES = 7200 # celery任务执行结果的超时时间,
    CELERYD_CONCURRENCY = 1 if DEBUG else 10 # celery worker的并发数 也是命令行-c指定的数目 根据服务器配置实际更改 一般25即可
    CELERYD_MAX_TASKS_PER_CHILD = 100 # 每个worker执行了多少任务就会死掉,我建议数量可以大一些,比如200
  5. HttpRunner Manager项目下载本地之后,会发现项目根目录下有个文件叫requirements.txt,这个文件里面都是项目所需要的一些外部依赖包,如果使用PyCharm或者Idea应该直接可以自动导入安装这些包,如果自动安装失败,可以使用pip install自定安装。下面是我的requirements.txt文件的截图,需要注意的是,如果需要的一些包你已经安装了但是和文件中要求的版本不同,可以直接把requirements.txt文件中的版本改成你所装的版本

    1
    pip install -r requirements.txt
  6. 此时进入mysql创建刚刚配置的数据库名

    1
    create database qa-httpRunner character set=utf8
  7. 这个时候就可以生成数据库迁移脚本了,命令如下:python manage.py makemigrations ApiManager;

    1
    python manage.py makemigrations ApiManager
  8. 生成之后执行命令:python manage.py migrate用来生成数据库表结构

    1
    python manage.py migrate
  9. 执行python manage.py runserver 0.0.0.0:8001,后面这个端口号也是自己酌情使用,没有被占用的端口就行,启动成功会出现如下信息:

  10. 之后打开本地链接http://127.0.0.1:8001/api/login/,进行注册登录,平台就算搭建好了,可以根据这个项目进行我们的二次开发,接口自动化脚本编写之类的操作了:

  11. 然后创建后台管理平台的超级管理员权限:python manage.py createsuperuser,打开链接127.0.0.1:8001/admin/来访问HttpRunner Manager的运维管理系统

  12. 创建用户并进入后台管理页面后,会被提示百度api未授权,此时需要到【百度开放者平台】创建一个app(类型未浏览器端),申请一个key即可

    百度开放者平台:http://lbsyun.baidu.com/apiconsole/key

    img

  13. 然后修改引用位置:HttpRunnerManager/templates/index.html 第39 行中ak后面的值即可

    1
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=ZUONbpqGBsYGXNIYHicvbAbM"></script>
  14. 此时创建应用,发现页面样式丢失,这是因为有一个样式文件无法正常引入,如下所示:

    image-20200523224118722

  15. 此时修改templates文件夹下base.html文件中amazeui.min.js的引用位置为如下(也可以直接将文件下载放在本地更直接):

    修改文件: HttpRunnerManager/templates/base.html

    1
    https://cdnjs.cloudflare.com/ajax/libs/amazeui/2.7.2/css/amazeui.min.css

    image-20200523225145497

  16. 同时为了能够正常打开【任务监控】模块,也需要修改templates文件夹下base.html文件中任务监控的链接

    由于该模块使用的时【Flower】(此前已在requirements中安装),其默认使用的5555端口,在使用之前需要打开Flower服务,并开放5555端口,windows开放端口我还是不是特别了解

linux

  1. 拉HttpRunner Manager的源码

    1
    2
    wget https://github.com/httprunner/HttpRunnerManager/archive/master.zip
    unzip master.zip
  2. 其它指令参见windows环境安装

  3. 关于flower在linux上的配置(目前版本不兼容),如下:

    1
    2
    3
    flower
    sudo iptables -I INPUT -p tcp --dport 5555 -j ACCEPT
    sudo iptables-save

Mysql安装

windows

  1. 下载安装包

    https://dev.mysql.com/downloads/mysql/

  2. 下载可执行程序,直接安装即可

linux

  1. 依次执行如下命令

    1
    2
    3
    sudo apt-get install mysql-server
    sudo apt-get install mysql-client
    sudo apt-get install libmysqlclient-dev
  2. 执行完成后,登录一下看看是否可以正常登录

    1
    mysql -uroot -p
  3. 使用注意事项:

    • 创建数据库的时候有时候会产生因为编码问题导致的中文不兼容,因此推荐每次创建数据的时候都加上character set=utf8

      1
      create database HttpRunner character set=utf8
    • 提供数据库重启命令

      1
      service mysql restart

Fiddler

安装事项

  • 安装教程:下载安装包后直接安装即可
  • 使用教程:【File】文件夹的【Fiddler教程】、【Postman】使用教程
  • 安装包:已经上传至自己的网盘
  • 插件:jmeter导出插件已上传至自己网盘

配置事项

  • 将解压出来的两个插件复制到Fiddler安装路径下的【ImportExprt】文件中,然后重启Fiddler

    image-20200527044219522

  • 导出时需按如下进行选择

    image-20200527044415458

erlang

常用命令

  • **halt()**:退出erlang系统
  • erl:进入erlang系统

windows

  1. 下载传送门:http://www.erlang.org/downloads

  2. ERLANG环境变量配置,检查环境变量,若未配置则配置erl的环境变量,如下:
    新建ERLANG_HOME变量,值为

    1
    C:\Program Files\erl10.1

    在Path变量中添加

    1
    %ERLANG_HOME%\sbin

linux

  1. 下载传送门:https://www.erlang-solutions.com/resources/download.html,执行如下命令

    1
    wget https://packages.erlang-solutions.com/erlang/debian/pool/esl-erlang_23.0.1-1~ubuntu~xenial_amd64.deb
  2. 尝试安装,以检测环境依赖是否缺乏,其结果肯定是缺少很多依赖

    1
    dpkg -i esl-erlang_23.0.1-1~ubuntu~xenial_amd64.deb
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    root@ubuntu:/home/erlang# dpkg -i esl-erlang_21.0-1_ubuntu_artful_amd64.deb 
    Selecting previously unselected package esl-erlang.
    (Reading database ... 60202 files and directories currently installed.)
    Preparing to unpack esl-erlang_23.0.1-1~ubuntu~xenial_amd64.deb ...
    Unpacking esl-erlang (1:21.0) ...
    dpkg: dependency problems prevent configuration of esl-erlang:
    esl-erlang depends on libwxbase2.8-0 | libwxbase3.0-0 | libwxbase3.0-0v5; however:
    Package libwxbase2.8-0 is not installed.
    Package libwxbase3.0-0 is not installed.
    Package libwxbase3.0-0v5 is not installed.
    esl-erlang depends on libwxgtk2.8-0 | libwxgtk3.0-0 | libwxgtk3.0-0v5; however:
    Package libwxgtk2.8-0 is not installed.
    Package libwxgtk3.0-0 is not installed.
    Package libwxgtk3.0-0v5 is not installed.
    esl-erlang depends on libsctp1; however:
    Package libsctp1 is not installed.

    dpkg: error processing package esl-erlang (--install):
    dependency problems - leaving unconfigured
    Errors were encountered while processing:
    esl-erlang
  3. 解决依赖问题,安装它所描述的esl-erlang depends on libwxbase2.8-0 | libwxbase3.0-0 | libwxbase3.0-0v5中的包,此处安装最新的, 同时又会出现相关提示

    1
    apt-get install libwxbase3.0-0v5
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    root@ubuntu:/home/erlang# apt-get install libwxbase3.0-0v5
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    You might want to run 'apt-get -f install' to correct these:
    The following packages have unmet dependencies:
    esl-erlang : Depends: libwxgtk2.8-0 but it is not installable or
    libwxgtk3.0-0 but it is not installable or
    libwxgtk3.0-0v5 but it is not going to be installed
    Depends: libsctp1 but it is not going to be installed
    Recommends: erlang-mode but it is not going to be installed
    E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
  4. 此时执行如下命令进行安装,请输入y以同意

    1
    apt-get -i install
  5. 然后开始安装erlang的包

    1
    dpkg -i esl-erlang_23.0.1-1~ubuntu~xenial_amd64.deb
  6. 安装完成后,检测安装是否成功,,执行如下命令可以进入erlang系统

    1
    erl

RabbitMQ

windows

  1. 下载传送门:http://www.rabbitmq.com/download.html

  2. 将RabbitMQ安装在非默认的目录(C:\Program Files),因该目录包含有空格,可能会对RabbitMQ服务启用有影响,因此另选无空格的安装路径(如:E:\RabbitMQ)

  3. RabbitMQ环境变量配置,检查环境变量,若未配置则配置RabbitMQ的环境变量,如下:
    新建RABBITMQ_SERVER变量,值为:

    1
    E:\RabbitMQ\rabbitmq_server-3.7.9

    在Path变量中添加

    1
    %RABBITMQ_SERVER%\bin
  4. 安装完成后,右键选择【RabbitMQ Service - start】,然后以管理员身份运行,之后可通过访问 http://localhost:15672 进行测试,默认登录账户为:guest / guest

  5. (注意)以上若不能正常访问RabbitMQ界面,则需要首先启动其管理模块

    • 确保已切换到RabbitMQ安装目录的sbin目录下,再使用操作命令

      1
      2
      3
      4
      5
      6
      # 开启RabbitMQ节点
      rabbitmqctl start_app
      # 开启RabbitMQ管理模块的插件,并配置到RabbitMQ节点上
      rabbitmq-plugins enable rabbitmq_management
      # 关闭RabbitMQ节点
      rabbitmqctl stop

    • 此时,RabbitMQ管理模块的插件已经配置到RabbitMQ节点上, 再次回到浏览器中访问 http://localhost:15672 即可成功打开

linux

  1. 下载传送门:https://www.rabbitmq.com/install-debian.html#manual-installation

    ![](HttpRunner配置教程/FireShot Capture 002 - Installing on Debian and Ubuntu — RabbitMQ - www.rabbitmq.com.png)

  2. 依次执行如下命令

    1
    2
    wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.4/rabbitmq-server_3.8.4-1_all.deb
    sudo dpkg -i rabbitmq-server_3.8.4-1_all.deb
  3. 尝试安装的时候可能会出现缺少环境依赖的情况

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Selecting previously unselected package rabbitmq-server.
    (Reading database ... 118797 files and directories currently installed.)
    Preparing to unpack rabbitmq-server_3.8.4-1_all.deb ...
    Unpacking rabbitmq-server (3.8.4-1) ...
    dpkg: dependency problems prevent configuration of rabbitmq-server:
    rabbitmq-server depends on socat; however:
    Package socat is not installed.

    dpkg: error processing package rabbitmq-server (--install):
    dependency problems - leaving unconfigured
    Processing triggers for man-db (2.7.5-1) ...
    Processing triggers for systemd (229-4ubuntu21.28) ...
    Processing triggers for ureadahead (0.100.0-19.1) ...
    Errors were encountered while processing:
    rabbitmq-server
  4. 尝试安装依赖环境

    1
    sudo apt-get install socat
  5. 环境安装完成后,再次执行命令安装rabbitmq-server

    1
    sudo dpkg -i rabbitmq-server_3.8.4-1_all.deb
  6. 安装完成后,查看是否安装成功

    1
    2
    3
    4
    5
    6
    7
    8
    # 启动rabbitmq服务
    sudo service rabbitmq-server start
    # 查看服务状态
    sudo rabbitmqctl status
    # 关闭rabbitmq服务
    sudo service rabbitmq-server stop
    # 重启服务
    sudo service rabbitmq-server restart
  7. (选读)附常见的命令(其实咱们也用不到,默认的就可以了)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 启动rabbitmq服务
    sudo service rabbitmq-server start
    # 关闭rabbitmq服务
    sudo service rabbitmq-server stop
    # 重启服务
    sudo service rabbitmq-server restart
    sudo rabbitmqctl # 查看所有命令和帮助文档
    sudo rabbitmqctl stop # 停止服务
    sudo rabbitmqctl status # 查看服务状态
    sudo rabbitmqctl list_users # 查看当前所有用户
    sudo rabbitmqctl list_user_permissions guest # 查看默认guest用户的权限
    sudo rabbitmqctl delete_user guest # 删掉默认用户(由于RabbitMQ默认的账号用户名和密码都是guest。为了安全起见, 可以删掉默认用户)
    sudo rabbitmqctl add_user username password # 添加新用户
    sudo rabbitmqctl set_user_tags username administrator# 设置用户tag
    sudo rabbitmqctl set_permissions -p / username ".*" ".*" ".*" # 赋予用户默认vhost的全部操作权限
    sudo rabbitmqctl list_user_permissions username # 查看用户的权限
    rabbitmqctl set_user_tags User Tag
  8. (选读)rabbitmq-server常用端口号

    1
    2
    3
    4
    4369 -- erlang发现口
    5672 --client端通信口
    15672 -- 管理界面ui端口
    25672 -- server间内部通信口