前言

在使用HttpRunner测试过程中,我们可能会遇到这种场景:

账号登录功能,需要输入用户名和密码,设计测试用例后有 N 种组合情况

如果测试组合比较少,比如只有2个,那我们直接在YAML脚本中写2个 test 就行了,但如果测试组合有10个,或者上百个,我们总不可能写10个,甚至100个 test 吧?

因此,在这里我们就需要用到参数化。在HttpRunner中,通过关键字 parameters 来实现参数化数据驱动机制,不管有多少测试组合,我们只需写1个 test 就行了。

本人环境:HttpRunner V1.5.8

测试场景

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

我们继续以之前的登录接口来学习,如果不使用 parameters 来进行参数化,那么我们的用例可能就是这样的:

- config:
name: login test
request:
base_url: http://api.nnzhp.cn - test:
name: login case 1
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] 省略很多个 test - test:
name: login case N
request:
url: /api/user/login
method: POST
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
data:
username: test101012
passwd: aA123456
validate:
- eq: [status_code, 200]
- eq: [content.error_code, 0]

在上面的用例中,我们可能要写很多的 test ,在这些 test 中,除了 request-data 中 username 和 passwd 的值不一样,其他内容都完全一样。

当我们使用 parameters 来实现参数化后,我们只要写 1个test 就行了,避免了重复的脚本代码,同时脚本内容也变得更加简洁。

parameters参数化--一对一

我目前的 HttpRunner 版本是 1.5.8 ,关键字 parameters 可以在 config 或 test 中使用,我们只以在 config 中使用 parameters 来进行说明。

注意:在 HttpRunner 1.5.11 之后的版本中,不再支持在 test 中使用 parameters 。

我们准备 3 组登录用的数据,其中,第1组和第3组是能正常登录的用户名和密码,第2组是错误的用户名和密码。使用 parameters 如下:

    parameters:
- username-passwd:
- ["niuhanyang", "aA123456"] # 正确的用户名密码
- ["test10101", "fasdfasfa"] # 错误的用户名密码
- ["test1010", "aA123456"] # 正确的用户名密码

然后,只保留一个 test 即可,并在 request-data 中引入参数,如下:

      data:
username: $username
passwd: $passwd

完整的YAML用例:

- config:
name: parameters test
request:
base_url: http://api.nnzhp.cn
parameters:
- username-passwd:
- ["niuhanyang", "aA123456"] # 正确的用户名密码
- ["test10101", "fasdfasfa"] # 错误的用户名密码
- ["test1010", "aA123456"] # 正确的用户名密码 - test:
name: login case
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]

运行用例,然后即可得到测试报告,如下:

parameters参数化--多对一

上面介绍的是用户名和密码一对一的情况,如果是 多对一 或 一对多 关系,比如 3 组登录用的数据中,用户名不一样,但密码都是相同的,这个时候,如果用上面的写法,就不太方便了。

对于这种情况,我们可以这样写:

    parameters:
- username: ["niuhanyang", "test10101", "test1010"]
- passwd: ["aA123456"]

只需改动 config 中的 parameters ,其他内容都不需要修改。运行用例后的报告如下:

parameters参数化--多对多

有时候,我们可能存在多对多的测试场景,即笛卡尔积的组合情况。如果有 3 个不同的用户名,2 个不同的密码,对于这种情况,使用笛卡尔积组合,就应该存在 2 * 3 = 6 种测试组合。

对于这种情况,我们可以这样写:

    parameters:
- username: ["niuhanyang", "test10101", "test1010"]
- passwd: ["aA123456", "fasdfasfa"]

只需改动 config 中的 parameters ,其他内容都不需要修改。运行用例后的报告如下:

