zoukankan      html  css  js  c++  java
  • httprunner

    作者的博客:https://debugtalk.com/archives/
    v2版本用户手册:https://v2.httprunner.org/

    1.搭建虚拟环境:

    windows系统,新建一个目录,打开cmd,进入到新建的目录中,执行:python -m venv .

    或者之间在cmd执行:python -m venv test_httprunner,会在所在目录新建一个目录

    2.激活虚拟环境:

    进入Scripts目录,执行:activate

    3.在虚拟环境下载任意包

    例如:安装httprunner,执行:pip3 install httprunner

    注意:返回上一层目录再执行:pip3 install httprunner,最好不要在Scripts目录执行。

    如果已经安装过httprunner,升级即可,执行:pip3 install -U HttpRunner。

    创建项目:hrun --startproject test_httprunner(2版本的)
    httprunner startproject test_hru(3版本的)

    4.创建好项目后,在项目里创建har文件夹

    把从fiddler到处的har文件通过har2case login.har -2y命令转成yml文件
    转json格式的通过har2case login.har 即可

    5.运行

    hrun 文件所在相对路径 --log-level debug

    6.使用收获

    .env:存储项目环境变量,通常用于存储项目敏感信息
    reports:默认生成测试报告的存储文件夹
    api: 存放单独可执行的测试用例,(个人理解api下每一个yml文件就对应每一个接口)
    testcases:下的每一个yml文件都是有顺序的,(个人理解这个文件夹下每一个yml文件就是一个事务(专注完成一个流程的接口用例测试))
    testsuites:用于数据驱动testcases里的某个yml文件里所有的变量(这里专注于测试接口用例的数据编写)
    debugtalk.py(可选):存储项目中逻辑运算辅助函数
    YAML/JSON(必须):测试用例文件,存储接口测试相关信息

    7.yml文件重复执行

    name: 登录
    variables:
        mobile: 233
        password: 344
    times: 3   # 使单个yml重复执行3次
    request:
        # 使用环境变量加url路径的拼接
        url: ${ENV(URL)}/api/login
        method: POST
        data:
            mobile: $mobile
            password: $password
    validate:
        - eq: ["status_code", 200]
    

    8.token的获取与传递使用

    config:
        name: 个人资料与设置
        base_url: http://talk.url.com
    
    teststeps:
    -
        name: 登录
        api: api/login.yml
        extract:
            - token: content.data.token
    
    -
        name: 资料
        api: api/settings.yml
    
    -------------------华丽的分割线-------------------------------
    在资料接口使用时,使用${token}调用键即可
    例如:
    request:
        url: ${ENV(URL)}/api
        method: GET
        headers:
            token: "$token"
        params:
            id: 127
            family_tree_id: 10
            tag: ${get_wufu_info($data)}  #如果data获取的将上个接口返回的json所有数据,可以利用这种方式将上个接口返回数据传递给当前参数使用
            timesteamp: ${times()}
    
    

    如上所示调用api下的单独可执行的测试用例按顺序进行测试

    9.请求传值

    接口要求:
    images	是	array	图片json 结构如下
    
    {
      "content":"内容",
      "images":[
          {
              "original_path":"aaa.jpg",    //原图
              "thum_path":"bb.jpg"    //缩略图
          },
          {
              "original_path":"aaa.jpg",
              "thum_path":"bb.jpg"
          },
      ]
    }
    
    
    请求的request参数方式,前面放{}字典
    images{}: [{"original_path":"lmlRSHC3Z.png","thum_path":"blurred.png"}]
    

    10 hooks机制

    teardown_hooks
    测试接口的话,通过网络返回的是bytes类型的字节码,所以需要转换一下
    a = b'{"code":200,"data":{"id":106}"}
    res= str(a,encoding="utf-8")  #转为str类型
    id = re.search('"id":(.*?),',res) #使用正则提取id
    
    # <re.Match object; span=(20, 29), match='"id":106,'>,由于search返回的是对象格式的数据
    print(id.group(1))  #获取到想要的id
    
    

    11 返回复杂数据格式

    我需要在接口用这样的数据格式去请求
    'relationship': '{"sibling": {"ob": [{"name": "n1", "id": 0}], "os": [{"name": "n2", "id": 0}]}}'
    
    在debugtalk函数里拼成这样的格式后
    需要在返回这个数据格式时使用json.dumps(要返回的数据格式)
    
    

    12 接口校验多个返回值

    
    name: 添加成员
    variables:
        # 定义的是当前yml的全局变量,会被test cases下的yml文件替代token
        token: "123"
    request:
        url: ${ENV(URL)}/api
        method: POST
        headers:
            token: "$token"
        data:
          family_id: 76
          user_ids[]: ${add_family_member()}
          timesteamp: ${times()}
    
    
    validate:
        - eq: ["status_code",200]
        - contained_by: [content.message,["请求成功","部分好友已有两个家庭群"]]
          # 用列表将想包含在结果校验的任意字符写入
    

    13.接口之间传递数据

    有个需求是在编辑分类页面接口里使用到获取分类列表接口里的返回数据内容
    首先在testcases下的extract传递参数:可用的响应属性status_code, cookies, elapsed, headers, content, text, json, encoding, ok, reason, url.
    -
        name: 获取分类列表
        api: api/admin/get_cat_list.yml
        extract:
            - data: content.data
    
    -
        name: 编辑分类页面
        api: api/admin/edit_cat.yml
    
    我只需在编辑分类页面的api接口里
    name: 编辑分类页面
    variables:
        # 定义的是当前yml的全局变量,会被test cases下的yml文件替代token
        token: "123"
    request:
        url: ${ENV(URL)}edit_cat
        method: POST
        headers:
            token: ${admin_login()}
        data:
            data[]: ${edit_cat($data)} #在这里写上$data,就可以在debugtalk文件里调用上个接口数据做处理
            timesteamp: ${times()}
    
  • 相关阅读:
    jenkins自动化部署前端项目
    jenkins自动部署java项目
    Jenkins插件修改为国内源
    jenkins搭建以及初始化
    gitlab-ci集成sonarqube完成代码检测
    微信小程序模板消息后端代码
    解决上传图片到服务器 水印文字显示框框不显示文字的问题
    ES transport client使用
    签发的用户认证token超时刷新策略
    api权限管理系统与前后端分离实践
  • 原文地址:https://www.cnblogs.com/flhw/p/13322648.html
Copyright © 2011-2022 走看看