一.安装

(1)       直接python2 –m pip install HttpRunner,安装完成后,可使用hrun –V 来查看安装版本;python2 pip install -U HttpRunner可进行版本升级;

(2)       配置环境变量,生成脚本和运行脚本时需要使用har2case和hrun;

(3)       新建测试项目:cd到项目要放置的路径,执行hrun --startproject BaseAccApiTest,即可在该路径下创建新项目BaseAccApiTest;

二.录制脚本

(1)       录制脚本过程,借用charles来进行抓包,抓取具体接口后,导出为.har格式后保存到本地

(2)       Cmd进入到导出文件路径,执行har2case $name.har $name.yml/name.json

三.执行脚本

(1)       hrun $name.har

(2)       执行完成后,会在report下生成html报告,基本操作过程就这些;

四.脚本格式

(1)       此处只介绍下yml格式的脚本,如需添加多个接口,则只需继续添加test即可;

-config:
        name: report
        request:
            base_url: ''
            headers:
                'Authorization':  'Bearer eyJhbGciOiJIUzUoKQ'
                User-Agent:  'Mozilla/5.0 (Windows NT 10.0; Win64;
                    x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.12
                    Safari/537.36'
        variables: []
-   test:
        name:  '用户登录接口(login)'
        request:
            headers:
                 'Content-Type':  'application/json;charset=UTF-8'
            json:
                 'name':  'root@aoneai.com'
                 'password':  '63a9f0ea7bb98050796b649e85481845'
            method:  'POST'
            url:  'http://xxx.xxx.xxx.xxx:8001/gw/aone-rbac/rbac/auth/login'
        validate:
        -   eq:
            - status_code
            - 200
        -   eq:
            -
headers.Content-Type
            -  'application/json;charset=UTF-8'
       
-   eq:
            - content.code
            - 0

说明:

name 这个test的名字
variables 定义变量名和值, 这里定义的变量名和值只可以在当前test中引用. 引用方法跟上面一样: $变量名

request 这个test具体发送http请求的各种信息, 如下:
url 请求的路径 (若config中有定义base_url,
则完整路径是用 base_url + url )
method 请求方法 POST, GET等等
headers 请求所带的头部信息 (config中request下面的headers中的值会被隐含地加入)
data /
json / param 请求所带内容 对POST方法,
data 是指消息体是键值对表单, json 是指消息体是json串, params 是指用GET方法时带在url后的参数

extract 完成请求后, 从返回内容中抽取数据存入变量, 在后面的请求中, 可以通过引用该变量来获取该值.

validate 完成请求后, 所要进行的验证内容. 所有验证内容均通过该test才算通过,否则失败.

五.缓存参数

(1)    测试过程中经常会需要将上一接口的返回值作为当前接口的请求值,基于这种场景,Httprunner提供了缓存参数机制(extract),具体操作如下:

场景一

“获取指定定时报告”接口需要“定时报告列表”返回参数中的id来作为参数进行获取报告。

“定时报告列表”接口响应参数如下:

{

"code": 0,

"page": {

"page": 1,

"count": 17,

"size": 20

},

"data": [

{

"startTime":
"",

"email": "624@qq.com",

"cycleUnit":
"month",

"createTime":
"2018-08-09 14:58:08",

"description":
"",

"endTime": "",

"id": 7,

"jobID": 12,

"status": 0,

"scheduleType":
"plan",

"cycleSubParamDay": 9,

"uid": 1,

"cycleSubParamHour": 16,

"title": "月",

"jobGroup": 1,

"updateTime":
"2018-08-09 15:08:54",

"userName":
"root",

"dashboardId": 1

},

{

"startTime":
"",

"email": "624@qq.com",

"cycleUnit":
"week",

"createTime":
"2018-08-09 14:58:40",

"description":
"",

"endTime": "",

"id": 8,

"jobID": 13,

"status": 0,

"scheduleType":
"plan",

"cycleSubParamDay": 4,

"uid": 1,

"cycleSubParamHour": 16,

"title": "周",

"jobGroup": 1,

"updateTime":
"2018-08-09 15:09:07",

"userName":
"root",

"dashboardId": 1

},

…….

}

当需要提取上述返回结果中的id作为下个接口的请求值,则可在“定时报告列表”接口的test下添加:

extract:
    - id: content.data.0.id

然后在“获取指定定时报告”test下请求参数下直接引用;

params:
     'id':  '$id'

六.数据驱动

三种数据源:直接在yaml/json中定义、调用csv文件、调用函数。

1.    直接在yaml或json中引用

定义:

parameters:
    - page-size-title-uid:
        - ["1","11","3","1"]
        - ["0","10","2","1"]
        - ["0","12","2","1"]

引用:

request:
    method:  'GET'
    params:
         'page':  '$page'
         'size':  '$size'
         'title':  '$title'
         'uid':  '$uid'

注意:网上说parameters可分别加在config或test里,但是实际测试时,发现yaml中只能加在config中,加在test里感觉取不到值。此外,加在config中跑用例集感觉不太合适,比如有三个接口,其中一个接口参数定义了三组,那么跑脚本时,就会执行三次用例集,暂时还没测试多个接口多组变量。

2.    调用csv文件

目前测试是添加在config中,在test中加,一直报VariableNotFound,后续在研究研究。

定义

parameters:
    - page-size-title-uid: ${P(page-size-title-uid.csv)}

其中${P(page-size-title-uid.csv)}可替换为${parameterize(page-size-title-uid.csv)}

引用

params:
     'page':  '$page'
     'size':  '$size'
     'title':  '$title'
     'uid':  '$uid'

page-size-title-uid.csv)文件格式:

