接口测试工具jmetet之参数化、关键、断言

接口测试-知识点

1: Jmeter的参数化

2: Jmeter正则表达式(关联)

3: 断言

 

前期提要:

接口分类:内/外部、类型/协议: http soap(webservice)

接口数据格式: xml json

请求方式: getpost区別?   历史文章;

 

jmeter:测试计划、线程组、请求(http soap jdbc)、查看结果树

soap请求:soapui辅助自动解析类和方法,body+ 请求头

jdbc请求: url driver class,添加lib目录驱动jar

 

 

 

一、参数化

---先设置一个变量将值传入变量,对变量进行变量引用

1、参数化的三种方式(必问)

jmeter中,通过${变量名}来获取参数值。

方式1-用户定义的变量

方式2-函数助手中的函数获取参数值Random函数_RandomString函数

方式3-配置元件CSV Data Set Config

 

--详解--

1)用户定义的变量

实例:前程带项目中有注册、登录、充值三种接口,其中都包含手机号这个参数,如果要使用jmeter跑注册、登录、充值的流程,那么每一次要经历一个流程时,每个请求都需要改参数手机号的值吗?

思路:我们可以将手机号这个参数单独拿出来,单独只修改变量这一个地方就可以

解决:添加用户定义的变量

步骤①:线程组右键添加-->配置元件-->用户定义的变量

 

出现如下设置页面后

 

输入名称、值;

♦注意:名称(变量名)可以自定义设置

步骤②然后将设置后的变量名称,在注册、登录、充值请求中进行参数化引用${phone}

♦注意:引用的参数名用户定义变量设置的名称必须保持一致

 

登录请求中手机号

 

步骤点击运行,查看结果树,显示成功

 

 

 

 

 

 

 

♦注意:考虑哪些可以使用固定一样的值

 

 

2)函数助手中的函数获取参数值Random函数_ RandomString函 数

实例:模拟多个用户注册,需要用到不同用户信息注册,要求手机号不重复,但不需要手机号真实存在,该怎么做?

思路:设置随机的手机号作为注册接口的测试用例,手机号假设固定号段为189,那么剩下的8位使用随机函数生成

解决:使用函数获取参数

步骤①选择菜单栏 选项-->函数助手对话框

 

弹出函数助手框,功能下面有多个函数可供选择,我们主要看下__RandomString,其他可以自行了解下哟

步骤②要进行多个账号注册(比如10个用户),注册信息要求手机号mobilephone不能重复;所以可以这么来思考,手机号前3位号段固定,那就对手机号后8位进行随机,页面设置如下:

 

步骤③拷贝生成的函数字符串,粘贴进行参数引用

 

步骤④设置线程组线程数为10,模拟10个虚拟用户的注册

 

步骤⑤点击运行,查看结果树,显示成功

 

看到数据库中插入了10条以189开头的随机的手机号的数据

 

♦注意:密码不建议随机,因为密码加密了,随机后就不知道加密后是什么内容,除非对密码有特殊要求,一般密码都一样

♦注意:如果号段不一样就不能使用这个方法

 

3)配置元件CSV Data Set Config---文档参数化,用法多,用处大

实例:模拟多个用户注册,需要用到不同用户信息注册,若需要注册的手机号不能随机,必须是用户真实提供的手机号进行注册的话,该怎么做?

思路:提前收集数据放入一个文件中,读文本进行导入数据;提前收集用户真实手机号及昵称,存放在本地txt或者CSV文件(CSV文件默认逗号隔开)

♦注意:尽量使用TXT,CSV格式,使用其他格式比较容易出问题

♦CSV文档---类似于Excel,后缀为csv

 

 

解决:创建信息文本,使用CSV Data Set Config进行获取

步骤①创建数据

 

步骤②线程组右键添加-->配置元件-->CSV Data Set Config

 

填写信息

 

参数解释:

