前言

在HttpRunner中,如果需要声明变量,可以通过关键字 variables 来完成,要引用声明的变量,则是通过 $+变量名 (如 $token )来实现。variables 可以在 configtest 中使用。

本人环境:HttpRunner V1.5.8

测试场景

登录接口文档说明:http://doc.nnzhp.cn/index.php?s=/6&page_id=12

我们将继续以之前的登录接口来学习,之前的用例是这样的:

- config:
name: extract test
request:
base_url: http://api.nnzhp.cn - test:
name: login case
request:
url: /api/user/login
method: POST
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
data:
username: test1010
passwd: aA123456
validate:
- eq: [status_code, 200]
- eq: [content.error_code, 0]

在上面的用例中,我们的 usernamepasswd 是在 data 中写死的,但在实际测试中,我们的数据可能会经常变化,因此,我们最好把一个变量传入到 usernamepasswd 中,这样可以便于对用例进行维护。

config中使用variables

在 config 中声明变量,相当于定义的全局变量,作用域为整个用例,可以在各个 test 中使用。

- config:
name: variables test
request:
base_url: http://api.nnzhp.cn
variables:
username: test1010
passwd: aA123456

我们先在 config 中声明了变量 usernamepasswd,变量名可随意定义,然后在 test 中进行引用。

注意:引用的时候, $ 后的变量名,必须与声明的变量名一致。

      data:
username: $username
passwd: $passwd

在 config 中定义的变量,可以在当前整个YAML脚本中生效,比如可以在多个 test 使用:

- test:
省略部分内容
data:
username: $username
passwd: $passwd - test:
省略部分内容
data:
username: $username
passwd: $passwd

test中使用variables

在 test 中声明变量,相当于定义的局部变量,作用域为当前测试步骤,即只作用于一个 test 。test 中声明和引用变量的方法,和在 config 中是一样的,如下:

- test:
name: login case
variables:
username: test1010
passwd: aA123456
request:
省略部分内容
data:
username: $username
passwd: $passwd

很明显,在 config 和 test 中使用 variables 是有区别的,如果只在 test 中定义变量,那么存在多个 test 时,我们需要这样写:

- test:
name: login case
variables:
username: test1010
passwd: aA123456
request:
省略部分内容
data:
username: $username
passwd: $passwd - test:
name: login case
variables:
username: test1010
passwd: aA123456
request:
省略部分内容
data:
username: $username
passwd: $passwd

config和test中同时使用variables

有时候,我们可能想同时定义全局变量和局部变量,那么可以同时在 config 和 test 中使用 variables 。如果 config 和 test 中定义了相同的变量名,那么在 test 执行时会优先使用当前 test 测试步骤中定义的局部变量。

完整的YAML格式用例如下:

- config:
name: variables test
request:
base_url: http://api.nnzhp.cn
variables:
username: test101011111
passwd: aA123456 - test:
name: login case
variables:
username: test1010
passwd: aA123456
request:
url: /api/user/login
method: POST
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
data:
username: $username
passwd: $passwd
validate:
- eq: [status_code, 200]
- eq: [content.error_code, 0]

上面这个用例中,config 中的用户名密码是错误的,test 中的用户名密码是正确的。该用例在执行时,使用的时 test 中定义的局部变量,因此它是能够登录成功。

