MeterSphere 接口测试深度数据驱动使用来喽

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

    众所周知,MeterSphere 接口自动化中,用户可以添加 CSV 文件可以做数据驱动测试,不熟悉的小伙伴点这里​【接口自动化做数据驱动(ddt)测试】​​。除了 CSV 文件以外,日常测试过程中,还有 JSON、XML、或者增量与测试相关的文件需要进行读取和写入的操作。用脚本读取/写入文件,需要十行左右,

这次介绍的依然使用JMeter 函数来实现读取/写入文件。大家可以结合自身系统业务,适配测试方案,提升测试效率!

下面是本文要介绍到的函数,对函数使用不熟悉的朋友点这里​​【MeterSphere 中常用 JMeter 函数使用详细】​

函数名称

函数作用

StringFromFile

同时读取多个文件

FileToString

读取整个文件内容

CSVRead

从文件读取指定列的值

XPath

使用 XPath 语法匹配 XML文件

StringToFile

将字符串写入文件

1. StringFromFile:同时读取多个文件

1.1 业务背景

       在一些大数据平台测试过程中,有些测试数据来源是爬虫增量获取到的,每天获取到的数据存为一个文本文件,现有接口需要读取批量文件进行测试,此时我们需要将多个文件中每一行值加载为接口请求参数。这时需要用到StringFromFile 函数,使用场景变量添加csv,也能达到相同的目的,而且方法更简单,但是它目前不支持多个输入文件。

1.2 函数说明

该函数用于从文本文件中读取字符串,每次读取一行,支持读取多个文件。

每次调用函数,都会从文件中读取下一行。当到达文件末尾时,函数又会从文件开始处重新读取,直到最大循环次数。

如果在一个测试脚本中对该函数有多次引用,那么每一次引用都会独立打开文件,即使文件名是相同的(如果函数读取的值,在脚本其他地方也有使用,那么就需要为每一次函数调用指定不同的变量名)。

如果在打开或者读取文件时发生错误,那么函数就会返回字符串"ERR"

1.3 参数说明

参数

描述

是否必填

文件名

文件名的路径 (路径可以相对于 JMeter 启动目录)。

yes

变量名

用于后续调用该函数的变量名称

no

启动序号

初始序列号(如果省略,则将结束序列号视为循环计数)

no

末端序号

最终序列号(如果省略,序列号可以无限制地增加)

no

  • 启动序号:初始的序列号,如果省略,那么结束序列号就代表文件的循环读取次数。
  • 末端序号:结束序列号,如果省略,那么序列号会无限增长。

1.4 使用示例

