前言

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

本人环境: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]

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

config中使用variables

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

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

我们先在 config 中声明了变量 username 和 passwd,变量名可随意定义,然后在 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. 组长组——“多彩夕阳”APP评价

    基于NABCD评论,及改进建议 一.组长组NABCD: N-需求背景: (1)我国老龄化日益加重,已突破两亿.目前人数还在增加,解决老年福祉成为社会关注的民生话题. (2)智能手机越来越普遍,老年人已 ...

  2. 使用 Topshelf 组件一步一步创建 Windows 服务 (2) 使用Quartz.net 调度

    上一篇说了如何使用 Topshelf 组件快速创建Windows服务,接下来介绍如何使用 Quartz.net 关于Quartz.net的好处,网上搜索都是一大把一大把的,我就不再多介绍. 先介绍需要 ...

  3. 结合开源软件kaptcha讲解登录验证码功能的实现

    一.验证码生成之配置使用kaptcha 使用google开源的验证码实现类库kaptcha,通过maven坐标引入 <dependency> <groupId>com.gith ...

  4. Dart Learn Notes 02

    Functions Dart是一门面向对象的语言,所以即便是方法也是一个对象,它的类型是Function. 这就意味着方法可以指向变量,也可以作为方法中的参数供其他方法使用.甚至可以让 一个类作为一个 ...

  5. /etc/security/limits.conf 详解与配置

    目录 一. /etc/security/limits.conf 详解 /etc/security/limits.conf 配置解析 /etc/security/limits.d/ 目录 二. ulim ...

  6. python-面向对象之封装

    封装 面向对象三大特性: 继承 封装 多态 隐藏对象的属性和实现细节,仅对外提供公共访问方法 广义上的封装 : 把方法和变量都封装在类中 狭义上的封装 : 在类的外部干脆不能调用了 优点 将变化隔离 ...

  7. kafka官方的kafka-server-start.sh不能关闭kafka进程解决办法

    vi kafka-server-stop.sh 把PIDS=$(ps ax | grep -i 'kafka\.Kafka' | grep java | grep -v grep | awk '{pr ...

  8. SpringMVC请求参数接收总结(一)

    前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...

  9. 【Python3爬虫】网络小说更好看?十四万条书籍信息告诉你

    一.前言简述 因为最近微信读书出了网页版,加上自己也在闲暇的时候看了两本书,不禁好奇什么样的书更受欢迎,哪位作者又更受读者喜欢呢?话不多说,爬一下就能有个了解了. 二.页面分析 首先打开微信读书:ht ...

  10. builtins内建模块

    builtins模块 为啥我们没有导入任何模块就能使用len(),str(),print()...等这么多的函数? 其实在我们运行python解释器的时候,他会自动导入一些模块,这些函数就是从这些地方 ...