zoukankan      html  css  js  c++  java
  • httprunner 2.x学习12-在testcase中传递变量(output)

    前言

    httprunner 2.x 的版本,testcase 可以引用 api, 同样的 testcase 也可以引用另外一个 testcase 文件
    在2个 testcase 中传递变量可以用到 output 关键字

    testcase 导入 api

    测试用例(testcase) 是测试步骤的按顺序组织的,测试步骤也就是对应 api 里面的每个接口

    场景案例:
    A接口登录接口文档基本信息

    访问地址:http://127.0.0.1:8000/api/v1/login/
    请求类型:POST
    请求头部:application/json
    请求参数:{"username":"test", "password":"123456"}
    

    B接口查询商品信息

    访问地址:http://127.0.0.1:8000/api/v2/goods?page=1&size=2 
    请求类型:GET
    请求头部token参数: Authorization: Token xxxxx login token xxxxx
    

    于是在 api 层写 2 个 api
    login.yml

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    name: 用户账户登录
    base_url: http://127.0.0.1:8000
    variables:
        user: test1
        psw: "123456"
    request:
        url: /api/v1/login
        method: POST
        json:
            username: $user
            password: $psw
    validate:
        - eq: [status_code, 200]
        - eq: [headers.Content-Type, application/json]
    

    get_goods.yml

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    name: 查询全部商品
    base_url: http://127.0.0.1:8000
    variables:
        page: 1
        size: 5
    
    request:
        url: /api/v2/goods
        method: GET
        headers:
            Authorization: Token $token
        params:
            page: $page
            size: $size
    validate:
        - eq: [status_code, 200]
    
    

    在 testcases 层引用 api ,步骤1 用extract 提取token变量,在步骤2里面,api里面虽然没定义token,但是可以引用到步骤1 提取的token。

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    config:
        name: 登陆后,查询商品详情
    
    teststeps:
    -
        name: 测试步骤:login
        api: api/login.yml
        extract:
            token: content.token
    -
        name:  测试步骤:查询商品详情
        variables:
            page: 1
            size: 2
        api: api/get_goods.yml
        validate:
            - eq: [content.code, 0]
            - eq: [content.msg, success!]
    

    output 全局变量

    如果对上面的参数传递不太理解,可以在config 加上 output 关键字,把步骤 1 提取的token变量设置为全局变量,使它在整个yaml文件的步骤中都会生效

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    config:
        name: 登陆后,查询商品详情
        output:
        - token
    
    teststeps:
    -
        name: 测试步骤:login
        api: api/login.yml
        extract:
            token: content.token
    -
        name:  测试步骤:查询商品详情
        variables:
            page: 1
            size: 2
        api: api/get_goods.yml
        validate:
            - eq: [content.code, 0]
            - eq: [content.msg, success!]
    

    运行结果会看到 Output 把变量输出到控制台,这样有个好处,可以方便查看变量的值是否正确,方便调试

    INFO
    ==================== Output ====================
    Variable         : Value
    ---------------- : -----------------------------
    token            : 85da1cb0448b62d451bb5db1cd214cccd1bc139a
    ------------------------------------------------
    
    INFO     Start to render Html report ...
    INFO     Generated Html report: D:hrun2
    eports20210415T041914.869893.html
    Sentry is attempting to send 0 pending error messages
    Waiting up to 2 seconds
    Press Ctrl-Break to quit
    

    output 可以在 testcase 间传递变量值

    httprunner 2.x 的版本,testcase 可以引用 api, 同样的,testcase 也可以引用另外一个 testcase 文件,如何2个 testcase 之间需要传递变量,这个时候可以用output把变量暴露出来,给下个步骤引用。
    有些同学喜欢偷懒,觉得前面的用例是一大串的步骤,下个用例的步骤接着前面的用例,于是可以导入前面的用例。
    当然 httprunner2.x 是支持这样做的,其它的框架并不支持。(我个人也不建议这样做,测试用例容易混乱,测试用例设计原则:我们要保证每个用例的独立性,不要依赖其它用例的结果。)

    先在 testcases/test_login_success.yml 中提取 token,接着在 config 里 设置全局变量 token

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    config:
        name: 登陆接口-输入正确账号,正确密码,登陆成功
        output:
        - token
    
    teststeps:
    -
        name: 测试步骤:login
        api: api/login_base_url.yml
        variables:
            user: test1
            psw: "123456"
        extract:
            token: content.token
        validate:
            - eq: [content.code, 0]
            - eq: [content.msg, login success!]
            - len_eq: [content.token, 40]
    

    于是下个testcase/test_goods_all.yml 可以引用testcase

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    config:
        name: 登陆后,查询商品详情
    
    teststeps:
    -
        name: 测试步骤:引用testcases test_login_success.yml
        testcase: testcases/test_login_success.yml
    
    -
        name:  测试步骤:查询商品详情
        variables:
            page: 1
            size: 2
            token: $token
        api: api/get_goods.yml
        validate:
            - eq: [content.code, 0]
            - eq: [content.msg, success!]
    

    下个 api 步骤需重新引用下 $token 就可以找到了。


    httprunner 2.x实战教程点我 ->立即报名

  • 相关阅读:
    Redis可视化客户端管理及监控工具TreeNMS
    Memcache分布式锁 转发 https://www.cnblogs.com/li150dan/p/9529090.html
    MemCache在.NET中使用Memcached.ClientLibrary详解 转发 https://www.cnblogs.com/li150dan/p/9529112.html
    C# Memcache分布式缓存简单入门
    ASP.NET cache缓存的用法
    .net core redis 驱动推荐,为什么不使用 StackExchange.Redis 转发 https://www.cnblogs.com/kellynic/p/9325816.html
    StackExchange.Redis通用封装类分享
    Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager 转发非原创
    .Net使用Redis详解之ServiceStack.Redis(七) 转载https://www.cnblogs.com/knowledgesea/p/5032101.html
    redis的过期时间和过期删除机制
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14661949.html
Copyright © 2011-2022 走看看