前言

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

当数据量比较大的时候,我们希望可以把测试数据写到 CSV 文件中,然后直接引用 CSV 文件数据。

本人环境:HttpRunner V1.5.8

测试场景

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

我们继续以之前的登录接口来学习,如果直接在 YAML/JSON 脚本中指定参数列表内容,那么我们的用例可能就是这样的:

- 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]

上面的用例,只有 3 组测试数据,当我们有10、100组测试数据,如果直接写在测试脚本中,可能会很不方便。我们可以把这些测试数据都写到CSV文件,然后直接引用CSV文件,这样就方便多了,我们的脚本也显得更加简洁。

CSV中存放单个参数

对于 CSV 数据文件,需要遵循如下几项约定的规则:

  • 文件需放置在与测试用例文件相同的目录中;
  • CSV 文件中的第一行必须为参数名称,从第二行开始为参数值,每个(组)值占一行;
  • 若同一个 CSV 文件中具有多个参数,则参数名称和数值的间隔符需实用英文逗号。

比如,我们有多组登录的数据,用户名都不一样,但密码都是一样的,我们就可以创建 username.csv,并把 用户名 这一参数写到 username.csv 中,如下:

username
niuhanyang
test10101
test1010

然后在 YAML/JSON 测试用例中,就可以通过 HttpRunner 内置的 parameterize(可简写为P)函数引用 CSV 文件。

    parameters:
- username: ${P(username.csv)} # 或者 ${parameterize(username.csv)}
- passwd: ["aA123456"]

注意:HttpRunner中,在 parameters 中指定的参数名称必须与 CSV 文件中第一行的参数名称一致。

CSV中存放多个参数

对于具有关联性的多个参数,比如,我们有多组登录的数据,用户名和密码都不一样,那么我们可以创建 user.csv ,并把用户名和密码的参数写到 user.csv 中,如下:

username,passwd
niuhanyang,aA123456
test10101,fasdfasfa
test1010,aA123456

再修改一下 YAML 脚本:

    parameters:
- username-passwd: ${P(user.csv)} # 或者 ${parameterize(user.csv)}

注意:上面的写法是用户名密码一对一的关系,如果是按下面这样写,那就会是笛卡尔积组合的情况,产生 3 * 3 = 9 种组合。

    parameters:
- username: ${P(user.csv)}
- passwd: ${P(user.csv)}

另外,在测试脚本中指定参数时,可以只使用部分参数,并且参数顺序无需与 CSV 文件中参数名称的顺序一致。

运行用例

完整的YAML格式用例(test_csv.yml):

- config:
name: parameters test
request:
base_url: http://api.nnzhp.cn
parameters:
- username-passwd: ${P(user.csv)} # 或者 ${parameterize(user.csv)} - 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]

在HttpRunner 1.x版本中,引用 CSV 数据文件(如 user.csv),需要将 user.csv 和 test_csv.yml 放在同一目录下,然后在运行用例即可。运行用例后的报告如下:

HttpRunner学习7--引用CSV文件数据的更多相关文章

  1. jmeter参数化、添加变量、生成随机数和导入csv文件数据

    Remarks:本次使用jmeter版本为4.0 以下数据都在必应中演示: 添加普通变量 1.添加 User Defined Variables(用户自定义变量) 2.设置变量 3.使用变量 4.查看 ...

  2. CSV文件数据如何读取、导入、导出到新的CSV文件中以及CSV文件的创建

    CSV文件数据如何读取.导入.导出到新的CSV文件中以及CSV文件的创建 一.csv文件的创建 (1)新建一个文本文档: 打开新建文本文档,进行编辑. 注意:关键字与关键字之间用英文半角逗号隔开.第一 ...

  3. java读取目录下所有csv文件数据,存入三维数组并返回

    package dwzx.com.get; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; ...

  4. java 两个csv文件数据去重

    1.pom.xml配置 <dependency> <groupId>commons-io</groupId> <artifactId>commons-i ...

  5. C#使用Linq to csv读取.csv文件数据

    前言:今日遇到了一个需要读取CSV文件类型的EXCEL文档数据的问题,原本使用NPOI的解决方案直接读取文档数据,最后失败了,主要是文件的类型版本等信息不兼容导致.其他同事有使用linq to csv ...

  6. C语言进行csv文件数据的读取

    C语言进行csv文件数据的读取: #include <stdio.h> #include <string.h> #include <malloc.h> #inclu ...

  7. java调用sqlldr导入csv文件数据到临时表

    package cn.com.file;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File; ...

  8. 别动我的奶酪:CSV文件数据丢零现象及对策

    CSV文件在读入EXCEL时,对于前面有零的数据项,比如电话号码,会自作聪明地丢掉那个零. 比如,我有一个北京客户,其号码为01059178888,如果这是通过CSV文件来的数据,在EXCEL中打开时 ...

  9. python学习之读写csv文件(使用pandas)

    简介 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本).纯文本意味着该文件是一个字符序 ...

随机推荐

  1. 请求https前缀的网站验证SSL证书的解决方案之一

    from requests.packages.urllib3.exceptions import InsecureRequestWarning # 禁用安全请求警告requests.packages. ...

  2. DG中模拟failover故障与恢复

    问题描述:情形是当主库真正出现异常之后,才会执行的操作,那么我们执行过failover 之后,如何在重新构建DG,这里我们利用flashback database来重构.模拟前主库要开启闪回区,否则要 ...

  3. Java语法进阶12-集合

    集合 集合:是一种容器,用来装对象的容器,不能装基本数据类型. 数组也是容器,可以用来装基本数据类型,也可以用来装对象. 本质上,集合需要用对应的数据结构实现,是多个类实现接口Collection系列 ...

  4. Tensorflow搭建CNN实现验证码识别

    完整代码:GitHub 我的简书:Awesome_Tang的简书 整个项目代码分为三部分: Generrate_Captcha: 生成验证码图片(训练集,验证集和测试集): 读取图片数据和标签(标签即 ...

  5. 【读一本书】《昇腾AI处理器架构与编程》--神经网络基础知识(2)

    1 卷积神经网络:输入层 之前提到多层感知机的参数太多,导致训练耗时长并且对图像处理也不具有优势,因此大神们 就提出了多层神经网络,其中最经典的是卷积神经网络(Convolution Neural N ...

  6. mysql-常用组件之触发器

    基本概念 触发器是一种特殊的存储过程,不像存储过程需要显示调用,触发器通过监控表事件(增删改操作)自动触发某条 sql 的执行,可以用于购物车加购后库存减少等场景. 触发器基本操作 1. 创建触发器 ...

  7. ios instancetype与id区别

    我们都知道未知类型的的对象可以用id关键字表示,那为什么还会再有一个instancetype呢? instancetype能返回相关联的类型(使那些非关联返回类型的方法返回所在类的类型):而id 返回 ...

  8. Xcode 清理存储空间(转)

    一 移除 Xcode 运行安装 APP 产生的缓存文件(DerivedData) 只要重新运行Xcode就一定会重新生成,而且会随着运行程序的增多,占用空间会越来越大.删除后在重新运行程序可能会稍微慢 ...

  9. acm模板总结

    模板链接 字符串模板 KMP EXKMP Trie 可持久化Trie树+DFS序 01Trie Manacher 字符串哈希 2019上海网络赛G题 17 SA(后缀数组)  最大不重叠相似子串 求两 ...

  10. HDU 6405 Make ZYB Happy(广义SAM)

    It's known to all that ZYB is godlike, so obviously he has a large number of titles, such as jskingj ...