一、HttpRunner
1、简介
HTTPRunner 是一款面向HTTP(S)协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。
-
中文手册:https://cn.httprunner.org/
-
框架流程:
-
核心特性:
- 继承Requests的全部特性,轻松实现HTTP(S)的各种测试需要
- 测试用例与代码分离,采用YAML/JSON 的形式描述测试场景,保障测试用例具备可维护性
- 测试用例支持分层机制,充分实现测试用例的复用
- 测试用例支持参数化和数据驱动机制
- 使用skip机制实现对测试用例的分组执行控制
- 测试请求支持完善的 hook 机制
- 支持热加载机制,在文本测试用例中轻松实现复杂的动态计算逻辑
- 基于HAR实现接口录制和用例生成功能(har2case)
- 结合Locust框架,无需额外的工作即可实现分布式性能测试
- 执行方法采用CLI调用,可与Jenkins 等持续集成工具完美结合
- 测试结果统计报告简洁清晰,附带详尽统计信息和日志记录
- 具有可扩展性,便于扩展实现Web平台化
2、安装
pip install httprunner
检查是否安装成功:
hrun -v # 终端下执行 1.4.2 har2case -v 0.1.8
3、入门测试
HttpRunner的测试用例支持两种文件格式:YAML 和 JSON。这里以YAML为例
test_httpbin.yml:
- config:作为整个测试用例集的全局配置项
- test:对应单个测试用例
- name:test的名字
- request:test中具体发送http请求的各种信息,如下:
url:请求的路径(若config中有定义base_url,则完整路径是:base_url + url)
method:请求方法
validate:完成请求后,所要进行的验证内容,所有验证内容均通过,该test才算通过,否则失败
- config: name: httpbin api test request: base_url: http://www.httpbin.org - test: name: get request request: url: /get method: GET validate: - eq: [status_code,200]
运行测试:
(imoocc)G:\Envs\imoocc\test > hrun test_httpbin.yml
运行结果:
打开测试报告查看结果:位于test/reports/1544623107.html
绿色部分可点击查看具体,查看每个test详细,可点击log查看。
二、HttpRunnerManager引入
1、简介
HttpRunnerManager 是基于HttpRunner 的接口自动化测试平台,该工具是对HttpRunner 的包装和 Web 图形化,另外还增加了一些新概念
(项目/模块)用来组织用例,如果对yaml语法格式不熟悉,以及对于httprunner命令不熟悉的可以使用该平台执行接口自动化测试。
2、核心特性
- 项目管理:新增项目、列表展示及相关操作,支持用例批量上传(标准化的 HttpRunner json 和 yaml 用例脚本)
- 模块管理:为项目新增模块,用例和配置都归属于module,module 和 project 支持同步和异步的方式
- 用例管理:分为添加config 与 test 子功能,config 定义全部变量和 request 等相关信息,request 可以为公共参数和请求头,也可定义全部变量
- 场景管理:可以动态加载可引用的用例,跨项目、跨模块,依赖用例列表支持拖拽排序和删除
- 运行方式:可单个test,单个module,单个project,也可选择多个批量运行,支持自定义测试计划,运行时可以灵活选择配置和环境
- 分布执行:单个用例和批量执行结果会直接在前端展示,模块和项目执行可选择为同步或者异步方式
- 报告查看:所有异步执行的用例均可以在线查看报告,可自主命名,为空默认时间戳保存
- 定时任务:可设置定时任务,遵循crontab 表达式,可在线开启、关闭、完毕后支持邮寄通知
- 持续集成:Jenkins 对接
3、安装&环境配置
3.1、安装
- 安装mysql数据库服务端,并设置为utf-8编码,创建相应的HttpRunnerManager数据库,启动mysql服务端
- 在GitHub中将HttpRunnerManager下载下来,解压放到任意盘。下载地址:https://github.com/HttpRunner/HttpRunnerManager
3.2、环境配置
HttpRunnerManager 支持分布式执行,模块和项目执行可选择为同步或者异步方式,因此需要安装相关依赖工具
- erlang安装:Erlang是一种通用的面向并发的编程语言,它用瑞典电信设备制造商爱立信所管辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。官网下载:http://www.erlang.org/downloads,下载后进行安装即可
- Rabbitmq:RabbitMQ是一个由Erlang 语言开发的AMQP(高级消息队列协议)的开源实现。它支持多个消息传递协议。RabbitMQ可以部署在分布式和联合配置中,以满足高规模、高可用性的需求,另外安装rabbitmq需先安装erlang。下载地址:http://www.rabbitmq.com/download.html,下载后双击rabbitmq-server的exe文件进行安装,安装完成后,以管理员身份运行RabbitMq Service -start即可
rabbitmq执行命令(以下命令均在rabbitmq的sbin目录下方可执行)
启动rabbitmq(默认安装后自启动):rabbitmq-service start
此时如果不能访问rabbitmq默认网址:http://localhost:15672 ,在sbin目录下执行下述操作,关掉rabbitmq服务器,再重启就好了:
1> rabbitmq-plugins enable rabbitmq_management
2> rabbitmqctl start_app
4、数据库配置
上述准备工作完成后,现在先处理HttpRunnerManager中的数据库相关配置,
打开HttpRManager项目,在settings.py文件中关于数据库部分,进行如下修改:
if DEBUG: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'HttpRunnerManager', # 新建数据库名 'USER': 'root', # 数据库登录名 'PASSWORD': '******', # 数据库登录密码 'HOST': '127.0.0.1', # 数据库所在服务器ip地址 'PORT': '3306', # 监听端口 默认3306即可 } } STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), # 静态文件额外目录 ) else: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'HttpRunnerManager', # 新建数据库名 'USER': 'root', # 数据库登录名 'PASSWORD': '', # 数据库登录密码 'HOST': '127.0.0.1', # 数据库所在服务器ip地址 'PORT': '3306', # 监听端口 默认3306即可 } } STATIC_ROOT = os.path.join(BASE_DIR, 'static')
5、work配置
修改work配置:
djcelery.setup_loader() CELERY_ENABLE_UTC = True CELERY_TIMEZONE = 'Asia/Shanghai' BROKER_URL = 'amqp://guest:guest@127.0.0.1:5672//' if DEBUG else 'amqp://guest:guest@127.0.0.1:15672//' 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 EMAIL_SEND_USERNAME = '1****57@163.com' # 定时任务报告发送邮箱,支持163,qq,sina,企业qq邮箱等,注意需要开通smtp服务 EMAIL_SEND_PASSWORD = '****' # 邮箱密码
三、HttpRunnerManager使用
1、准备工作
1.1、安装HttpRunnerManager 的依赖库文件
pip install -r requirement.txt
1.2、数据库迁移
python manage.py makemigrations ApiManager
python mange.py migrate
1.3、创建超级用户
python manage.py createsuperuser
1.4、 启动服务
python manage.py runserver
1.5、启动项目后,打开如下地址,可以进入不同页面
1.5.1、后台数据库管理:http://127.0.0.1:8000/admin/
51..2、注册页面:http://127.0.0.1:8000/api/register/
1.5.3、登录页面:http://127.0.0.1:8000/api/login/
注意:后台数据库管理可用超级用户登录,前端页面登录需要先注册一个账号
后台数据库管理界面:
前端操作页面:
2、HttpRunnerManager使用
2.1、创建项目
在首页点击左侧菜单栏 → 新增项目,然后输入项目相关信息。我们接下来会以httpbin里面的接口来进行测试,因此我们将项目名称命名为:httpbin 接口测试
2.2、创建模块
一个项目会一般分为多个功能模块,我们可以创建不同模块,然后基于不同模块创建测试用例。在左侧菜单选择模块管理,然后点击 新增模块,接下来输入模块信息。
这里,我们创建一个模块:HTTP_Methods
2.3、创建环境
在接口测试过程中,我们有时需要设置base_url 来提高用例编写执行效率,我们可以在系统设置中的运行环境来创建。
假如现在我们创建一个 base_url ,操作过程如下:
2.4、创建用例
这里以get请求接口为例创建用例:
http://www.httpbin.org/get
点击顶部快捷入口: 新增用例 ,然后在用例编辑窗口中切换到request来编程用例:
2.5、用例配置
2.5.1、header 设置
如果想自定义header信息,则可以在用例编辑界面点击add headers,然后配置header 信息。
2.5.2、url参数
在GET请求中,经常会有url中的参数,如增加参数:user=eric_name
运行结果:
2.5.3、body参数
在Post请求中,请求参数一般放在请求体 request body中,HttpRunner 支持formdata 和 json 两种数据格式来传递参数。
发送post请求时,type选择 data类型,添加data数据只需要点击add data按钮,输入指定数据就可以了,如下:
发送json数据:
2.5.4、获取返回结果
HttpRunnerManager提供了extract 功能来从返回结果中提取我们需要的内容,如下所示,执行某个请求后返回结果:
假如我们想提取 user值放在一个变量里面,那么可以使用extract来提取。在用例编辑界面点击extract/validate标签,然后点击 add extract 按钮,进行如下配置即可:
其中 key 的值 response_user 就死将返回值存储所使用的变量名,content.args.user 表示从返回内容中提取args属性中的user值。下一步断言设置中,我们可以验证是否获取正确。
2.5.5、断言设置
结合前面提取返回值的内容,我们设置断言验证返回的user值是否和我们预期的一样。首先,点击add validate ,然后可以进行如下设置:
上面的 $response_user 表示引用我们之前设置的获取返回值的变量,Comparator 表示匹配规则,下拉有多种匹配可选。执行用例后,在测试报告中可以看到,断言验证是通过的:
如果还想添加其他断言规则,就继续点击add validate ,如验证响应状态码为200,等等。