4.0 HttpRunner测试框架使用(python)

HttpRunner

1. 引入

接口测试有哪些方法?

1) 依靠工具:
postman, Jmeter,SoupUi
2) 使用代码创建接口请求
  • 语言: Java Python
  • 用例数据存储在哪里? – Excel
  • 使用框架:unnittest框架+ 结合ddt数据驱动
  • 日志器、配置文件、PyMysql、requests
  • 参数化: 结合正则
  • 接口依赖: 动态创建类属性的方式来处理
  • 测试报告
  • Jekins实现持续继承
  • HttpRunner, 将上述所有优秀的框架进行了完美的封装,几乎可以0代码,高效率进行自动化测试
    json/yaml格式的形式来表现

2. 安装

pip install httprunner

3. 创建项目(cmd创建)

hrun --startproject http_learn / httprunnnrt startproject http_learn
创建的项目目录:
1) api : 存放接口的地方 最小单元 — 一般是正向用例
name: 接口名称 (可以加“”)
variables: 变量 (在本yml文件调用,直接: $变量名)
var1: value1
var2: value2
request: 请求参数
url: 请求地址
method: 请求方法:GET/POST/PUT/UPDATE
headers : 请求头
Content-Type: “application/json”
json:
key: $var2
validate: 断言
-eq:[“status_code”,200] # 简写
- {check: “status_code”,comparator:“eq”,expect:200} # 最原始写法
断言类别可以在: Lib/site-packages/httprunner/builtin/comparators.py 查看
extract :
# 提取参数
- uname: content.username
2) reports: 存放报告
3) testcases: 接口依赖的工作
4) testsuites: 存放测试套件–测试用例
5) .env : 存放全局变量数据 (在yml使用变量,格式: ${ENV(变量名)}
定义时: 变量名= 值
调用变量时,格式: ${ENV(变量名)}
6) .gitignore
7) debugtalk.py
用例运行: hrun 用例路径/用例文件路径
如果想要查看更详细log信息: hrun 用例路径/用例文件路径 --log-level debug

3. 命令行操作演练

1) 基本操作

2) 常见&引用环境变量

  • 当前yaml文件variable中定义的变量的引用: $变量命
  • .env 中的变量,yml中引用需: ${ENV(变量名)}

3)调用函数、base_url,添加validate

validate 断言类别:Lib/site-packages/httprunner/builtin/comparators.py 查看
base_url 在testcase 或者testsuite yml文件中config中定义

4) testsuites中实现数据驱动

api/login_api.yml内容如下:
name: login
variables:
    username: lujier
#    yml读取会自动转型,所以如果是字符串,但里边内容全数字,加""区别
    password:  "123456"
    base_url: ${ENV(URL)}
    status_code: 200
request:
    url: $base_url/user/login/
    method: POST
    headers:
        User-Agent : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36"
         # 1.  json格式传参
        Content-Type: "application/json"
    json:
        # application/json传参,则json,如果是表单就是data,如果是文件,就是file
        username: $username
        password: $password
validate:
     # 可用的响应属性 ok url status_code reason cookies encoding headers  content_type body  json
    - eq: ["status_code", $status_code]
testcases/login_testcase.yml内容如下:
config:
    name: "登录测试"
    variables:
        title: "登录"
        status_code: 200
        contain_msg: "user"
    base_url: ${ENV(URL)}
teststeps:
-
    name: $title
    # 继承api目录下的登录接口,会与本区域定义的variables、validate合并覆盖(如本区域定义,则覆盖,负责继承)
    api: api/login_api.yml
    validate:
#        - eq: ["status_code", 200]
         - {check: "status_code",comparator: "greater_than_or_equals",expect: $status_code}
         - {check: "content",comparator: "contains",expect: $contain_msg}
用例批量運行(testsuites/login_testsuite)
第一種:多个参数具有关联性的参数需要将其定义在一起,采用短横线(-)连接
config:
    name: "登录接口测试数据驱动"
    variables:
        device_sn: "XYZ"
    base_url: ${ENV(URL)}

testcases:
-
    name: "登录接口"
    testcase: testcases/login_testcase.yml
    # 可以使用parameter下实现数据驱动
    parameters:
        # 方式一:
        # 2. 多个参数具有关联性的参数需要将其定义在一起,采用短横线(-)连接
        - title-username-password-status_code-contain_msg:
            - ["正常登录", "lujier","123456",200,"token"]
            - ["密码错误","lujier","1234567",400,"non_field_errors"]
            - ["账号错误", "LujierLujier","123456",400,"non_field_errors"]
            - ["用户名为空", "","123456",400,"username"]
            - ["密码为空", "lujier","",400,"password"]
第二種: csv管理用例數據
csv 内容如下(新建data目錄,並新建csv文件):
title,username,password,status_code,contain_msg
正常登录, lujier,123456,200,token
密码错误,lujier,1234567,400,non_field_errors
账号错误, LujierLujier,123456,400,non_field_errors
用户名为空, ,123456,400,username
密码为空, lujier,,400,password
testsuite.yml内容如下:
config:
    name: "登录接口测试数据驱动"
    variables:
        device_sn: "XYZ"
    base_url: ${ENV(URL)}

testcases:
-
    name: "登录接口"
    testcase: testcases/login_testcase.yml
    # 可以使用parameter下实现数据驱动
    parameters:
         # 方式二
        # 使用csv文件來保存測試數據,引用格式: ${P(csv文件路徑)}
         - title-username-password-status_code-contain_msg: ${P(datas/login.csv)}
第三種: 參數返回嵌套字典的列表
debugtalk.py定義函數如下:
def login():
    login_tests_data = [
        {"title":"正常登录", "username":"lujier","password":"123456",
           "status_code": 200, "contain_msg":"token"},
        {"title": "密码错误", "username": "lujier", "password": "1234567",
            "status_code": 400, "contain_msg":"non_field_errors"},
        {"title": "账号错误", "username": "lujier0001", "password": "123456",
            "status_code": 400, "contain_msg":"non_field_errors"},
        {"title": "用户名为空", "username": "", "password": "123456",
            "status_code": 400, "contain_msg":"username"},
        {"title": "密码为空", "username": "lujier", "password": "",
             "status_code": 400, "contain_msg":"password"}
    ]
    return login_tests_data
testsuite.yml内容如下:
config:
    name: "登录接口测试数据驱动"
    variables:
        device_sn: "XYZ"
    base_url: ${ENV(URL)}

testcases:
-
    name: "登录接口"
    testcase: testcases/login_testcase.yml
    # 可以使用parameter下实现数据驱动
    parameters:
       # 方式三
       # 使用函數動態生成字典
       # 函數需要返回嵌套字典的列表
        - title-username-password-status_code-contain_msg: ${login()}

5) extract实现接口依赖

6) 使用测试套件实现数据驱动,setup_hooks,teardown_hooks

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值