HttpRunner学习5--使用variables声明变量的更多相关文章

  1. JS声明变量的写法

    学习JS时候,声明变量是必须的,(虽然在没有声明变量的情况下,对某一变量赋值后, js自动认为已进行声明,但为了严谨,建议还是要进行声明)声明方式有传统的 var a: var b: var c: 也 ...

  2. httprunner学习4-variables变量声明与引用

    前言 在 HttpRunner 中,支持变量声明(variables)和引用($var)的机制.在 config 和 test 中均可以通过 variables 关键字定义变量,然后在测试步骤中可以通 ...

  3. 【JS学习】var let const声明变量的异同点

    [JS学习]var let const声明变量的异同点 前言: 本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 总述 ...

  4. 【学习总结】声明变量在@interface括号中与使用@property的区别

    方式一:直接在.h文件@interface中的大括号中声明. @interface Test : NSObject { NSString *str; // 私有变量 , 其他类无法访问,只能够该类内部 ...

  5. GO学习笔记 - 用":="实现短声明变量!

    对于Delphi程序员,":="这个符号再熟悉不过了,表示对变量赋值!在GO语言中,同样表示赋值,但是和Delphi有些不同,不同就在于不需要var变量名称了!GO语言中的&quo ...

  6. JavaScript学习系列博客_21_JavaScript 变量、函数的提前声明

    变量的提前声明(全局作用域) - 我们知道js的代码是自上而下执行的.如下,console.log(a)在var a=10前面,但是结果输出的是undefined. - 使用var关键字声明的变量,会 ...

  7. httprunner学习5-参数化与数据驱动

    前言 参数化是自动化测试离不开的话题,httprunner里面只要把上一篇声明变量学会了,参数化也就自然会了. 不同的地方在于声明变量时对应值只有一个,参数化是多个值,存放在list里面. httpr ...

  8. JavaScript知识架构学习路径(一)- 变量篇

    [摘要]本文是专为JavaScript入门者而总结的,总体上将JavaScript的基础部分分成了九大块,分别是变量.运算符.数组.流程控制结构.字符串函数.函数基础.DOM操作基础.文档对象模型DO ...

  9. es6中的let声明变量与es5中的var声明变量的区别,局部变量与全局变量

    自己通过看typescript官方文档里的let声明,与阮一峰老师翻译的的es6学习文档,总结以下三点 1.var声明可以多次重复声明同一个变量,let不行 2.let变量只在块级作用域里面有效果,v ...

随机推荐

  1. GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!

    大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻... 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚.当时一方面是因为菜,看着这种全是 ...

  2. tensorflow的函数

    1. if __name__=="__main__": tf.app.run()#运行之前定义的main函数#将传进来的参数,以及flags.FLAGS定义的参数传入到main函数 ...

  3. DNS资源记录的七类

    在Microsoft产品系列中,ADDS是一个很出色的设计平台,说到AD,那么我们就不得不提起他的合作伙伴--DNS,相信大家都知道,DNS在AD中的重要地位,就如男人和女人一样,要想有所作为,他们2 ...

  4. 在centos7上进行hadoop-3.1.2的伪分布搭建

    第一步:配置网络(静态IP) vi /etc/sysconfig/network-scripts/ifcfg-ens33(网卡名称可能不同) 1. 修改: 将该配置文件中的ONBOOT=no修改为ye ...

  5. 动态规划算法(java)

    一.动态规划算法 众所周知,递归算法时间复杂度很高为(2^n),而动态规划算法也能够解决此类问题,动态规划的算法的时间复杂度为(n^2).动态规划算法是以空间置换时间的解决方式,一开始理解起来可能比较 ...

  6. 深入了解CSS中盒子模型

    CSS中盒子模型介绍 什么是盒子? 盒子是用来存储物品,我们可以将盒子理解为酒盒,酒盒有什么组成的呢? 有酒可以喝.有填充物保护酒防止酒被摔坏.纸盒子. 我们怎么理解CSS中的盒子呢,CSS中盒子有什 ...

  7. js贪吃蛇(构造函数)

    给大家分享一下这几天我研究的一个贪吃蛇,挺简单的,但是实现起来其实有点绕的,我给大家附上完整代码,一起分析学习一下,主要用的是构造函数. 思想: .设计蛇:属性有宽.高.方向.状态(有多少节),方法: ...

  8. 英语口语考试资料Language learning

    "Learning a language is easy. Even a child can do it!" Most adults who are learning a seco ...

  9. linux任务计划cron、chkconfig工具、systemd管理服务、unit和target介绍

    第8周第1次课(5月14日) 课程内容: 10.23 linux任务计划cron10.24 chkconfig工具10.25 systemd管理服务10.26 unit介绍10.27 target介绍 ...

  10. cesium添加多个geojson文件并分别控制显示和隐藏

    /*获取geojson数据*/ function get_geojson(name,h,n){ let x=document.getElementById(n); if(x.className === ...