Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >httprunner 3.x学习8 - variables变量声明与引用

httprunner 3.x学习8 - variables变量声明与引用

作者头像
上海-悠悠
发布于 2021-06-24 14:21:36
发布于 2021-06-24 14:21:36
88700
代码可运行
举报
运行总次数:0
代码可运行

前言

在 HttpRunner 中,支持变量声明(variables)和引用($var)的机制

区别在于

  • 在 config 中定义的变量为全局的,整个测试用例(testcase)的所有地方均可以引用;
  • 在 step 中定义的变量作用域仅局限于当前测试步骤(teststep)

环境:httprunner==3.1.4

step 局部变量

在登录案例中,账号和密码是写死的,一般写用例的时候,我们最好把这种可能会变的参数单独写个变量。做到测试数据和代码的分离,以便后续维护。 如果我们在步骤(step)下声明的变量,作用域只在当前步骤(step)下有效。声明变量用 variables,变量和对应值用键值对,如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
teststeps:
-
    name: step login
    variables:
        user: test
        psw: "123456"

引用 user 和 psw 变量用 user, psw, 完整的 login_var.yml 脚本如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
config:
    name: login case
    base_url: http://127.0.0.1:8000
    export:
    - token

teststeps:
-
    name: step login
    variables:
        user: test
        psw: "123456"
    request:
        url: /api/v1/login
        method: POST
        json:
            username: $user
            password: $psw
    extract:
        token: content.token
    validate:
        - eq: [status_code, 200]
        - eq: [content.code, 0]
        - eq: [content.msg, login success!]
        - len_eq: [content.token, 40]

