• HTTPrunner简单教程二


    记录学习过程,便以以后好查找
    先来明白,各个框架文件夹中对应的文件是干啥用的。
     
    1、api文件:存放接口描述文件
    格式样例:
    name: #登录接口
    base_url: ${gain_base_url()}
    request:
    url: /gk/user/login
    headers:
    Content-Type: application/json
    method: POST
    json:
    isVisitor: $isVisitor
    mobile: $mobile
    checkcode: $checkcode

    2、testcase文件:存放测试用例步骤,一个test属于一次请求,congfig接口全局定义参数
    格式样例:
     
    - config:
    name: qjp_login_user_post
    request:
    headers:
    Content-Type: application/json
    variables:
    - tk_type: 0
    - test:
    name: 登录
    request:
    url: http://qjptest.51biaoqing.com/gk/user/login
    headers:
    Content-Type: application/json
    Auth-Token: a8f68cf3-67eb-469f-bc61-4ba92152fc97
    GK-App-Key: d14269a21ac4c7af9c5a
    User-Agent-TK: ACFY9OZ-LelZlDX1eQUXq1ANkorI3ZONsERxanA
    User-Agent-Platform: android

    method: POST
    json:
    isVisitor: 0
    mobile: 18616578655
    checkcode: "8888"
    validate:
    - eq: [content.code, 200]
    setup_hooks:
    - ${encryption($request,$tk_type)}
    extract:
    - token: content.data.token


    3、testsuiutes:测试场景构建

    4、实践:
    方式1:
    直接在testcases文件中创建对应yaml文件,后hrunn命令运行

    config:
    name:xxx(必填) ---测试用例名称,测试报告中的标题
    variables: list of dict(非必须) ---定义的全局变量,作用域为整个用例,即当前yml文件
    parameter:list of dict (非必须) -----全局参数,用于实现数据化驱动,作用域为整个用例,即当前yml文件
      request:dict (非必须) -----request的公告参数,作用域为整个用例,即当前yml文,常用参数如base_url(参数后,在test中的url可以只描述path),headers
    test:
    name:xxx(必填) ----测试步骤名称,在测试报告中作为测试步骤的名称
    request:dict(必填) ----http请求详细内容(包含url,headers,method,json)
    variables:list of dict(非必填) ---测试步骤中定义的变量,作用域于当前步骤
    extract:list(非必填) ----提取当前测试步骤响应数据参数并保存到变量中如var,后续测试用例都可以听过$var形式引用
    setup_hooks:list(非必填) ----在http请求前执行hook函数,主要用于准备工作
    teardown_hooks:list(非必填)----在请求发送后执行hook函数,用户用户测试后的清理工作

    直接在文件工程根目录下cmd 命令:hrun testcasess中yml文件的绝对路径,运行完后可以在根目录下的report下查看本次运行报告

    样例:
    - config:
    name: qjp_login_user_post
    request:
    headers:
    Content-Type: application/json
    variables:
    - tk_type: 0
    - test:
    name: 登录
    request:
    url: http://qjptest.51biaoqing.com/gk/user/login
    headers:
    Content-Type: application/json
    Auth-Token: a8f68cf3-67eb-469f-bc61-4ba92152fc97
    GK-App-Key: d14269a21ac4c7af9c5a
    User-Agent-TK: ACFY9OZ-LelZlDX1eQUXq1ANkorI3ZONsERxanA
    User-Agent-Platform: android

    method: POST
    json:
    isVisitor: 0
    mobile: 18616578655
    checkcode: "8888"
    validate:
    - eq: [content.code, 200]
    setup_hooks:
    - ${encryption($request,$tk_type)}
    extract:
    - token: content.data.token

    方式2:
    先在api中定义相关接口请求相关接口参数,再在testcases中应用api引用相关接口信息,命令行中运行
    hrun testcasess中yml文件的绝对路径,运行完后可以在根目录下的report下查看本次运行报告
    api样例——————————————————
    name:接口名称
    request:
    url:xx
    headers:
    xx:xx
    Content-Type: application/json
    method:post
    json:
    xx:xx
    xx:"888"
    testcases中测试用例————————
    与方式1中格式相同,不同的是request部分换成api:对于接口yml路径,注意中api文件request
    config:
    name:xxx(必填) ---测试用例名称,测试报告中的标题
    variables: list of dict(非必须) ---定义的全局变量,作用域为整个用例,即当前yml文件
    parameter:list of dict (非必须) -----全局参数,用于实现数据化驱动,作用域为整个用例,即当前yml文件
      request:dict (非必须) -----request的公告参数,作用域为整个用例,即当前yml文,常用参数如base_url(参数后,在test中的url可以只描述path),headers
    test:
    name:xxx(必填) ----测试步骤名称,在测试报告中作为测试步骤的名称
    api:api/xxx.yml ----测试步骤对应接口信息
    variables:list of dict(非必填) ---测试步骤中定义的变量,作用域于当前步骤
    validate:list (非必填) ----用于断言,来校验接口返回值与预期是否一致
    extract:list(非必填) ----提取当前测试步骤响应数据参数并保存到变量中如var,后续测试用例都可以听过$var形式引用
    setup_hooks:list(非必填) ----在http请求前执行hook函数,主要用于准备工作
    teardown_hooks:list(非必填)----在请求发送后执行hook函数,用户用户测试后的清理工作

    方式三:
    在testcasuites中运行测试场景case

    关于参数化问题:
    1、使用csv文件进行参数化
    在testcases脚本同级目录下新建csv文件,存入需要的数据,引用时增加一个parameters参数,可通过P{xxx.csv}文件来读取csv文件中的数据,
    多个参数使用短横线“-”进行连接,如
    parameters:
    - goods_id: ${P(xxx.scv)}
    脚本执行时,有多个参数会按照交叉取值来运行,不是按行来运行的

    2、使用辅助函数来进行参数化
    在debugtalk.py文件中,新建一个函数可以在其他地方引用,使用${xxx()}来引用函数,如:
     
     variables: $var


    3、config文件中参数化
    requests中的base_url和headers,base_url定义后,在test中url只需要填写路径即可,headers属于整个当前yml文件公用,在test中不用再指定
    如果在测试步骤中指定headers使用指定的?
    样例:
    - config:
    name: qjp_login_user_post
    request:
    base_url: http://qjptest.51biaoqing.com
    headers:
    Content-Type: application/json
    Auth-Token: a8f68cf3-67eb-469f-bc61-4ba92152fc97
    GK-App-Key: d14269a21ac4c7af9c5a
    User-Agent-TK: ACFY9OZ-LelZlDX1eQUXq1ANkorI3ZONsERxanA
    User-Agent-Platform: android
    variables:
    - tk_type: 0
    - test:
    name: 登录
    # api: api/demo_api.yml
    request:
    url: /gk/user/login
    method: POST
    json:
    isVisitor: 0
    mobile: 18616578655
    checkcode: "8888"
    validate:
    - eq: [content.code, 200]
    setup_hooks:
    - ${encryption($request,$tk_type)}
    extract:
    - token: content.data.token

    疑问:
    1、parameter和variables参数有什么区别?
    parameter用于数据化驱动?
    variables只用户单给变量取值?

    2、对于表单参数/上传文件形式post请求,httprunner是如何处理的?
    表单参数可以使用params参数来实现
     
    3、congfig中定义的rquest请求在test中直接引用就可以了?加载方式是什么,如在config中定义了reques的headers信息,那么在test中如何让引用?
    requests中的base_url和headers,base_url定义后,在test中url只需要填写路径即可,headers属于整个当前yml文件公用,在test中不用再指定
    如果在测试步骤中指定headers使用指定的?样例如上
    4、测试步骤中的定义的参数
    在congfig或者test中定义parameter或者variables后,在测试步骤中使用
     
    4、在reques中(headers/json)的参数,究竟要不要要双引号?还是直接引用?
    直接应用就行了
    5、api的yml文件中是否要包含接口返回验证和参数值?如验证返回结果包含token?api文件中,对于参数值直接赋值和引用的意义有什么不同?
    6、在api中参数值已经直接赋值和引用的,那么在testcases文件还需要再引用一遍参数值吗?
    7、测试步骤用例的定义的变量和参数,在api中是否可以直接引用
    可以直接应用的吗,不过作用域不一样每一个是作用域是整个yml文件,一个是当前test生效

    遇到问题:
    1、httprunner.exceptions.ParamsError: base url missed!
    config中request和base_url和headers格式错误,
    request/base_url/headers 应该是同级关系,不是次级关系,这里强调的是参数值,所以不是request方式的格式
     
  • 相关阅读:
    设备上下文相关函数 冷夜
    DirectxDraw加载位图 冷夜
    MMO游戏数值框架概述(偏模拟方向) 冷夜
    C++基本数据类型列表 冷夜
    Ryzom相关的项目简介 冷夜
    使用QueryPerformanceFrequency 计算程序执行时间 冷夜
    C和C++运算符 冷夜
    编译错误记录文档 冷夜
    ANSI编码对比表 冷夜
    mscorsvw.exe是什么 冷夜
  • 原文地址:https://www.cnblogs.com/YouxiYouxi/p/12736828.html
Copyright © 2020-2023  润新知