zoukankan      html  css  js  c++  java
  • httprunner

     

    官网链接:https://cn.httprunner.org/prepare/testcase-structure/

    一、安装框架介绍

    HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。

    1、安装以及依赖软件

    • 可运行平台:windows、Linux、macOS,推荐系统:Linux/macOS
    • 安装方式: pip install httprunner
    • 依赖的Python版本:Python 3.4及以上版本

     

    2、项目文件结构

    • YAML/JSON(必须):测试用例文件,一个文件对应一条测试用例
    • debugtalk.py(可选):脚本函数(存储项目中逻辑运算函数)
    • 该文件将作为项目根目录定位标记,其所在目录即被视为项目工程的根目录
    • api : 存放base接口
    • testcase:组合api中的接口,场景自动化case组装。(又先后顺序)
    • testsuite:用例集合(无序)
    • .env(可选):存储项目环境变量
    • reports(自动生成): 运行后自动生成,无需创建

     

    3、常用命令

    • hrun 核心命令
    • har2case 格式转换命令,将har格式转换成json/yaml格式

     

    二、编写运行

    1、测试用例组织

    测试用例组织中三个基础概念:测试套件、测试用例、测试步骤

    测试用例集(testsuite):对应一个文件夹,包含单个或多个测试用例(YAML/JSON)文件,应该是完整且独立的,每条测试用例应该是都可以独立运行的

    测试用例(testcase):对应一个 YAML/JSON 文件,包含单个或多个测试步骤。是测试步骤的 有序 集合,每一个测试步骤对应一个 API 的请求描述

    测试步骤(teststep):对应 YAML/JSON 文件中的一个 teststep,描述单次接口测试的全部内容,包括发起接口请求、解析响应结果、校验结果等。 无序 集合,集合中的测试用例应该都是相互独立,不存在先后依赖关系的;如果确实存在先后依赖关系,那就需要在测试用例中完成依赖的处理

     

    ①变量引用

    接口用例中,取值时可以通过自定义,也可以引用其他已定义好的变量或参数,格式为$var

    ②函数引用

    接口用例中,取值时除了自定义、引用其他变量外,还可以引用debugtalk.py定义的函数来获取到函数返回值,格式为${get_value()}

    ③编写用例注意事项

    (1)extract响应结果的字段有 : status_code, cookies, elapsed, headers, content, text, json, encoding, ok, reason, url。如果响应结果中有多层嵌套,可通过content.xxx.0.id格式获取id,其中content是指响应内容,xxx是响应内容中的某个字段,0表示获取xxx数组中第一个内容。

     

    (2)所有json/yaml和.env文件中格式错误都会导致执行失败。

    .env编辑时需注意:从第一行开始编辑,结尾不要有空行,采用key=value,value不需用“”括起来,否则会变成value的一部分

     

    (3)支持的检验器有eq(=)、lt(<)、le(<=)、gt(>)、ge(>=)、ne(!=)、str_eq、len_eq、len_gt、len_ge、len_lt、len_le、contains、contained_by、type_match、regex_match、startswith、endswith。

     

    • API目录下保存单个接口
    # 测试名称(必须的),String
    name: 查询实例
    # 无条件跳过测试(可选的),String,跳过测试的说明
    skip:
    # 条件为 true 时跳过测试(可选的)
    skipIf:
    # 条件为 false 时跳过测试(可选的)
    skipUnless:
    
    # 变量(可选的), List,被上级(testcases,testsuite)覆盖
    variables:
       # 设置变量,实例id
       instance_id: 'i-xxxxxx'
    # 默认域名(可选的).String
    base_url: http://test
    # 请求参数(必须的), dict, 与request中的参数相同
    request:
       method: GET
       url: /v3/instance
       params:
           # 通过 $+参数名称 的形式,应用变量
           instance_id: $instance_id
    # 提取器(可选的), dict,提取返回参数 (content是responses,body内容)
    extract:
       code: content.code
    
    # 验证(可选的), list
    validate:
       - eq: [$code , 200]
       - eq: [content.msg, "成功!"]
    
    # 前置处理(可选的),list (可以修改request内容)
    setup_hooks:
    
    # 后置处理(可选的),list
    teardown_hooks:

    注:

    • 可以通过查看源码runner.py->Runner->_run_test方法查看具体信息
    • httprunnertimeout的默认值为120

     

    api/DescribeInstances.yml

    name: 安全组查询
    base_url: ${ENV(url)} 
    variables:
        InstanceId: "i-XXXXXXX"
        InstanceName: ""
        PageNumber: ""
        PageSize: ""
    #skipIf: true
    request:
        url: ""
        verify: false
        params:
            AccessKeyId: ${ENV(ak)}
            Version: '2017-11-10'
            Action: 'DescribeInstances'
            InstanceId: "$InstanceId"
            InstanceName: "$InstanceName"
            PageNumber: "$PageNumber"
            PageSize: "$PageSize"
        method: GET
        headers:
            host: ${ENV(host)}
    setup_hooks:
        -  ${setup_request($request)}
    validate:
        -  eq: ["status_code", 200]
    exteact:
        - content

     

    2、testcase中的优先级

    • base_url
    • testcase test > testcase config > testsuite test > testsuite config > api
    • variables
    • testcase config > testcase test > testcase_def config > testcase_def test > api
    • verify
    • testcase teststep (api) > testcase config > testsuite config

     

     

    3、testsuites

    参数化数据驱动

    Httprunner2.0中支持testsuits中进行参数化和数据驱动,假如测试用例中定义了多个参数,那么测试用例在运行时会对参数进行笛卡尔积组合,覆盖所有参数组合情况。

    1、参数情况分2种

    (1)独立参数

    (2)具有关联性的多个参数

    2、指定数据源方式分3种

    (1)在 YAML/JSON 中直接指定参数列表

     

    (2)通过内置的P函数引用 CSV 文件

    (3)调用 debugtalk.py 中自定义的函数生成参数列表

     

     

    注:

    # 使用默认的 report_template.html
    hrun testcases/instance.yaml
    # 使用自定义的模板,可以指定相对路径或绝对路径
    hrun testcases/instance.yaml --report-template=templates/ens_test.html
    # 控制台打印日志类型为debug(输出详细的请求),默认为INFO
    hrun testcases/instance.yaml --log-level=debug
    # 将login.yaml对应的logs输出:x.loaded.json, x.parsed.json, x.summary.json
    hrun testcases/instance.yaml --save-tests

    三、httprunner附录


    hrun 命令行相关命令行参数
    参数名称
     
    参数值
     
    参数说明
     
    -h, --help
     
    不带参数
     
    查看帮助信息
     
    -V, --version
     
    不带参数
     
    查看版本号
     
    --no-html-report
     
    不带参数
     
    不生成测试报告
     
    --html-report-name
     
    HTML_REPORT_NAM
     
    重命名html报告名称
     
    --html-report-template
     
    HTML_REPORT_TEMPLATE
     
    自定义html报告模板,参数带上html模板的信息路径
     
    --log-level
     
    LOG_LEVEL
     
    日志等级,如:debug
     
    --log-file
     
    LOG_FILE
     
    指定日志文本保存路径
     
    --dot-env-path
     
    DOT_ENV_PATH
     
    指定环境变量.env的详细路径
     
    --failfast
     
    不带参数
     
    运到失败后停止测试
     
    --startproject
     
    STARTPROJECT
     
    指定项目的根目录
     
    --validate
     
    [VALIDATE [VALIDATE ...]]
     
    校验json格式
     
    --prettify
     
    [PRETTIFY [PRETTIFY ...]]
     
    各式化json文件
     


    Validator详细
    No.
     
    Comparator
     
    Description
     
    A(check), B(expect)
     
    1
     
    eq
     
    value is equal
     
    A == B
     
    2
     
    lt
     
    less than
     
    A < B
     
    3
     
    le
     
    less than or equals
     
    A <=B
     
    4
     
    gt
     
    greater than
     
    A >B
     
    5
     
    ge
     
    greater than or equals
     
    A >=B
     
    6
     
    ne
     
    not equals
     
    A != B
     
    7
     
    str_eq
     
    string equals
     
    str(A) == str(B)
     
    8
     
    len_eq, count_eq
     
    length or count equals
     
    len(A) == B
     
    9
     
    len_gt,count_gt
     
    length greater than
     
    len(A) > B
     
    10
     
    len_ge,count_ge
     
    length greater than or equals
     
    len(A) >= B
     
    11
     
    len_lt, count_lt
     
    length less than
     
    len(A) < B
     
    12
     
    len_le, count_le
     
    length less than or equals
     
    len(A) <= B
     
    13
     
    contains
     
    contains
     
    [1,2] contains 1
     
    14
     
    contained_by
     
    contained by
     
    A in B
     
    15
     
    type_match
     
    A is instance of B
     
    isinstance(A, B)
     
    16
     
    regex_match
     
    regex matches
     
    re.match(B, A)
     
    17
     
    startswith
     
    start with
     
    A startwith(B) is True
    ('abc' startwith 'ab')
     
    18
     
    endswith
     
    ends with
     
    A endswith(B) is True
    ('abc' endswith 'bc')
     
     
    config参数
    参数
     
    是否必须
     
    格式
     
    详情
     
    name
     
    YES
     
    string
     
    测试用例的名称,在测试报告中将作为标题
     
    variables
     
    NO
     
    list of dict
     
    定义的全局变量,作用域为整个用例
     
    parameters
     
    NO
     
    list of dict
     
    全局参数,用于实现数据化驱动,作用域为整个用例
     
    request
     
    NO
     
    dict
     
    request 的公共参数,作用域为整个用例;常用参数包括 base_url 和 headers
     

    request参数
    参数  
     
    是否必须
     
    格式
     
    详情
     
    base_url
     
    NO
     
    String
     
    测试用例请求 URL 的公共 host,指定该参数后,test 中的 url 可以只描述 path 部分
     
    headers
     
    NO
     
    dict
     
    request 中 headers 的公共参数,作用域为整个用例
     

    teststeps参数详情
    参数 
     
    是否必须
     
    格式
     
    详情
     
    name
     
    YES
     
    String
     
    测试步骤的名称,在测试报告中将作为测试步骤的名称
     
    request
     
    YES
     
    dict
     
    HTTP 请求的详细内容;可用参数详见 python-requests 官方文档
     
    variables
     
    NO
     
    list of dict
     
    测试步骤中定义的变量,作用域为当前测试步骤
     
    extract
     
    NO
     
    list
     
    从当前 HTTP 请求的响应结果中提取参数,并保存到参数变量中(例如token),后续测试用例可通过$token的形式进行引用
     
    validate
     
    NO
     
    list
     
    测试用例中定义的结果校验项,作用域为当前测试用例,用于实现对当前测试用例运行结果的校验
     
    validate_script
     
    NO
     
    String
     
    列表,每个元素对应一行 Python 代码。
    例如:
    validate_script:
            - "assert status_code == 201"
            - "a = response_json.get('args').get('a')"
            - "assert a == '1'"
     
    times
     
    NO
     
    int
     
    重复执行测试用例的次数
     
    setup_hooks
     
    NO
     
    list
     
    在 HTTP 请求发送前执行 hook 函数,主要用于准备工作
     
    teardown_hooks
     
    NO
     
    list
     
    在 HTTP 请求发送后执行 hook 函数,主要用户测试后的清理工作
     
  • 相关阅读:
    P1582 倒水 (二进制)
    P2014 选课 (树形动规)
    多项式前置技能——复数
    P3694 邦邦的大合唱站队 (状压DP)
    P1754 球迷购票问题 (卡特兰数,递推)
    [SCOI2003]字符串折叠 (区间DP)
    [SDOI2008]仪仗队 (欧拉函数)
    4-字符串
    3.输出,输入,基本数据类型
    2.栈,堆,寄存器的理解
  • 原文地址:https://www.cnblogs.com/shadow-yin/p/14842928.html
Copyright © 2011-2022 走看看