pytest 脚本设置变量用with_variables()方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Step(
            RunRequest("step login")
            .with_variables(**{"user": "test", "psw": "123456"})

完整的 pytest 脚本 login_var_test.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# NOTE: Generated By HttpRunner v3.1.4
# FROM: login_var.yml

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

class TestCaseLoginVar(HttpRunner):

    config = (
        Config("login case").base_url("http://127.0.0.1:8000").export(*["token"])
    )

    teststeps = [
        Step(
            RunRequest("step login")
            .with_variables(**{"user": "test", "psw": "123456"})
            .post("/api/v1/login")
            .with_json({"username": "$user", "password": "$psw"})
            .extract()
            .with_jmespath("body.token", "token")
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal("body.code", 0)
            .assert_equal("body.msg", "login success!")
            .assert_length_equal("body.token", 40)
        ),
    ]

if __name__ == "__main__":
    TestCaseLoginVar().test_start()

config 全局变量

在config下声明变量(variables)是全局变量,这样就在整个.yml文件生效了,yml格式如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
config:
    name: logincase
    variables:
        user: test
        psw: "123456"

teststeps中,有多个 step 都需要引用账号 user, 于是可以直接引用 config 的变量$user

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
config:
    name: logincase
    variables:
        user: test
        psw: "123456"
    base_url: http://127.0.0.1:8000
    export:
    - token

teststeps:
-
    name: step1 login
    request:
        url: /api/v1/login/
        method: POST
        headers:
            Content-Type: application/json
            User-Agent: python-requests/2.18.4
        json:
            username: $user
            password: $psw
    extract:
        token: content.token         # 提取token
    validate:
        - eq: [status_code, 200]
        - eq: [headers.Content-Type, application/json]
        - eq: [content.msg, login success!]
        - eq: [content.code, 0]
-
    name: step2 get user info
    request:
        url: /api/v1/userinfo/
        method: GET
        headers:
            Content-Type: application/json
            User-Agent: python-requests/2.18.4
            Authorization: Token $token          # 引用token
    validate:
        - eq: [content.code, 0]
        - eq: [content.data.0.name, $user]

pytest完整脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# NOTE: Generated By HttpRunner v3.1.4
# FROM: userinfo_var.yml

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

class TestCaseUserinfoVar(HttpRunner):

    config = (
        Config("logincase")
        .variables(**{"user": "test", "psw": "123456"})
        .base_url("http://127.0.0.1:8000")
        .export(*["token"])
    )

    teststeps = [
        Step(
            RunRequest("step1 login")
            .post("/api/v1/login/")
            .with_headers(
                **{
                    "Content-Type": "application/json",
                    "User-Agent": "python-requests/2.18.4",
                }
            )
            .with_json({"username": "$user", "password": "$psw"})
            .extract()
            .with_jmespath("body.token", "token")
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal('headers."Content-Type"', "application/json")
            .assert_equal("body.msg", "login success!")
            .assert_equal("body.code", 0)
        ),
        Step(
            RunRequest("step2 get user info")
            .get("/api/v1/userinfo/")
            .with_headers(
                **{
                    "Content-Type": "application/json",
                    "User-Agent": "python-requests/2.18.4",
                    "Authorization": "Token $token",
                }
            )
            .validate()
            .assert_equal("body.code", 0)
            .assert_equal("body.data[0].name", "$user")
        ),
    ]

if __name__ == "__main__":
    TestCaseUserinfoVar().test_start()

变量优先级

原则上config 变量和 step 变量名称尽量不要重复, 当config和step中都用同一个变量时,step变量优先级大于config变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
config:
    name: login case
    variables:
        user: test
        psw: "123456"
    base_url: http://127.0.0.1:8000
    export:
    - token

teststeps:
-
    name: step login
    variables:
        user: test1
        psw: "123456"

pytest 对应的脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

class TestCaseLoginVar(HttpRunner):

    config = (
        Config("login case")
        .variables(**{"user": "test", "psw": "123456"})
        .base_url("http://127.0.0.1:8000")
        .export(*["token"])
    )

    teststeps = [
        Step(
            RunRequest("step login")
            .with_variables(**{"user": "test1", "psw": "123456"})

config 和 step中都有user变量,运行时,会拿step中的变量值 ‘test1’去登录。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
机器视觉系统硬件:工业相机
相机是机器视觉系统的核心部件,广泛应用于各个领域,如生产监控、测量任务和质量控制等。工业相机通常比常规的标准数字相机更加坚固耐用,这是因为它们必须能够应对各种复杂多变的外部影响,如应用于高温、高湿、粉尘等恶劣环境。工业相机的种类有很多,下图是常见的一些分类方式。下文将详细介绍几种常用类型的工业相机。
用户7699929
2020/08/27
1.4K0
机器视觉(第4期)----工业相机综述及接口介绍
上期我们一起学习了镜头的相关知识,戳下链接: 机器视觉(第3期)----图像采集之镜头原理详述 这期我们一起学习相机和接口的相关知识,工业相机是机器视觉系统中的一个关键组件,其最本质的功能就是将光信号转变成有序的电信号。选择合适的相机也是机器视觉系统设计中的重要环节,相机的选择不仅直接决定所采集到的图像分辨率、图像质量等,同时也与整个系统的运行模式直接相关。 本期主要内容: 相机的芯片类型 黑白相机成像原理 彩色相机成像原理 相机接口类型 线阵和面阵相机 相机常见参数介绍 一. 相机的芯片类型 一般情况下,
智能算法
2018/04/03
1.6K0
机器视觉(第4期)----工业相机综述及接口介绍
工业机器视觉系统相机如何选型?(理论篇—3)
数字图像是机器视觉系统工作的前提和基础,工业机器视觉系统把成像子系统的信号转换为反映现实场景的二维数字图像,并对其进行分析、处理,得出各种指令来控制机器的动作。
不脱发的程序猿
2021/05/08
1.9K0
工业机器视觉系统相机如何选型?(理论篇—3)
机器视觉基础应用知识详解
随着工业4.0时代的到来,机器视觉在智能制造业领域的作用越来越重要,为了能让更多用户获取机器视觉的相关基础知识,包括机器视觉技术是如何工作的、它为什么是实现流程自动化和质量改进的正确选择等。小编为你准备了这篇机器视觉入门学习资料。
小白学视觉
2021/08/06
1.1K0
(干货) |机器视觉不可不知的相机内部工作原理
工业相机是机器视觉系统中的一个关键组件,其最本质的功能就是将光信号转变成有序的电信号。选择合适的相机也是机器视觉系统设计中的重要环节,相机的选择不仅直接决定所采集到的图像分辨率、图像质量等,同时也与整个系统的运行模式直接相关。 一. 相机的芯片类型: 一般情况下,工业相机按照芯片类型可以分为CCD相机和CMOS相机,当然也有一些其他的芯片,比如富士公司生产的Super CCD芯片。这里我们只讨论市场主流的CCD相机和CMOS相机的工作原理。数码相机的CCD和CMOS都深藏于相机内部,就算您有机会看到它们的样
智能算法
2018/04/03
2.6K0
(干货) |机器视觉不可不知的相机内部工作原理
机器视觉系统之——镜头、相机介绍
1).分辨率(Resolution):相机每次采集图像的像素点数(Piels),对于数字工业相机机一般是直接与光电传感器的像元数对应的,对于模拟相机机则是取决于视频制式,PAL制为768*576,NTSC制为640*480。
AI机器视觉
2022/06/01
1.6K0
机器视觉系统之——镜头、相机介绍
一文讲透了什么是机器视觉!
机器视觉 就是用机器代替人眼来做测量和判断。机器视觉系统是指通过机器视觉产品(即图像摄取装置,分 CMOS 和CCD 两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,根据像素分布和亮度、颜色等信息,转变成数字化信号;图像系统对这些信号进行各种运算来抽取目标的特征,进而根据判别的结果来控制现场的设备动作。
AI算法与图像处理
2021/03/12
9580
一文讲透了什么是机器视觉!
机器视觉工业缺陷检测(光源,相机,镜头,算法)
视觉工业检测大体分为工件尺寸测量与定位,和表面缺陷检测,及各种Logo标识的检测与识别等。
机器学习AI算法工程
2021/10/14
18.4K0
机器视觉工业缺陷检测(光源,相机,镜头,算法)
工业相机的曝光、曝光时间、快门、增益
尽管摄影自诞生以来,无数人都在探索相机这个工具究竟能发挥那些作用。但一个最基本的作用,就是把我们眼睛看到的通过摄影来记录下来。
AI算法与图像处理
2021/03/14
6.4K0
机器视觉那些事
经常“打螺丝“的”吃席“观众就会发现,你看这个手机屏幕有没有划痕、这个构件有没有缺陷,要左手拿个电灯,右手拿起这个物品,反复的看反复的摸,大概耗时一分钟以上,一坤时以下,这个物品就被你”品鉴“出来了。如果后面”老板“发现还有被你遗漏的问题,”两电炮“是难免的。就像那句话:使卵石臻于完美的,并非锤的打击,而是水的且歌且舞,真正推动变革的并非被动应付,而是主动求索的精神,追求效率的操作者,为突破人工检测的局限,摸索出了机器视觉这个东西。
EatRice
2025/04/08
830
机器视觉那些事
工业相机与镜头选型方法(含实例)
工业相机与我们手机上面的相机或者我们单反相机不同,工业相机它能够使用各种恶劣的工作环境,比如说高温,高压,高尘等。工业相机主要有面阵相机和线阵相机,线阵相机主要用于检测精度要求很高,运动速度很快的场景,而面阵相机应用更为广泛。
全栈程序员站长
2022/08/30
2.8K0
工业相机与镜头选型方法(含实例)
一文详解工业相机和镜头选取
一问价格,至少都是大几千,贵的在十几万,心里就不禁有疑问,就这么一个破相机,为啥就卖这么贵?它跟我们常见的单反相机有什么区别?我用单反相机来拍,色彩又好,成像又清晰,它不香吗?为啥一定要用工业相机?
3D视觉工坊
2020/12/11
1.5K0
一文详解工业相机和镜头选取
机器视觉入门知识总结
一、机器视觉系统 工业相机类型:按照输出信号类型的不同分为模拟相机和数字相机两种。而数字相机按照接口标准不同,可以分为1394相机、USB相机、CameraLink相机以及Gige相机四种。其中CameraLink接口相机能够解决大数据量传送问题;Gige接口相机能够解决长距离、快速传输问题;而1394相机和USB接口相机具有简单易用、性价比高等特点; 镜头接口类型:C接口、CS接口、U接口等;
小白学视觉
2022/12/27
7920
干货||10个机器视觉常见问题
 选择相机却往往刻不容缓的的问题摆在机器视觉工程师面前,因此,选择相机了解以下几个方面问题:
小白学视觉
2022/09/28
5140
CCD传感器成像、尺寸、曝光时间「建议收藏」
参考博主@机器视觉001的博文 https://blog.csdn.net/liubing8609/article/details/78254703
全栈程序员站长
2022/09/05
3.5K0
机器视觉相机详解
工业相机相比于传统的民用相机而言,具有高的图像稳定性、高传输能力和高抗干扰能力等优点。目前市面上工业相机大多是基于CCD或CMOS芯片的相机。
周旋
2022/09/19
1K0
机器视觉相机详解
机器视觉检测系统中这些参数你都知道么?
摄像机是机器视觉系统中的一个关键组件,其最本质的功能就是将光信号转变成为有序的电信号。选择合适的摄像机也是机器视觉系统设计中的重要环节,摄像机的不仅是直接决定所采集到的图像分辨率、图像质量等,同时也与整个系统的运行模式直接相关。
小白学视觉
2019/06/19
3K0
机器视觉检测系统中这些参数你都知道么?
工业检测中黑白相机为什么比彩色工业相机更受青睐
相机是机器视觉解决方案系统的核心部件,广泛应用于各个领域,尤其是用于生产监控、测量任务和质量控制等。工业数字相机通常比常规的标准数字相机更加坚固耐用。这是因为它们必须能够应对各种复杂多变的外部影响,如应用于高温、高湿、粉尘等恶劣环境。工业相机的分类形式有很多,下文将详细介绍几种常用类型的工业相机。   面阵相机与线阵相机的区别在于前者是以面为单位进行图像采集,可以直接获得完整的二维图像信息,后者的以“线”为单位,虽然也是二维图形,但长度较长,而宽度却只有几个像素。这是因为线阵相机的传感器只有一行感光元素。虽然面阵相机的像元总数较多,但分布到每一行的像素单元却少于线阵相机,因此面阵相机的分辨率和扫描频率一般低于线阵相机。
小白学视觉
2022/09/28
9960
【Sensor有点意思】之重要参数理解
通过CMOS图像传感器感受环境光,输出图像供我们分析,通过sensor宣传册了解一下sensor性能和情况。下图以斯特威SC8238为例。
AomanHao
2024/08/07
3700
【Sensor有点意思】之重要参数理解
【Sensor有点意思】之重要参数理解
通过CMOS图像传感器感受环境光,输出图像供我们分析,通过sensor宣传册了解一下sensor性能和情况。下图以斯特威SC8238为例。
AomanHao
2023/07/20
2K0
推荐阅读
相关推荐
机器视觉系统硬件:工业相机
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验