注意:有时读取文件出错时,可能是文件格式错误,需为utf-8;

3.    调用函数

支持热加载的插件机制debugtalk.py中自定义函数get_size(),然后在config中声名,最后在test中引用。

自定义函数

def getsize():
    return [{"size":10},{"size":15},{"size":20}]

声名:

parameters:
    - size: ${getsize()}

引用:

params:
     'page':  '0'
     'size':  '$size'

七.断言

Httprunner中,validate来进行对结果进行校验。

validate:
-   eq:
    - status_code
    - 200
-   eq:
    - headers.Content-Type
    -  'application/json;charset=UTF-8'
-   eq:
    - content.code
    - 0

如content.code来校验code是否为0;

八.问题点收集:

1. variables: [{size: 8},{size: 9}]添加到config或test中,参数只能取值size:9,之前是parameters出现过次问题,但由版本1.5.12升级到1.5.13后,parameters问题解决,但variable仍存在此问题!

HttpRunner完整笔记(从搭建到应用)的更多相关文章

  1. 虚拟机搭建Zookeeper服务器集群完整笔记

    虚拟机搭建Zookeeper服务器集群完整笔记 本笔记主要记录自己搭建Zookeeper服务器的全过程,默认已经安装部署好Centos7. 一.虚拟机下Centos无法联网解决方案 1.首先调整虚拟机 ...

  2. Hadoop学习笔记(10) ——搭建源码学习环境

    Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步 ...

  3. Hadoop学习笔记(4) ——搭建开发环境及编写Hello World

    Hadoop学习笔记(4) ——搭建开发环境及编写Hello World 整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA.在linux下开发JAVA还数eclip ...

  4. Spring学习笔记--环境搭建和初步理解IOC

    Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hiberna ...

  5. struts2学习笔记--动手搭建环境+第一个helloworld项目

    在Myeclipse中已经内置好了struts2的环境,但是为了更好的理解,这里自己从头搭建一下: 前期准备:下载struts2的完整包,下载地址:https://struts.apache.org/ ...

  6. NuGet学习笔记3——搭建属于自己的NuGet服务器

    文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重 ...

  7. NuGet学习笔记(3) 搭建属于自己的NuGet服务器

    文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重 ...

  8. angularJS学习笔记之——搭建学习环境

    学习AngularJS已经好几天了,从今天开始学习AngularJS环境搭建. 无论是Mac.Linux或Windows环境中,您均可遵循本教程学习编程. 第一步:安装Git Git是什么呢? Git ...

  9. NuGet学习笔记(3)——搭建属于自己的NuGet服务器(转)

    在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重要的一步,从零开始搭建属于自己的NuGet服务器,诚然园子里及其它很多地方已经有完全写好的Nu ...

随机推荐

  1. 零零散散的shell笔记

    ls __paddlepalm_* > __palminfo__ 名字以__paddlepalm_开头的文件名打印到后面那个info里面 https://www.runoob.com/linux ...

  2. SGI STL泛型heap算法分析

    heap性质 heap本质是用一个数组表示的完全二叉树,并且父节点总是大于(或者小于)子节点的值.在STL中用于实现优先队列(priority_queque).堆排序是排序算法中是稳定效率最高的一种. ...

  3. vsphere6.7+Horizon7.8推送桌面遇到的一些问题

    系统环境 esxi6.7+vSphere6+Horizon7.8 VC环境为windows server 2016 standard 问题描述 vc安装 链接外部数据库找不到DSN 安装view co ...

  4. JDK1.8 新特性(全)

    原文链接:https://blog.csdn.net/qq_29411737/article/details/80835658

  5. redis5.0 数据结构与命令

    1.redis 支持如下5种数据结构 数据结构 说明 简介 String 字符串 key-val Hash 哈希 filed-val 映射表 List 列表 双向链表 Set 集合 element(元 ...

  6. JavaScript引用类型简单记录

    Object Array instanceof Function 引用类型 - Object {} 等价于 new Object() 我们经常使⽤用对象来承载可选参数,⽽而⽤用 命名的形式参数来传递必 ...

  7. Spring4学习回顾之路03—XML配置Bean ,依赖注入的方式

    配置Bean的形式可以基于XML文件的方式,也可以基于注解的方式,而Bean的配置方式可以通过全类名(反射),通过工厂方式和FactoryBean. XML形式 <?xml version=&q ...

  8. 怎样设置 MySQL 远程连接

    允许用户 root 在 任何IP 上都可以远程连接 所有 mysql数据库 并具有操作数据库的 所有权限, 密码为: myPassword mysql -u root -p grant all PRI ...

  9. go之环境安装

    1)Linux安装 https://studygolang.com/dl # 在 ~ 下创建 go 文件夹,并进入 go 文件夹 mkdir ~/go && cd ~/go 下载的 g ...

  10. GitLab 部署及管理员账号初始化

    Linux系统搭建GitLab---阿里云Centos7搭建Gitlab踩坑一.简介GitLab,是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过We ...