zoukankan      html  css  js  c++  java
  • httptesting HTTP(s)接口自动化测试框架

    坐标: https://github.com/HttpTesting/pyhttp

    # HttpTesting
    
    ![PyPI](https://img.shields.io/pypi/v/HttpTesting?style=plastic)
    
    
    HttpTesting 是HTTP(S) 协议测试框架,通过YAML来编写测试用例;支持通过pip直接从PyPi安装,支持命令行运行代码,不固定结构,通过命令生成脚手架。
    
    ## 版本信息
    
    |序号|版本号|描述|
    |:---|:---|:---| 
    |1|v1.0|使用unittest框架|
    |2|v1.1|使用pytest框架|
    
    
    
    
    ## 快速开始
    
    ### python虚拟环境virtualenv使用
    
    - 安装虚拟环境: pip install virtualenv
    
    - 创建虚拟环境: virtualenv  demo_env
    
    - 命令行模式切换到虚拟环境Script目录: /../scripts/
    
    - 激活虚拟环境: activate.bat 
    
    ### HttpTesting安装
    
    
    #### pip在线安装
    
    - pip install HttpTesting==1.0.26
    
    #### 下载whl文件进行安装
    
    - pip install HttpTesting-1.0.40-py3-none-any.whl 
    
    
    #### 更新HttpTesting包
    
    已安装HttpTesting包,通过pip命令进行更新
    
    - pip list  查看HttpTesting安装包版本信息
    
    - pip install --upgrade HttpTesting
    
    - pip install --upgrade HttpTesting==1.0.26
    
    
    
    ### amt 或 AMT命令
    
    |序号|命令参数|描述|
    |:---|:---|:---|  
    |1|amt -config set|此命令用来设置config.yaml基本配置|
    |2|amt -file template.yaml|执行YAML用例,支持绝对或相对路径|
    |3|amt -dir testcase|批量执行testcase目录下的YAML用例,支持绝对路径或相对路径|
    |4|amt -startproject demo|生成脚手架demo目录,以及用例模版|
    |5|amt -har httphar.har|根据抓包工具导出的http har文件,生成测试用例YAML|
    |6|amt -convert demo.yaml|转换数据为HttpTesting测试用例|
    
    
    #### 基本配置
    
    - URL设置
    
    - 钉钉机器人设置
    
    - 测试报告设置
    
    - EMAIL邮箱设置
    
    
    #### 用例执行
    
    - YAML执行: amt -file template.yaml
    
    - YAML批量执行: amt -dir testcase
    
    
    
    ####  脚手架生成
    
    - 脚手架功能,是生成一个测试用例模版.
    
    
    
    #### HAR
    
    har命令来解析, Charles抓包工具导出的http .har请求文件, 自动生成HttpTesting用例格式.
    
    
    
    
    
    ## 用例编写
    
    
    ### 用例模型
    
    >TESTCASE{
    
    >>'case1':['description',{},{}],  #场景模式每个{}一个接口
    
    >>'case2':['description',{}],     #单接口模式
    
    >}
    
    
    ### YAML用例格式  
    
    
        TESTCASE:
            #Case1由两个请求组成的场景
            Case1:
                -
                    Desc: xxxx业务场景(登录->编辑)
                -
                    Desc: 登录接口
                    Url: /login/login
                    Method: GET
                    Headers:
                        content-type: "application/json"
                        cache-control: "no-cache"
                    Data:
                        name: "test"
                        pass: "test123"
                    OutPara: 
                        "$H_token$": result.data
                        "${content_type}$": header.content-type
                        "${name}$": Data.name 
                        "${pass}$": Data.pass
                    Assert:
                        - eq: [result.status, 'success']
                -
                    Desc: 编辑接口
                    Url: /user/edit
                    Method: GET
                    Headers:
                        content-type: "${content_type}$"   
                        cache-control: "no-cache"
                        token: "$H_token$"
                    Data:
                        name: "${name}$"
                        pass: "${pass}$"
                    OutPara: 
                        "$H_token$": result.data
                    Assert:
                        - ai: ['success', result.status]
                        - eq: ['result.status', '修改成功']
    
    
        TESTCASE:
            #同一接口,不同参数,扩充为多个CASE
            Case1:
                -
                    Desc: 登录接口-正常登录功能
                -
                    Desc: 登录接口
                    Url: /login/login
                    Method: GET
                    Headers:
                        content-type: "application/json"
                        cache-control: "no-cache"
                    Data:
                        name: "test"
                        pass: "test123"
                    OutPara: 
                        "$H_cookie$": cookie.SESSION
                    Assert:
                        - eq: [result.status, 'success']
            Case2:
                -
                    Desc: 登录接口-错误密码
                -
                    Desc: 登录接口
                    Url: /login/login
                    Method: GET
                    Headers:
                        content-type: "application/json"
                        cache-control: "no-cache"
                    Data:
                        name: "test"
                        pass: "test123"
                    OutPara:
                        "$H_cookie$": cookie.SESSION 
                    Assert:
                        - eq: [result.status, 'error']
    
    ### 参数说明
    
    - "${H_token}$": 为参数变量,可以头信息里与Data数据里进行使用
    - "%{md5('aaaa')}%": 为函数原型,具体支持函数下方表格可见.
    
    ### 自定义变量
    
    变量作用域为当前CASE.
    
    
    ### 示例(部分代码片断)
    
        TESTCASE: 
            Case1:
                - 
                    Desc: 接口详细描述
                    USER_VAR:
                        token:  xxxxxxxx
                -
                    Url: /xxxx/xxxx
                    Method: POST
                    Headers: {}
                    Data:
                    OutPara:
                    Assert: []
    
    
        
    - 以上通过USER_VAR字典对象来定义变量, key为变量名, value为变量值; 使用方法: ${token}$
    
    - 无需定义变量, USER_VAR字段在用例中,可以省略.
    
    #### OutPara字段变量使用
    
    OutPara字段用来做公共变量,供其它接口使用,默认为""; 
    
    -  示例: "${H_token}$": result.data 是请求结果,返回的嵌套级别
    -  OutPara为dict类型,可以做多个公共变量.
    
    
    #### Assert断言
    
    Assert字段默认为[].
    
    |序号|断言方法|断言描述|
    |:---|:---|:---|
    |1|eq: [a, b]|判断 a与b相等,否则fail|
    |2|nq: [a, b]|判断 a与b不相等,否则fail|
    |3|al: [a, b]|判断 a is b 相当于id(a) == id(b),否则fail|
    |4|at: [a, b]|判断 a is not b 相当于id(a) != id(b)|
    |5|ai: [a, b]|判断 a in b ,否则fail|
    |6|ani: [a, b]|判断 a in not b,否则fail|
    |7|ais: [a, b]|判断 isinstance(a, b) True|
    |8|anis: [a, b]|判断 isinstance(a, b) False|
    |9|ln: [a]|判断 a is None,否则fail|
    |10|lnn: [a]|判断 a is not none|
    |11|bt: [a]|判断 a 为True|
    |12|bf: [a]|判断 a 为False|
    
    
    #### 内置函数及扩展
    
    使用原型(带参数与不带参数)
    
    - "%{md5('aaaa')}%""%{timestamp()}%"
    
    
    
    |函数名|参数|说明|
    |:---|:---|:---|
    |md5|txt字符串|生成md5字符串示例: cbfbf4ea6d7c8032584dcf0defa10276|
    |timestamp|-|秒级时间戳示例: 1563183829|
    |uuid1|-|生成唯一id,uuid1示例:ebcd6df8a77611e99bb588b111064583|
    |datetimestr|-|生成日期时间串,示例:2019-07-16 10:50:16|
    |mstimestamp|-|毫秒级时间戳,20位|
    |sleep_time|-|线程睡眠秒级,小数0.5为500毫秒,1为1秒|
    
    - 其它后续添加
    
    
    ## 常用对象(通常做参数变量时使用)
    - res: 请求Response对象
    - result: res.json 或 res.text
    - cookie: res.cookie 响应cookie字典对象;  当做为参数时如果cookie.SESSION这样的写法代表取cookie中的SESSION对象. 如果只写cookie,会解析成"SESSION=xxxxxxx; NAME=xxxxxx"
    - headers: res.headers 响应头字典对象
    - header: header.content-type 请求头对象
    
    
    ## 用例执行
    - 1、生成脚手架
    - 2、编写脚手架中testcase下YAML模版用例
    - 3、切换到testcase目录
    - 4、amt -dir testcase 自动运行testcase下YAML用例
    - 5、自动生成测试报告Html
    
    
    ##  框架基本配置
    - 1、通过命令打开框架config.yaml
    - 2、amt -config set
    - 3、修改基本配置,并保存
    
    
    
    
    ## 代码打包与上传PyPi
    
      
    
    ### 通过setuptools工具进行框架打包,需要编写setup.py
    
    
    
    - 打包:python3 setup.py bdist_wheel
    
      
    
    - 上传PyP: twine upload dist/*
    
      

    效果图:控制台模式,和报告模式

  • 相关阅读:
    JavaScript Math
    从俄罗斯套娃开始的信封嵌套问题
    Educational Codeforces Round 80 A
    位运算的奇技淫巧(三)
    Educational Round 95 (Div. 2) A
    POJ 1985.Cow Marathon(DFS求树的直径模板题)
    Web开发初探(系统理解Web知识点)
    经典Python案例实现
    Codeforces Round #670 (Div. 2) 深夜掉分(A
    Problem B
  • 原文地址:https://www.cnblogs.com/yhleng/p/11290494.html
Copyright © 2011-2022 走看看