读取单个文件:${_StringFromFile(demo.txt,,,)} 读取demo.txt读取多个文件,需要在文件名中使用序列号:${_StringFromFile(PIN.DAT,,,2)} 读取 PIN.DAT 两次${_StringFromFile(PIN#'.'DAT,,1,3)} 读取 PIN1.DAT PIN2.DAT PIN3.DAT${_StringFromFile(pin000'.'dat,,6,8)} 读取 pin006.dat pin007.dat pin008.dat

MS 所在服务器data目录下有aa.txt文件

MeterSphere 接口测试深度数据驱动使用来喽_数据驱动

StringFromFile函数读取单个文件:

aa.txt文件内容为测试账户名:gl1,gl2,gl3

使用 ${__StringFromFile(/opt/metersphere/data/json/aa.txt,,,)} 引用

因为每次执行读取一行,所以搭配循环控制器使用,如下图,设置循环次数7,文件有3行,第七次循环取的是文件第一行gl1

MeterSphere 接口测试深度数据驱动使用来喽_MeterSphere_02

${__StringFromFile(/opt/metersphere/data/json/aa.txt,,,2)} 引用,因设置了末端序号为2,只读取文件两次,循环次数为7,此时第七次循环因请求体取值有问题报错

MeterSphere 接口测试深度数据驱动使用来喽_数据驱动_03

StringFromFile 函数读取多个文件:

aa1.txt 中有测试数据 admin1 admin2 admin3 aa2.txt中有测试数据 ycr1 ycr2 ycr3

使用 ${__StringFromFile(/opt/metersphere/data/json/aa#.txt,,1,2)} 引用

前六次循环 name 依次取值为 admin1 admin2 admin3 ycr1 ycr2 ycr3

此时第七次循环因请求体取值有问题报错

MeterSphere 接口测试深度数据驱动使用来喽_接口测试_04

使用序列号时,路径名被用作 java.text.DecimalFormat 的格式字符串。当前序列号作为唯一参数传入。如果未指定开始序列号,则按原样使用路径名称。

1.5 格式化系列使用示例

常用的两个格式化序列:

  • #:插入数字,没有前导零或空格。
  • 000:插入数字,数字不足三位时,将插入前导零补足三位;数字超过三位时,则插入数字实际位数。

用法说明:

在不带前导零的情况下插入数字:pin#'.'dat:可以匹配 pin1.dat, ... pin9.dat, pin10.dat, ... pin9999.dat带前导零的情况下插入数字:pin000'.'dat:可以匹配 pin001.dat ... pin099.dat ... pin999.dat ... pin9999.dat在不带前导零的情况下追加数字:pin'.'dat#:可以匹配 pin.dat1, ... pin.dat9 ... pin.dat999

注意:上面的 . 是格式化字符,必须用单引号括起来。

2. FileToString :读取整个文件内容

2.1 业务背景

在 ToB 系统的业务场景中,经常有厂家需要将原始 JSON 文件数据,用于请求体传参,或者响应体对比等业务场景

2.2 函数说明

把文件读取成一个字符串,每次调用都是读取整个文件。读取文件保存至变量中。

如果出现打开或读取文件的错误,则函数将返回字符串 **ERR**。

2.3 参数说明

字段

描述

是否必传

文件名

需要读取的文件名

yes

文件编码

读取文件的字符集

不传则用系统默认字符集


no

变量名

用于后续调用该函数的变量名称

no

2.4 使用案例

${__FileToString(/opt/metersphere/data/json/15.json,,)}

MeterSphere 接口测试深度数据驱动使用来喽_MeterSphere_05

${__FileToString(/opt/metersphere/data/json/test.csv,utf-8,)}

MeterSphere 接口测试深度数据驱动使用来喽_数据驱动_06

3. CSVRead :从文件读取指定列的值

3.1 业务背景

使用场景变量添加CSV,可以实现读取CSV内容,而且方法更简单,但是它必须搭配循环控制器才能读取到内容,有些测试业务场景也不需要获取到全部内容,只需要获取到指定列的值。可以用 CSVRead 函数读取,是否需要结合循环控制器,适配业务即可。

3.2 函数说明

  • 从一个 CSV 文件中返回一个字符串
  • 当第一次调用该函数时,文件将被打开并读取到一个内部数组中。如果检测到空行,这将被视为文件的末尾。
  • 所有对同一文件名的后续引用都使用相同的内部数组,文件名区分大小写。
  • 每个线程都有自己的指向文件数组中当前行的内部指针。当线程首先引用文件时,它将在数组中分配下一个空闲行,因此每个线程将访问与所有其他线程不同的行(除非数组中的线程多于行)。

3.3 参数说明

字段

描述

是否必传

文件名

要读取的文件名

列号

文件中的列号。0–第一列,1–第二列,next–文件的下一行。

3.4 使用示例

读取文件中的第1行第1列: ${__CSVRead(random.txt,0)}读取文件中的第1行第2列,并进入文件下一行:${__CSVRead(random.txt,1)}${__CSVRead(random.txt,next)}读取文件第2行第1列: ${__CSVRead(random.txt,0)}读取文件中的第2行第2列,并进入文件下一行: ${__CSVRead(random.txt,1)}${__CSVRead(random.txt,next)}

示例描述:接口的请求参数值为 CSV中的第二列。

测试分析:每次获取当前行的第二列,并跳转到下一行,这里的示例搭配循环控制器使用,csv一共4行,第五次循环的时候,获取到的下一行数据的第二列为文件的第一行了

MeterSphere 接口测试深度数据驱动使用来喽_数据驱动_07

4. XPath:使用 XPath 语法匹配 XML文件

4.1 参数说明

字段

描述

是否必传

XML file to get values from

待解析的xml文件 ,绝对路径

yes

XPath expression to match against

xpath表达式匹配xml节点


yes

4.2 使用案例

示例1:

${__XPath(/opt/metersphere/data/json/test.xml,//name)}

MeterSphere 接口测试深度数据驱动使用来喽_接口测试_08

MeterSphere 接口测试深度数据驱动使用来喽_数据驱动_09

示例2:

示例xpath表达式://target[2]/@name

MeterSphere 接口测试深度数据驱动使用来喽_MeterSphere_10

5. StringToFile:将字符串写入文件

5.1 函数说明

  • 在脚本中用 FileOutputStream 也可实现将字符串追加/覆盖到文件中,用函数更简便写。
  • StringToFile函数每次调用它时,它都会将一个字符串附加或覆盖到文件中
  • 函数的默认返回值是空字符串。

5.2 参数说明

字段

描述

是否必传

Path to file (absolute)

文件名的路径。(路径是绝对的)

yes

String to write

要写入的内容

如果需要在内容中插入换行符,请在字符串中使用\n


yes

Append to file (true appends, false overwrites, default true)

字符串的写入方式,true表示追加,false表示覆盖。如果未指定,则默认的append为true。

no

File encoding if not UTF-8

用于写入文件的编码。如果未指定,默认编码为UTF-8。

no

5.3 使用案例

String kong = "${__StringToFile(/opt/metersphere/data/json/aa.txt,${name},false,)}";

如下图在脚本中将变量值覆盖到文件中

MeterSphere 接口测试深度数据驱动使用来喽_MeterSphere_11

此时文件被覆盖为新值

MeterSphere 接口测试深度数据驱动使用来喽_数据驱动_12

这篇文章到这里就结束啦,大家对内容有不同的想法或者关于 MS 不解的问题都可以告诉我 ,评论区见!

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6