HTTPRunner


一、HTTPRunner项目准备

1.1 安装

在cmd中输入命令pip install httprunner==2.3.0
输入hrun -V打印出版本就是安装成功了。
在这里插入图片描述

1.2 新建项目

在想要新建项目的文件夹中打开cmd,输入hrun --startproject 项目名称即可在当前目录下创建项目。.

在这里插入图片描述

1.3 HttpRunnser 2.x工程目录结构

  • api目录

    • a.主要存放接口的最小执行单元(正向用例)
  • reports目录

    • 用于存放测试报告
  • testcases目录

    • 用于处理接口的复杂执行逻辑
    • 实现接口与接口之间的依赖
  • testsuites目录

    • 用于添加多条测试用例,批量执行
    • 处理数据驱动测试(参数化)
  • env文件

    • 用于定义全局环境变量
    • 可以在整个项目的测试脚本中调用
  • debugtalk.py文件

    • 用于处理动态参数
    • 也可以处理参数化动态数据

1.4 YAML配置文件的格式要求

  • yaml是数据格式,不是数据类型
  • yaml配置文件的后缀为.yaml或者.yml
  • yaml配置文件中使用#进行注释,不可以在yaml数据行内进行注释
  • yaml为key: value,key往往与冒号之间不加空格,value与冒号之间必须得加空格
  • yaml配置文件中,同一区域的key不能重复
  • yaml中value的数据类型,如果value中含有字母,会识别为字符串类型(false、true、on、off、null除外),可以无需添加引号
  • 可以使用成对的单引号或者双引号来指定字符串类型
  • 如果value为数字,会指定识别为int或float类型
  • yaml是一个强缩进的数据格式,同级键值对缩进必须一致,默认缩进2格
  • 如果使用- 代表为数组结构(列表)

二、登录接口测试用例设计

2.1 基础的测试用例结构

/api/login_api.yml

# 指定当前用例的名称
name: "登录接口-正向用例"

# 指定接口的请求信息
request:
    # 指定当前用例的url
    url: 'http://127.0.0.1:8000/user/login/'
    # 指定当前接口的请求方式
    method: POST
    # 指定请求头参数
    headers:
        Content-Type: "application/json"
    # 指定json请求参数
    json:
        username: 'aaron123'
        password: '123456'

# 指定断言信息
validate:
    # 方式一:
    # - 断言方式: ["实际值", 期望值]
    - eq: ["status_code", 200]
    # 方式二(不常用):
    # 完整定义
    # - {"check": "实际值", "comparator": "断言方式", "expect": 期望值}
	# - {"check": "status_code", "comparator": "le", "expect": 201}

2.2 运行测试用例

2.2.1 使用命令行运行

输入命令hrun 需要运行的用例路径(相对路径和绝对路径均可),即可运行测试用例。
在这里插入图片描述

2.2.2 使用py文件运行

from httprunner.api import HttpRunner

obj = HttpRunner(log_level="DEBUG")

obj.run(r'E:\httprunner_dev06\testsuites\login_testsuite.yml')
res = obj.summary

2.3 修改输出的日志级别

输入命令hrun 需要运行的用例路径 --log-level 指定的等级即可修改输出的日志级别。
在这里插入图片描述

2.4 参数设置

2.4.1 支持的合法的请求方式method

GET、POST、PUT、PATCH、DELETE,忽略大小写,推荐使用大写。

2.4.2 支持的请求头Content-Type

  • application/json,请求参数需要为json
  • application/x-www-form-urlencoded,请求参数需要为data

2.4.3 支持的请求参数类型

  • json,指定json请求参数
  • data,指定x-www-form-urlencoded参数
  • params,指定查询字符串参数

2.4.4 支持的断言方式

  • eqequals==is,相等断言
  • ltless_than,小于
  • leless_than_or_equals,小于等于
  • gtgreater_than,大于
  • gegreater_than_or_equals,大于等于
  • contains,包含

2.4.5 支持的断言方式实际值

  • status_code,提取响应状态码
  • cookies,提取cookies信息
  • headers,提取请求头信息
  • content textjson,提取响应数据,如果接口返回的是json数据,那么这三个获取均类似于Python中字典或者嵌套字典的列表。取值用json.key来取值
  • ok,当前的请求是否成功
  • url,提取请求url信息

三、参数化处理

3.1 base_url

我们可以把url前面公共的地方提取为base_url,简化url的写法。

# 如果有设置base_url会指定拼接一个完整的url路径
base_url: 'http://127.0.0.1:8000'

request:
#    url: 'http://127.0.0.1:8000/user/login/'
    url: '/user/login/'

3.2 设置参数

在variables中设置变量的值,调用时使用$变量名即可。

注意

  1. 定义变量之后,可以在定义变量下方的任意地方调用
  2. 一般在当前yaml配置文件中才能调用
variables:
	# 变量key: 变量的值
    uname: 'aaron123'
    passwd: '123456'
    status: 200
...
    json:
        username: $uname
        passwd: $passwd
