玩转 HttpRunner 框架让接口自动化测试和压力测试,领导说要给我涨薪

发布于 更新于
本文目录
  1. 一、思考❓❔
  2. 1.有没有一种既能做接口自动化测试,又能做压测的工具呢?
  3. 2.HttpRunner是什么?
  4. 二、案例演练??
  5. 1.安装HttpRunner
  6. 2.创建项目工程
  7. 3.添加登录接口正向用例
  8. 4.对登录接口进行测试
  9. 5.对登录接口进行数据驱动&参数化测试
  10. 6.对接口进行压测
  11. 三、总结??

技术文章自动化测试

当然有啦!?

一、思考❓❔

1.有没有一种既能做接口自动化测试,又能做压测的工具呢?

image.png
  • 当然有啦!?

    • Jmeter

  • But

    • 不灵活

    • 不太简单

    • Jenkins集成有点难

    • 不能装X

  • 有没有哪种神器,可以一栏狂澜呢?

    • HttpRunner


2.HttpRunner是什么?

image.png
  • 是一个适应HTTP、HTTPS协议的强大测试框架,基于Python开发

  • 往往测试人员只需编写一份 YAML或者JSON格式的脚本,用于存放测试用例或者测试数据

  • 无需写代码(或者只写少量代码)

  • 可以非常方便、高效地实现接口自动化测试、性能测试

  • 轻轻松松实现Jenkins持续集成



二、案例演练??

image.png

1.安装HttpRunner

  • 打开CMD

  • 使用豆瓣pypi源来安装(推荐)

    • pip install -i https://pypi.douban.com/simple httprunner

  • 安装成功之后:

    • 会提供一个hrun命令

    • 查看版本信息:hrun -V


2.创建项目工程

  • 在CMD命令行中,使用 hrun --startproject 指定项目名称

    • 例如:hrun --startproject LearnHttpRunner0410

  • 会自动化创建如下目录和文件

    api目录:用于存放用例的最小单元(一般为正向用例)
    debugtalk.py文件:用于定义Python函数,进行相关处理
    reports目录:用于存放测试报告
    testcases目录:用于存放没个接口的用例(涉及测试步骤依赖)
    testsuites目录:用于存放多个测试用例(来实现数据驱动&参数化)


3.添加登录接口正向用例

  • 在api目录下创建 login_api.yml 文件

    # 指定接口名称
    name: 登录接口
    # 定义变量
    variables:
        # 变量名: 变量值
        username: "keyou1"
        password: "123456"
    # 定义base url
    base_url: "http://api.keyou.site:8000"
    # 定义请求相关的数据
    request:
        # 接口请求路径
        url: /user/login/
        # 接口请求方法
        method: POST
        # 请求头参数
        headers:
            # 请求头key: 请求头value
            Content-Type: "application/json"
        # 定义json参数
        json:
            # 参数key: 参数value
            # 通过$变量名, 可以调用变量
            username: $username
            password: $password
    # 定义校验方式
    validate:
        # 校验类型: [实际值, 期望值]
        # 校验类型种类有很多:
        # eq: 校验是否实际值与期望值是否一致
        # lt: 校验实际值小于期望值
        # le: 校验实际值小于等于期望值
        # gt: 校验实际值大于期望值
        # ge: 校验实际值大于等于期望值
        # ne: 校验实际值不等于期望值
        # 等等
        - eq: ["status_code", 200]
    
  • 在 Terminal 下运行如下命令:

    # hrun 用例文件路径(相对路径或绝对路径)日志等级(不设置也行)
    hrun api/login_api.yml --log-level debug


4.对登录接口进行测试

在 testcases 目录下创建 login_testcase.yml 文件

# 定义全局配置
config:
    # 指定全局配置名称
    name: "登录接口测试"

# 定义当前接口的测试步骤(接口依赖)
teststeps:
-
    # 指定接口名称
    name: "登录接口"
    # 引用登录接口正向用例(最小单元)
    api: api/login_api.yml
    # 定义变量
    # 会将api中定义的变量合并覆盖(不同则合并,相同则覆盖)
    variables:
        username: "keyou1"
        password: "123456"
        status_code: 200
        msg: "user_id"
    validate:
        - eq: ["status_code", $status_code]
        - contains: ["content", $msg]
  • 在 Terminal 下运行如下命令:

    # hrun 用例文件路径(相对路径或绝对路径)日志等级(不设置也行)
    hrun testcases/login_testcase.yml


5.对登录接口进行数据驱动&参数化测试

在 testsuites 中创建 testsuites/login_testsuite.yml 文件

# 定义全局配置
config:
    # 指定全局配置名称
    name: "登录套件"
    base_url: "http://api.keyou.site:8000"

# 定义添加到套件中的用例
testcases:
-
    # 指定用例名称
    name: "登录用例数据驱动测试"
    # 指定用例路径(相对路径或者绝对路径)
    testcase: testcases/login_testcase.yml
    # 指定参数化
    parameters:
        # - 参数名1-参数名2-参数名3:
        #   - [参数值1, 参数值2, 参数值3]
        - title-username-password-status_code-msg:
           - ["正常登录", "keyou1", "123456", 200, "user_id"]
           - ["用户名为空", "", "123456", 400, "username"]
           - ["密码为空", "keyou1", "", 400, "password"]
           - ["密码不正确", "keyou1", "1234567", 400, "non_field_errors"]
  • 在 Terminal 下运行如下命令:

    # hrun 用例文件路径(相对路径或绝对路径)日志等级(不设置也行)
    hrun testsuites/login_testsuite.yml


6.对接口进行压测

  • 对 api/login_api.yml 登录接口进行压测

  • 安装 locust

    pip install -i https://pypi.douban.com/simple locustio
  • 查看到 Locust 的版本号

    locusts -V
  • 执行压测

    # locusts -f yaml用例路径(相对路径或绝对路径)
    locusts -f api/login_api.yml
    image.png

    image.png

    image.png



三、总结??

image.png
  • 本文介绍了使用 HttpRunner 进行接口自动化测试和接口压测

  • yaml用例编写简单方便,并且功能强大,能大大提升工作效率

  • HttpRunner定制化强度高,可以很方便与Jenkins和测试开发平台集成

  • 本文为可优原创,如有不足,请多多指教

image.png

来源:testingpai

继续阅读