●Filename:需要传入文件的完整路径。是绝对路径,要加上后缀

●File encoding:参数文件的编码格式。可以不填。若果是TXT,CSV格式可不做额外设置

●Variable Names:对应参数文件中每列的变量名,也是你要引用到请求中的参数变量名。这里第一列是手机号、第二列是昵称。变量名可以自定义。

igonre first line(only used if Variable Names is not empty): CSV 文件中首行设置了变量名时,该项设为 true,此时每次请求读取文件时会自动忽略首行,直接读取第二行的数据。若首行未设置,则选择False

●Delimiter:文件中的分隔符,默认英文的逗号分隔。所以注意txt文档中每行多个参数用英文逗号分隔。

●Recycle on EOF: 设置为True后,允许重头循环取值;为False,当读取文件到结尾时,停止读取文件

●Stop Thread EOF: Recycle on EOF为false并且Stop Thread EOF 为true,则读完csv文件中的记录后,停止运行,线程数及执行次数无效。

●Sharing Mode:共享模式。All threads:所有线程,所有线程循环取值,线程1取第一行,线程2取下一行;Current thread group:当前线程组,各个线程组分别循环取值;Current thread:当前线程,该测试计划内的所有线程都取第一行。

 

步骤③使用CSV Data Set Config中定义好

a、直接参数化引用

 

b、通过函数助手进行参数化引用

 

 

 

步骤④设置线程组中线程数为10,执行后,输出如下结果:成功

♦注意:如果文档中数据小于10,会对文档一直循环读取,一般登录会如此,循环登录

 

数据中结果

 

注意:测试注册接口细节,可以将用例数据写入文档,进行一次性运行

 

接口测试时可以这么去设计,把数据准备好,接口测试需要准备很多数据,先跑正常流程,再针对细节参数去测试,将数据准备好,放入脚本,工具跑数据,jmeter是手动测试,但不完全是,半自动。

参考:https://www.cnblogs.com/tudou-22/p/9197992.html

附加了解:

1)如何设置循环次数。

2)根据参数化设计测试用例以及测试点。

3)这些元件都是有作用域的,看放在哪里,就对它的兄弟和兄弟下方的子集有作用,元件可以进行拖动

作用域---放在测试计划下,针对所有线程有效--全局

 

二、正则表达式提取器

1、关联

关联概念:两个请求,上一个请求的响应结果,作为下一个请求的传入

关联运用的场景:下一个请求的参数值是变化的------关联--至少涉及2个请求

 

实例:接口测试过程中,发现登录后去进行充值,但是充值会提示请登录?不是先做了登录吗?

充值没有权限(充值需要先登录,没有检测到登录信息),跳转到登录页面,地址被重定向

 

参考:https://www.cnblogs.com/nickjiang/p/9148136.html

2、页面重定向问题:

 

要确保是一个用户登录,并确保登录用户是同一个用户,jsessionid就像一个通行证,必须要登录后才有jsessionidcookies一直在变化,每次登录不一样

 

当服务器收到这个请求的“Cookie”请求头里的会话id去服务器匹配,判断是同一个session会话,会话中有登录用户的信息,从而判断这个请求是一个登录用户发出的,从而放行这个请求。

思路:登录后的jsessionid,登录状态没有传给充值接口,找到这个参数做一个参数传递

解决:设置一个HTTP Cookie 管理器

步骤①线程组右键添加-->配置元件-->HTTP Cookie 管理器

注意:添加一个后对所在区域都有效(此时是在这个线程组下方有效),设置后会自动获取当前的Cookie信息,自动传递所在区域有需要的请求

 

步骤②点击运行,查看结果树,显示成功

 

对比:

未添加

 

有添加

 

注意:有两个请求从上到下

 