validate:
    - eq: ["status_code", $status]

3.3 env变量

在项目根路径下的.env文件中也可以定义变量,使用key=value的方式去定义。
在.env文件中定义的变量,可以在任意yaml配置文件中调用

USERNAME=aaron123
PASSWORD=123456

在api/demo_api.yml文件中调用。使用${ENV(变量名)}调用。

    json:
        username: ${ENV(USERNAME)}
        password: ${ENV(PASSWORD)}

3.4 debugtalk函数

我们如果想要给某个变量添加动态的值,可以在项目根路径下的debugtalk.py文件中定义函数。

debugtalk.py文件中的函数可以在任意yaml配置文件中调用。

def random_generate_user_agent():
    user_agent_list = ["Mozilla/5.0 Aaron", "Mozilla/5.0 Aaron1", "Mozilla/5.0 Aaron2",
                       "Mozilla/5.0 Aaron3"]
    return random.choice(user_agent_list)

然后在需要的地方调用函数,实现动态数据。
调用方式为${方法名()}

        User-Agent: "${random_generate_user_agent()}"

此时,User-Agent的值就会随机从user_agent_list中取出。

3.5 用例依赖

如果当前有一个用例需要先登录才能正确请求,那么我们就需要在testcases/demo_testcase.yml文件中添加用例依赖关系。


# 定义全局配置信息
# a.定义teststeps中公共信息
config:
    name: "测试获取项目列表数据接口"

# 定义每个测试步骤
teststeps:
-
    name: "先登录"
    # 导入需要执行的用例的yml路径
    api: "api/login_api.yml"
    # 用于提取参数并创建变量(可多个),创建的变量可以在下方任意处调用
    extract:
    	# 把content响应体内的token值取出来,赋给变量token
        - token: content.token
-
    name: "获取项目列表数据"
    api: api/projects_api.yml

在api/projects_api.yml文件中,引用前面定义的token变量。

    headers:
        Authorization: "JWT $token"

3.6 variables优先级顺序:

testcase config variables > teststep extract > teststep variables > api variables

建议只在一个地方使用variables,不然项目混乱,不便管理。

3.7 数据驱动

如果想要批量执行用例,需要将逻辑写在testsuite文件中。

3.7.1 方式一

testsuites/login_testsuite.yml

# 定义所有用例的公共信息
config:
    name: "某某套件"

testcases:
-
    name: "测试登录接口"
    testcase: "testcases/login_testcase.yml"
    
    # 定义数据驱动测试(参数化),此处定义的参数变量优先级最高
    parameters:
        # - 参数1-参数2-参数3-...:
        - title-username-password-status_code-msg:
        	  # 这里的值与上面的参数一一对应
              - ["正常登录", "aaron123", "123456", 200, "token"]
              - ["密码错误", "aaron123", "123457", 400, "non_field_errors"]
              - ["账号错误", "aaron188", "123456", 400, "non_field_errors"]
              - ["用户名为空", "", "123456", 400, "username"]
              - ["密码为空", "aaron123", "", 400, "password"]

#        - title-username-password-status_code-msg: ${P(data/data.csv)}
        - title-username-password-status_code-msg: ${get_accounts()}

修改对应的testcase和api文件,使用$变量名对parameters中的参数一一替换,即可实现数据驱动。

3.7.2 方式二

将测试用例写在csv文件中。
第一行需要和parameters中定义的字段和顺序一致。

data/data.csv

title,username,password,status_code,msg
正常登录,aaron123,123456,200,token
密码错误,aaron123,123457,400,non_field_errors
账号错误,aaron188,123456,400,non_field_errors
用户名为空,,123456,400,username
密码为空,aaron123,,400,password

修改testsuite文件的parameters。

    parameters:
        - title-username-password-status_code-msg: ${P(data/data.csv)}

但是这种方法有一个弊端,所有csv文件中读出的数据都是字符串格式,我们一般不这样调用,可以使用程序读出csv,然后再进行参数化处理。

3.7.2 方式三

在debugtalk.py文件中定义一个返回参数列表的函数(可以从Excel中读取,也可以从csv读取,也可以从数据库读取)。
参数顺序无所谓,但是key值需要和parameters中定义的字段一致。

def get_accounts():
    accounts = [
        {"title": "正常登录", "username": "aaron123", "password": "123456",
            "status_code": 200, "msg": "token"},
        {"title": "密码错误", "username": "aaron123", "password": "123457",
            "status_code": 400, "msg": "non_field_errors"},
        {"title": "账号错误", "username": "aaron188", "password": "123456",
            "status_code": 400, "msg": "non_field_errors"},
        {"title": "用户名为空", "username": "", "password": "123456",
            "status_code": 400, "msg": "username"},
        {"title": "密码为空", "username": "aaron123", "password": "",
            "status_code": 400, "msg": "password"},
    ]
    return accounts

修改testsuite文件的parameters。

    parameters:
        - title-username-password-status_code-msg: ${get_accounts()}
  • 13
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值