zoukankan      html  css  js  c++  java
  • HttpRunner完整笔记(从搭建到应用)

    一.安装

    (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仍存在此问题!

  • 相关阅读:
    redis.conf 配置信息:读取及修改命令
    Redis 持久化
    webpack 中,module、chunk、bundle 的区别(待补充)
    对象属性的描述:writable、enumerable、configurable
    webpack 中,importloaders 配置项的含义
    vue cli 3 中,Lint on save 与 Lint and fix on commit 区别(待补充)
    使用 vue-cli-service inspect 来查看一个 Vue CLI 3 项目的 webpack 配置信息(包括:development、production)
    Eslint 能自动格式化代码,为什么还要用 Prettier?
    prettier-eslint 与 prettier-eslint-cli 区别
    032_nginx配置文件安全下载
  • 原文地址:https://www.cnblogs.com/python-kp/p/9585764.html
Copyright © 2011-2022 走看看