3、关联方式

      Jmeter中的关联是通过添加一后置处理器一正则表达式提取器来获取数据,传给后面的请求使用。

      正则表达式:常见的形式(.+?)

      模板:$$引用起来,如果是多个提取表达式,则可以是$1$$2$等匹配数字: 0随机,1代表所有,通常取0

      缺省值:如果返回结果中没有匹配的值,则变量的值采用默认值。

注意:正则表达式放在请求的后面,数据从查看结果树的响应数据获取。从接口请求的响应结果中获取;或者数据库中获取

 

实例:接口测试过程中,发现登录后去进行充值,但是充值会提示请登录?不是先做了登录吗?不使用HTTP Cookie 管理器的情况下,怎么解决?

思路:不使用HTTP Cookie 管理器,从上一个请求的结果中取值,

解决:添加正则放在要请求的子集,相当于提取,不放

步骤请求右键添加-->后置处理器-->正则表达式提取器

 

步骤②填写正则表达式内容

 

说明:

  1)引用名称:下一个请求要引用的参数名称,如填写title,则可用${title}引用它。

  (2)正则表达式:一般值的名称(键)是不会发生改变的。要获取特定的数据,都会结合不变的内容(左右边界),然后将需要提取的服务器数据替换为(.*?)即可。

注意:上一个请求(如登录)的结果中提取关键词jsessionid,和它前后的字符,以便jmeter去查找到关键词jsessionid,需要传递部分使用()先括起来,在()中间写正则表达式/匹配表达式,左边界( )右边界

 

():括起来的部分就是要提取的。

    .:匹配任何字符串。

    +:一次或多次。

    ?:不要太贪婪,在找到第一个匹配项后停止。

  (3)模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值,$N$:表示将第N对括号的值赋给参数。

  (4)匹配数字:该处可以填写的是正整数N,数字0,负数三种,0代表随机取值,1代表全部取值,通常情况下填0

  (5)缺省值:如果参数没有取得到值,那默认给一个值让它取。

 

注意:要检查字段要选择对应,结果不对的话,请每个都做尝试

学习/测试要抱有试错、专研精神!!

步骤③请求右键添加-->后置处理器-->Debug PostProcessor

Debug PostProcessor是常用的一个调试工具

 

 

4:正则表达式

正则表达式概念:匹配内容的一个表达式。error.log ==查找==结果包含: rerror.logerror.log(结果:模糊匹配/完全匹配)

1.常用的元字符

代码

说明

.

匹配除换行符以外的任意字符

\w

匹配字母或教字或下划线或汉字

\s 

匹配任意的空白符

\d 

匹配数字

^

匹配单词的开始或结束

$

匹配字符串的开始

2.常用的限定符

代码/语法

说明

*

重复零次或更多次

 重复一次或更多次

?

重复零次或一次

(n) 

 重复n

(n,)  

重复n次或更多次

(n.m) 

 重复nm$匹配字符串的结束

元字符:用来匹配相关字符

限定符:限定元字符匹配的次数

如何判断你自己的正则表达式是否正确?可以在线去检验一下。

参考:http://tool.oschina.net/regex/ 30分钟入门正则表达式

♦注意:作为测试人员不需要了解太深,万能表达式  .*? .*  

注意:在需要的地方做变量引用

 

步骤④引用变量

 

步骤⑤点击运行,查看结果树,显示成功

 

 

 

问题?

1、正则表达式有多个值?怎么获取?

2关联拓展:登录--->用户member-jdbc请求----->获取用户所有投递记录(参数memberid

 

 

5:Jmeter断言----可以看成检查点----预期

通过添加——断言——响应断言;

还需添加监听器——预言结果,才能在执行后查看断言结果是否正确

 

如果请求成功了,那么断言结果就会正常显示的接口,否則会报错,显示红色。

 

断言结果

每个请求添加断言,然后直接查看结果---测试主流程

 

 

添加完响应断言,需要添加断言结果来判断断言是否成功。

 

posted @ 2020-07-31 10:07  小正哥  阅读(358)  评论(0编辑  收藏  举报