HttpRunner学习6--使用parameters参数化的更多相关文章

  1. HttpRunner学习7--引用CSV文件数据

    前言 在之前的文章中,我们已经学习了 parameters 参数化,是在测试脚本中直接指定参数列表.这种方法简单易用,但如果我们的参数列表数据比较多,这种方法可能就不太适合了. 当数据量比较大的时候, ...

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

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

  3. HttpRunner学习8--使用debugtalk.py辅助函数

    前言 在HttpRunner中,我们的测试用例都是写在 YAML/JSON 文件中,有时候我们想借助代码来实现某些较复杂的功能,但在 YAML/JSON 中是无法直接写代码来处理的,这个时候,我们可以 ...

  4. httprunner学习15-运行用例命令行参数详解

    前言 HttpRunner 在命令行中启动测试时,通过指定参数,可实现丰富的测试特性控制. 命令行参数CLI 使用 -h 查看相关命令行参数 hrun -h 参数名称 参数值 参数说明 -h, --h ...

  5. JMeter学习(十)参数化User Defined Variables与User Parameters(转载)

    转载自 http://www.cnblogs.com/yangxia-test 偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近, ...

  6. httprunner学习6-参数化(引用外部csv数据)

    前言 上一篇已经实现参数化,但是数据是放在.yml文件里面,当测试数据非常多的时候,我们希望把测试数据写到csv文件. httprunner==1.5.8 独立参数 对于已有参数列表,并且数据量比较大 ...

  7. 一、HttpRunner学习汇总

    HttpRunner是一款面向Http和HTTPS协议的通用测试框架,只需编写维护一份YAML/JSON脚本即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求,是基于关键字驱动的框架,基于 ...

  8. 细雨学习笔记:Jmeter参数化

    目前我用到两种方式: 1)某个参数,值不常改变的,好多地方都用到:请用“用户定义的变量” 用户组,右键--添加--配置原件--用户定义的变量,在这添加. 如何使用呢?在需要用到此参数的地方这样引用: ...

  9. testng学习-before&after,parameters,并行,factory,beanshell,监听器,依赖注入

    一系列的before after的操作测试 [TestNG] Running: C:\Users\user\AppData\Local\Temp\testng-eclipse-1538841744\t ...

随机推荐

  1. AppBoxFuture: 集成第三方Sql数据库

      框架设计之初是不准备支持第三方数据库的,但最近几个朋友都提到需要将旧的基于传统Sql数据库的应用迁移到框架内,主要是考虑到一方面目前框架内置的分布式数据库尚未完善,另一方面是希望能逐步迭代旧应用替 ...

  2. 推荐几个不错的console调试技巧

    在我们的日常前端开发中,使用最频繁的莫过于使用console.log在浏览器的控制台中打印出我们需要调试的信息,但是大部分人可能跟之前的我一样,没有意识到其实console除了log方法以外,还有很多 ...

  3. C# VS2019 WebService创建与发布,并部署到Windows Server 2012R

    前言 上一次数据库灾备和性能优化后,数据库专家建议,在不扩容的情况下,客户端不能再频繁的扫描数据库了!一句惊醒梦中人,因为我也发现数据库越来越卡了,自从上个项目上线后,就出现了这个情况.后来分析其原因 ...

  4. 将String类型转换为int整数类型

    示例如下: public class demo { public static void main(String[] args) { String s="10"; 6 7 //St ...

  5. c# 窗体开发4 数据库访问技术

    ADO.NET的名称起源于ADO(ACTIVEX DATA OBJECTS) USING SYSTEM; USING SYSTEM.COLLECTIONS.GENERIC; USING SYSTEM. ...

  6. 腾讯面试官问我Java中boolean类型占用多少个字节?我说一个,面试官让我回家等通知

    本文首发于微信公众号:程序员乔戈里 什么是boolean类型,根据官方文档的描述: boolean: The boolean data type has only two possible value ...

  7. openssl的移植

    下载openssl1.1并解压,进入openssl根目录,执行配置命令 ./Configure linux-armv4 --prefix=$(pwd)/__install 这里使用当前目录下的__in ...

  8. Vue3.0常用代码片段和开发插件

    Vue3 Snippets for Visual Studio Code Vue3 Snippets源码 Vue3 Snippets下载 This extension adds Vue3 Code S ...

  9. Spring Security OAuth2 Demo —— 授权码模式

    本文可以转载,但请注明出处https://www.cnblogs.com/hellxz/p/oauth2_oauthcode_pattern.html 写在前边 在文章OAuth 2.0 概念及授权流 ...

  10. 为什么现在使用多周期CPU,而单周期CPU被弃用?

    最初设计的CPU结构简单,内部不复杂.之所以制造它是为了让机器自动跑程序,算数. 早期CPU都是单周期的,人们没考虑那么多,性能啥的.就让CPU每个时钟周期跑一个指令,这些时钟周期等长.这样下来,有的 ...