【全栈接口测试进阶系列教程】入门到入职的jmeter接口测试工具实战,接口测试步骤,正则表达式jsonpath,断言,接口加密

尝试在请求中使用生成的随机数,把刚拷贝的字符串粘贴到请求的参数里;

发送请求,查看请求中参数值的情况,参数生效了。

用函数生成当前时间:(__time)

用函数生成通用的唯一识别码:(__UUID)

  1. 文件传参

用于读取在文件中维护的参数,如参数文件内容如下;

注意,Jmeter读取文件总的参数是从第一行就开始了的,千万不要犯下面的错误。

在Jmeter中右击线程组->添加->配置元件->CSV Data Set Config;

打开设置窗口,写入参数文件的全名(含绝对路径),变量名,Delimiter就用默认的逗号,表示在准备参数文件时参数表的列之间用逗号隔开;

在请求中引用参数时应该是酱紫的:${username} ${pwd},用它们来顶替对应的参数值。

  1. 关联传参

在线程组内,当你想用一个请求的响应结果作为另一个请求的入参时就需要用到关联。

用正则表达式关联
思路是先从某个请求的响应数据中提取你需要的值,在把这个值在另一个请求中入参,操作如下:

在需要被提取响应数据的请求下添加正则表达式提取器,右击添加->后置处理器->正则表达式提取器;

在正则表达式提取器中填写 引用名称,不说也知道用途;正则表达式,最简单的办法是在响应数据中把要提取的目标值左右若干字符包含目标值的一行拷贝出来,粘贴到正则表达式框内,在把目标值用一对小括号替换,括号里用添上合适的匹配符本例如(.*); 注意在响应数据中拷贝时尽量避开需要转义的字符如果不能避开,请转义;模板通常固定填 1 1 1;匹配数字1代表区匹配的第一个值;缺省值是在匹配失败时取得的值,通常用来检查匹配是否成功;

用${age}入参给另一个请求,查看结果传参成功。

用Json Path Extractor 插件关联
只针对Json格式的Response 取值,右击请求添加->后置处理器->JSON Path Extractor;

在JSON Path Extractor中填入引用名和JSONPath Expression;

在另一个请求中入参,也和上面的结果一样转参成功。

注意,JSON Path Extractor这个插件只能在Jmeter3.x以上的版本安装。

Jmeter添加断言检查结果

右击请求添加->断言->响应断言;

添加并写入希望在响应结果中看到的内容;

发送请求,查看结果;

Jmeter操作Mysql

测试计划添加.jar包 mysql-connector-java-5.1.7-bin.jar用于使Jmeter可以读取Mysql;

线程组添加 JDBC Connection Configuration (添加->配置元件-> JDBC Connection Configuration)用于配置Jmeter和Mysql的连接;

JDBC Driver class是固定的,Jmeter操作各类数据的Driver参考下图;

线程组添加JDBC Request(添加->Sampler-> JDBC Request) 用于写sql来操作Mysql;

发送请求,成功访问Msql。

六:执行接口测试实战之接口测试业务闭环

Jmeter的接口测试详细步骤并实现业务闭环

这篇文章主要介绍了Jmeter的接口测试详细步骤并实现业务闭环,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

一、首先是了解Jmeter接口测试用到的组件

  • 1、**测试计划:**Jmeter的起点和容器
  • 2**、线程组:**代表一定的虚拟用户
  • 3、**取样器:**发送请求的最小单元
  • 4、**逻辑控制器:**控制组件的执行顺序
  • 5、**前置处理器:**在请求之前的操作
  • 6、**后置处理器:**在请求之后的操作
  • 7、**断言:**判断请求是否成功
  • 8、**定时器:**是否延迟或者间隔发送请求
  • 9、**配置元件:**请求期的配置信息
  • 10、**监听器:**负责收集测试结果

**执行顺序:**测试计划→线程组→配置元件→前置处理器→定时器→取样器→后置处理器→断言→监听器

作用域:
组件会作用于他的同级父级组件,同级组件及同级组件的子组件(可以通过查看结果树来验证作用域,如下图所示)

二、详细流程

**1、配置元件→用户定义的变量:**定义全局变量

2、配置元件→HTTP Cookie管理器

客户端第一次访问服务器,服务器就会生成Cookie,然后通过响应头里的Set-Cookie传输到客户端,然后保存客户端。第2-N次访问服务器时,那么在请求头里面通过Cookie把我们保存在本地的Cookie信息传输到服务器以实现鉴权。
Web的接口测试基本都要加Cookie

3、配置元件→HTTP请求默认值

4、监听器→查看结果树 展示请求的结果

5、右键添加线程组

6、接下来先是登陆接口的测试

简单控制器右键→取样器→HTTP请求

在HTTP请求(登陆请求)右键→后置处理器→Json提取器:这个主要用来提取请求返回结果中需要的数据,下图中设置的就是获取登录的返回值中的token,后并设置变量名为“Authorization”,后面测试别的接口的时候需要调用这个值。

需要验证Json提取器是否起作用,可以通过右键添加取样器Debug Sampler,这样查看结果树中就会展示提取器中获取详细信息。

右键添加→断言→响应断言,在应用场景中的断言包括状态断言和业务断言,状态断言主要用于检测响应的状态是否和预期一致,业务断言测试请求或者响应中返回值是否满足业务需求。
**【状态断言】:**下图为检测响应状态是否为200

**【业务断言】:**下图为测试请求响应中否包含token

通过右键添加→监听器→断言结果,可以查看添加的断言的结果

以上就是Jmeter的登录接口测试的一个正常流程,根据设计的接口测试用例增加请求测试

七:jmeter执行接口测试之接口管理处理(正则表达式和jsonpath)

jmeter实现接口关联的两种方式(正则表达式提取器和json提取器)

Jmeter用于接口测试时,后一个接口经常需要用到前一次接口返回的结果,本文主要介绍了jmeter实现接口关联的两种方式,感兴趣的小伙伴们可以参考

一、前言

在开展接口测试或者是接口面试的过程中,我们会发现很多接口需要依赖前面的接口,需要我们动态从前面的接口返回中提取数据,也就是我们通常说的关联。

关联通俗来讲就是把上一次请求的返回内容中的部分截取出来保存为参数,用来传递给下一个请求使用。

二、使用正则表达式提取器实现接口关联

正则表达式提取器,见名知意就是使用正则表达式的方法把我们需要提取的内容通配出来。

原理:通过左右二边不变的边界来提取中间变的返回值

如上图:需要提取access_token

{“access_token”:“31_qz2HtPalsk5Ey1ToWJaZ6Kaojf8y-BhxTHEmuO111m8_Gc_77HRvMuG4ltbd9gHskqi0XAq8phQys9K8awso4iq-VSr0bArrd-zC-nY0Ltudp-HcPZV7y291YjLYoeJBHW2zhB7-lWYzeTsqFKOhAHANSW”,“expires_in”:7200}

1、在需要获得数据的请求“1.获取access_token” 上右击添加一个后置处理器–>正则表达式提取器

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

正则表达式:()括起来的部分就是要提取的。.代表任意字符,+表示一次或多次,*代表出现任意次。

模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是 2 2 2 3 3 3等等,表示解析到的第几个值给access_token。本处只有1个,所有使用 1 1 1

匹配数字:0代表随机,-1代表所有,其余正整数代表将在检查的内容中,第几个匹配的内容提取出来。

2.在后面的接口中使用${ access_token}引用

3.使用调试取样器检查是否提取成功

添加调试取样器–>运行测试–>通过查看结果树里面的 调试取样器 查看结果

如果你觉得此文对你有帮助,如果你对此文有任何疑问,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入软件测试技术群:695458161,群里发放的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

三、使用json提取器实现接口关联

使用场合:接口关联,当前一个接口返回的数据类型为json格式的数据,需要从返回的json数据中提取数据。

可以将返回的值复制到 www.bejson.com–>json菜单–>json视图–>json数据中,然后点击试图查看,如下图:

json提取器的使用步骤
1.在需要获得数据的请求“1.获取access_token” 上右击添加一个后置处理器–>JSON提取器

Name of created varialies:即下一个请求要引用的参数名称,如填写access_token,则可用${ access_token}引用它。

JSON Path  expressions:填写jsonpath,格式:$. 节点名称   根节点用 “.” 表示

Match Numbers:0代表随机,-1代表所有,其余正整数代表将在检查的内容中,第几个匹配的内容提取出来。

Default Values:找不到时默认值,一般设置为NOT FOUND

Compute concatenation var(suffix_ALL):是否统计所有,即将匹配到的所有值保存,名为“变量名_ALL”

2.替换变量为${ 变量名}

3.使用 调试取样器 检查是否提取到了

四、扩展:返回复杂json数据的提取

如图:{“tag”:{“id”:193,“name”:“newdream20200324”}}

JSON提取器配置如下: $.tag.name

到此这篇关于jmeter实现接口关联的两种方式(正则表达式提取器和json提取器)的文章就介绍到这了

八:jmeter接口测试实战之动态参数处理

JMeter动态参数的定义和调用

一.动态参数使用的条件

比如我们有一个产品管理的系统,我们需要进行API接口测试
这里我们以书籍管理系统为例,进行增删改查接口的测试
当我们添加一本书籍时,系统会自定义给这本书籍定义一个id,当我们后期修改书籍和删除书籍的时候就需要调用这个id,但是这个id不是一个固定的值

这种情况就需要定义一个动态参数,后期使用我们直接调用就可以

二.JMeter和Postman定义动态参数的区别

  • JMeter的动态参数

1、我们先在jmeter的测试工具里面加一个添加的测试用例
2、测试用例添加成功后,发送请求,在响应数据中获取它的动态参数,获取的方式具体为:
     A、在该测试用例中,右键添加后置处理器中的JSON提取器或者是正则表达式提取器
     B、就以JSON提取器为例,定义一本变量,来获取动态参数的值
3、在后续的查看修改删除中,使用到这个动态参数的ID,通过调用变量的方式,具体为:${变量的值}
  • Postman的动态参数

1、我们先在postman的测试工具里面加一个添加的测试用例
2、测试用例添加成功后,发送请求,在响应数据中获取它的动态参数,获取的方式具体为:
     A、在postman的tests里面首先通过JSON.parse(responseBody)获取相应数据
     B、获取响应数据成功后,使用pm.environment.set来定义一个全局变量,变量的值就是获取到的动态参数
3、在后续的查看修改删除中,使用到这个动态参数的ID,通过调用变量的方式,具体为:{{变量名称}}

三.JMeter定义动态参数

在演示的书籍管理系统中,我们添加书籍后系统会自动定义一个书籍id,我们就需要在添加书籍的时候先拿到添加成功后的响应参数,然后在该测试用例下定义bookID

四.JMeter调用动态参数

在修改添加的书籍,查看添加的书籍跟删除添加的书籍时,在请求地址跟断言的时候都需要都调用前面定义的动态参数bookID

九:jmeter接口测试实战之断言(响应断言,json断言,beanshell断言)

所谓断言,就是检查接口的返回是否符合预期。

自动化测试脚本,如果断言做的不好,就好比测试用例不写预期结果,因此我认为断言是最重要一部分。

关于如何做好断言,我觉得要做到:要断言的内容一定是唯一的,每个接口都要做断言
举例

用例:新增一条数据,然后去列表查看新增是否成功。新增数据,如果成功返回数据id,如下:

{
    "id": "63c81f8c-ba80-4504-ac1d-66f3774307b2",
    "msg":"ok",
    "code":0
}

列表数据返回如下:

无数据

{
    "data": []
}

有数据
{
    "data": [
        {
            "id": "63c81f8c-ba80-4504-ac1d-66f3774307b2",
            "name": "zhangsan"
        }
    ]
}

**如何要断言列表中存在我新增的数据?**错误断言:断言data,不管是否存在我们要的数据,返回内容都包含data正确断言:从新增接口提取返回的ID,然后断言ID出现在列表中注意:如果id是自增形式的,建议使用json断言,在这里json断言是首选

实现断言的三种方式
我们首先要把新增接口的id提取出来,用到json提取器,具体配置见下图

JSON断言

json断言配置如下,取出列表所有数据的id看是否存在新增返回的id

关于json断言配置解释,在前面文章已经有介绍。

响应断言

通过响应断言进行断言预期,只需要判断列表数据中出现id,配置如下

关于响应断言配置解释,在前面文章已经有介绍。

Beanshell断言

Beanshell断言在实际运用的比较少,除非是结果需要经过处理后进行断言才用得到,本文为了举例,用Beanshell断言实现我们的目的,配置如下

附上脚本源码

import org.json.*;

//获取上一个请求的返回值
String response = prev.getResponseDataAsString();
//将返回值转换为json
JSONObject responseJson = new JSONObject(response);
//从json提取data数组
JSONArray dataList = responseJson.getJSONArray("data");
//遍历所有列表,判断是否存在id

for(i==0;i<dataList.length;i++){
  JSONObject item = dataList[i];
  if(item.get("id")==${id}){
    Failure = false; 
    FailureMessage = "存在新增的id";
    break;
    }
  else{
    Failure = true; 
    FailureMessage = "不存在新增的id";
    }
  }

补充

假如我们执行删除数据后,我们需要断言不存在于列表
响应断言取反

json断言取反

Beanshell断言读者自己想想如何处理吧!

十:jmeter接口测试实战之接口调试(调试取样器以及结合fiddler调试)

1、jmeter设置http请求-高级-代理服务器-fiddler 的ip和端口

2、fiddler 设置断点

3、设置过滤-只过滤测试服务器请求

4、jmeter请求后,fiddler 可修改接口参数,再继续请求

十一:jmeter接口测试实战之csv数据驱动文件处理

  • 一、前言

最近想慢慢把jmeter的相关元件都用实例实践下,增强下自身的动手能力,切忌眼看手不动。

二、Jmeter 中 CSV 如何参数化测试数据并实现自动断言

**1、项目实例:**测试登录接口

**2、思路:**将每一条用例的预期结果一并保存在csv文档中,循环读取文档中的期望结果,来跟实际运行的结果进行一致性判断,高效实现接口自动化。

3、实例步骤:

1)整理测试数据及预期结果的csv文档

2)CSV测试数据参数化

a.csv数据文件设置

变量名称:CSV文件中的数值存放在变量中,供后续引用。变量可以多个,用英文逗号隔开,变量分别读取CSV文件中的列

b.线程组设置

一般CSV文档中有几条用例,就设置线程数为几

c.登录接口的入参变量引用

这里的变量引用,是前面csv文件设置的变量,所以在接口中可以用${}进行引用

d.设置断言

同上,这里的变量引用,是前面csv文件设置的变量,所以在接口中可以用${}进行引用

e.运行查看结果树

三、Jmeter实现数据驱动测试

1、说明:
  • 数据驱动测试,即是分离测试逻辑与测试数据,通过如excel表格的形式来保存测试数据,用测试脚本读取并执行测试的过程。

大量的测试脚本与测试数据内聚在一起,使得我们的测试脚本的可移植性及可维护性变得很不好,所以我们接下来采取了csv格式表格保存测试数据来驱动测试的方式。

注:个人感觉这种用excel维护的也有点生硬,不过是初学,先记录下来先吧,后续如果技能进阶了,会继续更新哈

2、项目实例:
  • 用Jmeter实现几个接口用例测试

思路:用excel设计好测试用例后,jmeter读取执行

实例步骤:

1)设计测试用例,保存为csv格式

列名分别为:用例编号、接口名称、接口地址、请求方式、测试目的、入参、期望结果

2)设计测试脚本读取csv中的测试用例数据

a.线程组下新增循环控制器,循环次数设置为永远

b. 循环控制器下新增CSV Data Set ConFig控件

c. 添加if控制器,来做判断执行

c.1 判断请求方式为POST则执行POST请求

c.2 判断请求方式为GET则执行GET请求

d. 配置响应断言

e. 执行后查看结果树

十二:jmeter接口测试实战之带请求头的接口测试实战

一、HTTP request(请求)详解

一个 http 请求指从客户端到服务端的请求消息,我们可以通过浏览器的F12键,可以看到以下信息:

  • 请求地址:uri
  • 请求方法:HEAD、GET、POST、PUT、OPTIONS、DELETE、PATCH
  • HTTP协议/版本:大家可以自己打开浏览器按 F12 去仔细查看

  • 请求头

  • 请求参数:

通过工作经验总结,我们可以得到以下几点:

请求方法:即http请求的提交方式,一般以get和post居多URI:请求资源的标识,可以理解为一个请求的路径信息协议:http协议

版本: 1.1

请求正文:请求参数

请求头:告诉服务器关于客户端环境和请求正文相关的一些信息,例如浏览器版本,请求参数的长度

请求头详解

User-Agent:告诉服务器客户端的相关信息(如果是浏览器会有版本,内核等信息)referer:告诉服务器,此请求是从哪个页面上发出来(防盗链)

X-Requested-With:告诉服务器这个是一个ajax请求

Cookie:带给服务器的cookie信息

请求头可以在代码中指定,添加,通过键值对的形式,调用:addHeader (Stringname,String value)即可在请求对象中添加一个名字为name,值为value的请求头。

二、HTTP response 详解

一个http response (http响应)指的是从服务端到客户端的响应消息,它包括了以下信息:

  • 响应状态码
  • 响应头
  • 响应报文

总结:

  • 响应状态码:标记响应状态的一个标识,200-响应成功,404-资源找不到,500服务器异常,302-重定向等
  • 响应头信息:告诉客户端关于服务器,响应报文相关的一些信息,例如,服务器类型,响应报文格式
  • 响应报文:针对请求从服务响应回来的数据,比如html、 xml、json等
响应头详解

“set-Cookie”这个响应头的作用是告诉浏览器需要缓存的 cookie 数据。如果对于 cookie 不太明白的同学,可以去这个博客下面看一看这篇文章:

其他几个比较常见的响应头,大家也可以适当了解学习下:

  • location:告诉浏览器跳到哪里。
  • content-length:告诉浏览器回送数据的长度。
  • content-type:告诉浏览器回送数据的类型

十三:jmeter接口加密(md5,base64等)

jmeter通过base64加解密&MD5加密

准备jar包#

通过jmeter函数进行base64加解密#

加密#

${__base64Encode(需加密的文本,)}

解密#

${__base64Decode(需解密文本,)}

通过beanshell进行base64加解密#

直接上代码

import java.io.*;
import org.apache.commons.codec;
import sun.misc.BASE64Decoder;

log.info("------------开始加密-------------------");

String encryption = new sun.misc.BASE64Encoder().encode("hc_staging".getBytes());

vars.put("encryption", encryption);

log.info("加密后的值------->>"+encryption);
log.info("------------加密结束-------------------");

log.info("------------开始解密-------------------");
org.apache.commons.codec.binary.Base64 base64=new org.apache.commons.codec.binary.Base64();
String decrypt=new String(base64.decode("aGNfc3RhZ2luZw=="));

vars.put("decrypt",decrypt);

log.info("解密后的值------->>"+decrypt);
log.info("------------解密结束-------------------");

通过jmeter函数digest进行MD5加密#

${__digest(MD5,需加密文本,,,)}

JSR223 实现python加解密#

Jmeter 中BeanShell 中支持JAVA语言,可以使用Java来辅助我们实现一些逻辑,如果我们不会写Java怎么办,比如使用比较熟悉的语言例如Python(目前对于测试人员来说Python属于普及的语言)来代替实现一些代码逻辑。

介绍Jmeter 执行Python代码,首先我们需要来先介绍下JSR,因为这个过程的实现与他密切相关。

JSR 简介#

JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。

我们了解了什么是JSR以后我们下面需要在Jmeter中使用JSR223标准来执行我们自己的Python代码

Jmeter JSR223 Sampler#

Jmeter JSR223 支持的语言#

Jmeter 基于JSR223标准 支持使用多种编程语言编写脚本程序,默认使用Groovy,默认是不支持Python语言,我们需要通过Jpython来扩展Jmeter对Python语言的支持

Jmeter 扩展Python语言支持#

下载jython

Downloads | Jython

把下载的jython-standalone-2.7.2.jar 放到 jmeter的lib/ext文件夹。重启jmeter,此时就可以看到支持Python语言

Jmeter 配置JSR223 Sampler#

添加JSR223 Sampler#

选择实现逻辑的语言

实现MD5加密#

import hashlib
# 定义密码
password = "admin"
# 对密码进行md5加密
m = hashlib.md5()
m.update(password .encode(encoding="utf-8"))
password = m.hexdigest()
# 存储value到变量key
vars.put("password",password)

Base64加解密#
import base64 # base64加密法 能加密,也能解密

s = '123456'
b = base64.b64encode(s.encode())
result1 = b.decode()
print(result1) # 加密base64
# 存储value到变量key

c = base64.b64decode('MTIzNDU2') # .b64decode() 解密
result2 = c.decode()
print(result2)
vars.put("result1",result1)
vars.put("result2",result2)

十四:jmeter接口测试实战之beanshell内置变量和语法规则

一、什么是beanshell

BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;

BeanShell是一种松散类型的脚本语言(这点和JS类似);

BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k;

BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。

jmeter中关于beanshell的有:

1.BeanShell Sampler 取样器:完成Beanshell请求组件中定义的脚本功能;

2.BeanShell PostProcessor 后置处理器:可通过编程方式获取对应请求的响应结果;

3.BeanShell PreProcessor  前置处理器:可通过编程方式在发起请求以前做预处理,比如编码或者加密;

4.Beanshell 断言:可通过编程方式实现复杂的断言逻辑;

5.Beanshell 计时器:编码实现条件定时功能;

6.BeanShell Listener 监听器:监听Beanshell运行结果;

BeanShell前置处理器、BeanShell取样器、BeanShell后置处理器,它们之间的区别:

1、BeanShell前置处理器和后置处理器 比 BeanShell取样器多一个重置解释器(Reset Interpreter),意思是指:对于每一次处理是不是都要进行重置;

2、在JMeter中BeanShell取样器是当成线程处理的,所以运行时是有一定的消耗的,而使用BeanShell前置处理器/后置处理器总体来说比BeanShell取样器消耗低,相当于少起一个线程。

在JMeter运行的流程控制中,BeanShell出现的位置,如下图所示:

二**、BeanShell常用的内置变量**

Beanshell有一些默认的内置变量,用户可以通过这些变量与jmeter进行交互,其中主要的变量及其使用方法如下:

**log:**打印日志,写入信息到jmeter.log文件,帮助调试脚本;

常用方法:

log.debu(“调试信息”)

log.info(“响应状态码” + ResponseCode)

log.warn(“警告信息”)

log.error(“出错信息”)

**vars:**操作jmeter变量,生成、更新、获取当前脚本的jmeter变量;(只能在同一线程组内传递);

常用方法:

a) vars.get(String key):从jmeter中获取变量值;如,user是变量,vars.get(“user”);

b) vars.put(String key,String value):数据存到jmeter变量中;

更多方法可参考:org.apache.jmeter.threads.JMeterVariables

**props:**操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。 (可在整个测试计划中跨线程组传递)

常用方法:

a) props.get(“START.HMS”); 可以获取JMeter中已经生成的属性----注:START.HMS为属性名,在文件jmeter.properties中定义 
   b) props.put(“PROP1”,“1234”); 可以创建和更新JMeter属性。

**ctx:**获取当前线程上下文,可获取当前线程的请求信息和相应信息(可以获取http请求和响应的所有数据);

常用方法:

ctx.getVariables(“变量名”):获取变量值(同vars.get())。

ctx.setVariables(“变量名”, “变量值”):设置变量(同vars.put())。

ctx.getProperties(“属性名”):获取属性值(同props.get())。

ctx.setProperties(“属性名”,“属性值”):设置属性(同props.put())。

ctx.getPreviousResult():获取当前请求结果同(prev)。

ctx.getCurrentSampler():获取当前采样器。

ctx.getPreviousSampler():获取前一采样器。

ctx.getThreadNum():获取线程数。

ctx.getThreadGroup():获取线程组。

ctx. getThread():获取当前线程。

ctx.getEngine():获取引擎。

ctx.isSamplingStarted():判断采样器是否启动。

ctx.isRecording():判断是否开启录制。

ctx.getSamplerContext():获取采样器山下文数据。

使用方法可参考:org.apache.jmeter.threads.JMeterContext

**prev:**获取当前请求的结果,或者说是获取前面的sample返回的信息;

常用方法:

a) getResponseDataAsString():获取响应信息

b) getResponseCode() :获取响应code

十五:beanshell调用java和class文件

背景:
由于需要传较复杂的json串作为变量到请求参数中使用,在使用自带的csv data setconfig时会将json串截断。此路不通

一、于是想到通过引入jar包的方式,通过beanshell脚本来调用,获取变量值。 步骤: 1、使用ide ,新建一个maven工程 2、新建类,编写方法,读取excel文件,并根据变量获取相应的值
package com.ai;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
/**
 * author:xiaxi
 * date:2022-8-23
 * 获取文件中的selecotr值
 */

public class ReadSelectorCSV {

    public static String result(String filePath, int i)
    {
        String line ="";
        List<String> csvResult = new ArrayList();

        try {

            BufferedReader reader = new BufferedReader(new FileReader(filePath));
            while ((line = reader.readLine()) != null) {
                csvResult.add(line);
            }

        } catch (Exception e) {

            e.printStackTrace();

        }
        System.out.println(csvResult.get(i).replace("\\\"\"", "\\\""));
      // return  StringEscapeUtils.unescapeJava(csvResult.get(i));
        return csvResult.get(i).replace("\\\"\"", "\\\"");

    }

 public static void main(String[] args) {

        `在这里插入代码片`try {
            int i ;
            String filePath = "C:\\Users\\EDY\\Desktop\\grpc\\windows_selector.csv";
            String line = result(filePath,1);
        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

package com.ai;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
/**
 * author:xiaxi
 * date:2022-8-23
 * 获取文件中的selecotr值
 */

public class ReadSelectorCSV {

    public static String result(String filePath, int i)
    {
        String line ="";
        List<String> csvResult = new ArrayList();

        try {

            BufferedReader reader = new BufferedReader(new FileReader(filePath));
            while ((line = reader.readLine()) != null) {
                csvResult.add(line);
            }

        } catch (Exception e) {

            e.printStackTrace();

        }
        System.out.println(csvResult.get(i).replace("\\\"\"", "\\\""));
      // return  StringEscapeUtils.unescapeJava(csvResult.get(i));
        return csvResult.get(i).replace("\\\"\"", "\\\"");

    }

 public static void main(String[] args) {

        `在这里插入代码片`try {
            int i ;
            String filePath = "C:\\Users\\EDY\\Desktop\\grpc\\windows_selector.csv";
            String line = result(filePath,1);
        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

测试通过后,生成Jar包

1、jar包名自己指定
2、需要指定mainclass
3、需要创建:manifest文件:
4、生成成功后在out目录下会有jar包

Manifest-Version: 1.0
Main-Class: com.ai.ReadSelectorCSV

在这里插入图片描述 二、生成完jar包后,可双击检测及通过解压工具确定是否正常 ,jar包内的文件是否可正常 展示,通过cmd命令,运行一下jar包,查看是否能正常使用

在这里插入图片描述

如上图表示jar可正常使用。

三、在jmeter中调用 jar包,将jar包入到apache-jmeter-5.5\lib\ext 中,此方法不需要在测试计划中添加jar包引入。 添加BeanShell Sampler: 如下图: import 语句:包名+类名 调用方法直接使用:类名.方法名

在这里插入图片描述

在这里插入图片描述

通用调试后,将变量放在请求中直接调用:

在这里插入图片描述

十六:jmeter接口测试实战之jdbc数据库查询

jmeter 使用JDBC 连接数据库查询数据,并提取
提前准备:

1、数据库 的IP+端口+ 登录的账号和密码

2、数据库jdbc连接jar包

JDBC连接jar包

开始操作了!!!!! ** 3、复制jar包所在路径,黏贴到jmeter的测试计划的 library

添加jdbc连接jar包到测试计划

4、右键线程组添加配置元件。 连接数据库,填写IP+端口+库名 ——+登录账户与密码

右键添加配置元件

连接数据库

5、右键线程组添加jdbc请求

右键添加JDBC请求

6、使用sql查询语句查询数据库数据

sql查询语句查询数据库数据 7、如果报错“Cannot load JDBC driver class ‘com.mysql.jdbc.Driver’”没有找到jdbc连接驱动。则手动添加jar包到jmeter安装目录的lib目录里,再在 测试计划,点击 “浏览”添加该jdbc连接jar包

在这里插入图片描述

8、运行命令——从数据库成功查询出结果+从数据库查询出想要的数据

9、使用 正则表达式提取数据传给下个接口使用

使用正则表达式提取数据

十七:jmeter接口测试实战之beanshell实现数据库查询断言

接口测试大部分都使用接口的响应值作为接口验证的依据,但在与数据库有交互的接口中这种结果判断不足以判断接口的正确性,本文将以jmeter作为接口测试的工具来实现接口的数据库断言

一、总体思路概述

  • 使用jmeter发起接口请求
  • 使用json提取器获取接口响应结果中的关键内容
  • 使用jmeter发起数据库操作,得到数据库的值
  • 使用BeanShell断言,实现接口响应内容和数据库内容的对比

二、jmeter发起接口请求

以搜索接口为例,业务需求为:通过关键字搜索商品。接口信息如下:

接口信息:

输入参数:

返回结果:

根据以上接口信息在jmeter中添加http 请求,如下图

三、针对接口请求添加json提取器

添加json提取器是为了获取接口响应中所有name,用来和数据库中查到的name值进行一一对比

1.添加json提取器

选中搜索请求–添加–后置处理器–json提取器

2.设置json提取器

各项参数解释:

1. Names of created variables:表示json提取器从响应中获取到的内容所存储的变量,随便定义只要不冲突即可,建议起一个有意义的名称,不要写成abc毫无意义的名称

2. JSON Path Expressions:json提取的表达式,表示需要按照这个规则从响应中匹配内容,图中表达式表示匹配响应中的所有name字段对应的值

3. Match No. (0 for Random):匹配结果存储到变量的策略,默认什么都不写就是0

  • 0表示随机一个存储的变量中,比如我们匹配了多个name字段的值,那么会随机将其中一个     值赋值给Names of created variables指定的变量
  • -1表示使用数字后缀标识每一个匹配的结果,比如我们匹配了多个name字段的值,那么最终每一个结果都会对应一个变量,变量名称则是name_1、name_2、name_3、name_4 …
  • X表示把第几个匹配到的值赋值给Names of created variables指定的变量,比如写个2,那么就会把匹配到的第2的name字段的值赋值给name
  • Compute concatenation var:表示如果匹配到多个值,可以将多个值存储在一个变量中,变量名为Names of created variables指定的变量名称加_ALL,比如当前图中就是name_ALL,存储的多个值以,分割
  • Default Values:表示如果json表达式没有匹配到任何值,那么变量的默认值是啥

四、配置数据库发起数据库请求

以mysql数据库为例

1、配置数据库连接元件

配置数据库所需要的jar包,下载mysql-connector-java.5.1.46.jar,可以直接在maven上进行下载,下载地址<a href=“https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.46” h"=“”>https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.46

下载好以后放入jmeter目录下的lib/ext目录下,然后重启jmeter

配置jdbc元件,选中线程组–添加–配置元件–JDBC  Connection  Configuration

核心字段含义

  • Variable Name for created pool:表示该连接配置的名称,这个名称将会在后续的jdbc请求中使用
  • Dabase URL:表示数据库实例的连接地址
  • JDBC Driver class:表示连接驱动类
  • Username:表示连接数据库实例的用户名
  • Password:表示连接数据库实例的密码
2、数据库请求,请注意该请求需要放在查询接口请求之前

选中线程组–添加–取样器–JDBC Request

核心字段含义

  • Variable Name of Pool declared in JDBC Connect Configuration:表示要连接的数据库配置名称,与我们上面配置的一致
  • Query:填写sql语句,这里我们是查询商品表,通过name字段模糊查询,并且只返回了name字段
  • Result variable name:表示从数据库中查到的内容存到哪个变量里,这里写变量名称

五、脚本调试

1.添加调试取样器,用来查看各个变量的值是否正确

选中线程组–添加–取样器–调试取样器

2.添加察看结果树,用来查看请求结果

选中线程组–添加–监听器–察看结果树

3.执行测试,查看各个变量的值是否正确

六、使用Beanshell 断言完成接口结果和数据库结果的校验

选中搜索请求–添加–断言–BeanShell 断言

执行整个脚本,执行通过,脚本全貌如下

十八 :jmeter代理服务器实现脚本录制

Jmeter中有两种方法可以录制脚本,但笔者一向不喜欢把简单的事情复杂化(安装badbody麻烦,就不介绍这种方法了),那么自然就选择通过Jmeter代理来录制脚本。下面讲讲具体的脚本录制步骤:

1、打开Jmeter,选择【测试计划】,鼠标右击,依次【添加】->【Treads(Users)】->【线程组】,添加一个线程组。

2、选择【工作台】,鼠标右击,依次【添加】->【非测试元件】->【HTTP代理服务器】,即可以添加上HTTP代理服务器。

3、对“HTTP代理服务器”进行设置,分别设置端口(如:8899),目标控制器(如:测试计划->线程组),以及分组(如:Put each group in a new transaction controller),其他为默认值。


介绍下各设置项:
端口:代理服务器的端口,默认为8888,可自行修改,但不要与其它应用端口冲突。
目标控制器:录制的脚本存放位置,通常都选择为测试计划中的线程组。
代理服务器:对请求进行分组。将一批请求汇总分组,可以把url请求理解为组。下面分别说明各选项:
1)不对样本分组 :所有请求全部罗列。
2)在组间添加分隔 :加入一个虚拟的以分割线命名的动作,运行同“不对样本分组”,无实际意义。
3)每个组放入一个新的控制器 :执行时按控制器输出结果。
4)只存储每个组的第一个样本 :对于一次url请求,实际很多次http请求的情况,这里只存储第一个请求。这个选项很实用,常常我们是不关心后面的那些请求的。
5)Put each group in a new transaction controller :将每个组置于新事务控制器中,通常我们都选择该项。
记录HTTP信息头:录制request的head信息。
HTTP Sampler settings:http请求的实现包版本以及具体协议类型。
Content-type filter:请求类型过滤器 1)Include 包含xx  2)Exclude 不包含xx
包含模式:通过过滤只录制指定的内容,如正则表达式:.*.php 。
排除模式:过滤掉我们不要录制的内容,如:.*.gif 。
4、在HTTP代理服务器中点击启动。
可能遇到的问题:当启动时出现提示“Root CA certificate:ApacheJMeterTemporaryRootCA created in JMeter bin directory”
解决办法:在【Internet选项】->【内容】->【证书】中,点击导入“Jmeter安装目录/bin下的证书 ApacheJMeterTemporaryRootCA.crt”即可,然后再重新启动HTTP代理服务器。如果导入证书后,仍然提示,可以不用理会了。这里是提示我们要加上对应的证书,否则后面不能进行脚本录制。
5、启动HTTP代理服务器后,打开浏览器(IE,Firefox,Chrome等),添加代理,地址填写本机ip或localhost,端口填写上面设置的代理端口(8899),在浏览器中进行正常网页浏览,即可录制下对应的http请求。IE上的设置:

6、当录制完后,停止HTTP代理服务器即可。这样,一个脚本就录制成功了。可以进行断言,参数化了。

十九:执行基于微服务架构的dubbo协议接口测试实战

微服务介绍

如图所示:

服务器通过中间层分解,将系统拆分成很多小应用(微服务),微服务可以部署在不同的服务器上,也可以部署在相同的服务器不同的容器上。其RPC代表框架有 Spring cloud、Dubbo 、Thrift、grpc。

微服务之间的调用叫做远程调用RPC(remote procedure call)

Dubbo介绍:

是一款高性能、轻量级、基于java的开源RPC框架。

Dubbo接口测试

方法一:启用telnet,Telnet(用的较少) 配置Telnet

连接语法:telnet IP 端口号 (win+r cmd 输入telnet IP 端口号 按两次回车 出现dubbo 就成功了)

用ls- 查看项目中有哪些服务
调用接口的命令格式:

invoke 服务名.方法名(参数)

举例:invoke MemberService.findByTelephone(“13020210001”) 出现以下结果

方法二:python借助dubbo进行接口调用 (常用)

(1)首先是环境配置 终端里面安装pip install dubboclient 并用pip list检查是否安装成功

(2)使用dubboclient发送请求

1、导包 (固定语法 dubboclient类)

from dubboclient import DubboClient

2、创建DubboClient类实例,指定IP和端口

dubbo_client(dubbo_client为创建的变量名) = DubboClient(“ip”, 端口)

3、使用 实例调用invoke()方法 传入:服务名、方法名、实参(方法使用)。获取响应结果

resp(响应结果) = dubbo_client.invoke(服务名, 方法名, 参数)

4、打印响应结果

print(f"响应结果:",resp)

二十:非gui方式运行以及jmeter+ant+jenkins接口自动化持续集成

一、简介

本文章主要是介绍接口自动化持续集成环境搭建以及测试实例,Apache JMeter是Apache组织开发的基于Java的接口和性能测试工具。

Apache Jmeter是一个100%的纯java桌面应用,主要是针对web的压力和性能测试,但后来扩展到其他测试领域。Jmeter可以用于测试FTP、HTTP、RPC、JUNIT、JMS、LDAP、WebService(Soap) Request以及Mail和JDBC(数据库压力测试)。

二、集成环境搭建

1、安装JDK:

由于jmeter是100%的纯java编写的,需要有java的运行环境,所以我们需要安装jdk,官网链接:Java Downloads | Oracle(版本要求:最好是1.8以上)

1.1、下载jdk:

1.2、安装jdk:Java SE 8u191

1.3、配置jdk环境变量

我的电脑”>鼠标右键菜单>“属性”>“高级系统设置”>“环境变量”。

a、在系统变量里新建“JAVA_HOME”变量,变量值为:D:jdk1(注:具体路径根据自己实际安装路径填写)

其为jdk的安装路径

b、新建“classpath”变量,变量值为:.;%JAVA_HOME%lib;%JAVA_HOME%lib ools.jar;%CATALINA_HOME%lib;

其为java加载类路径,只有类在classpath中java命令才能识别,在路径前加了个"."表示当前路径

c、在path变量里添加变量值:%JAVA_HOME%in;%JAVA_HOME%jrein(注:变量值之间用“;”隔开)

1.4、在命令窗口输入Java -version,可以查看到jdk版本说明安装正确。

2、安装Jmeter:

2.1、下载Jmeter:官网地址:Apache JMeter - Download Apache JMeter

解压就可以用,前提条件是必须是已经安装jdk,

2.2、插件下载:官网地址:Install :: JMeter-Plugins.org

插件下载后解压:找到JMeterPlugins-Extras.jar,把JMeterPlugins-Extras.jar放到apache-jmeter-2.12libext目录。

2.3、配置环境变量

具体操作位置同刚jdk一样,把jdk的java_home相应的换成jmeter的地址即可。

我的电脑”>鼠标右键菜单>“属性”>“高级系统设置”>“环境变量”;

JMETER_HOME=D:Auto_Testapache-jmeter-5.0(注:具体路径根据自己实际安装路径填写)

CLASSPATH=%JMETER_HOME%libextApacheJMeter_core.jar; %JMETER_HOME%libjorphan.jar;

PATH=%JMETER_HOME%in

2.4、启动jmeter 在命令窗口输入jmeter或者在 apache-jmeter-2.12injmeter.bat启动 (打开后的命令窗口不能关闭,否则jmeter的GUI也不能使用)

两种方式都能够成功启动说明jmeter安装成功

3、安装Ant:

Ant是一个代码构建工具,在这里主要作用是为了构建我们写的jmeter脚本,然后再后面安装Jenkins上可以持续集成监控到我们的脚本情况。

3.1、下载Ant,官网下载地址:Apache Ant - Binary Distributions

3.2、配置Ant环境变量

具体操作位置同刚jdk一样,把jdk的java_home相应的换成jmeter的地址即可。

ANT_HOME=D:Auto_Testapache-ant-1.9.13(注:具体路径根据自己实际安装路径填写)

PATH=%ANT_HOME%in

CLASSPATH=%ANT_HOME%lib

3.3、验证Ant是否安装成功

在命令窗口输入ant,出现下面提示说明安装成功,还可以通过ant -version查看ant版本。

4、安装Jenkins

jenkins是基于java开发一个持续集成工具,在这是用于我们监控我们跑jmeter写的接口测试用例。

4.1、安装jenkins,官网地址:Jenkins download and deployment

4.2、配置jenkins

通过在浏览器访问localhost:8080/jenkins既可以进入到jenkins页面(后面加了jenkins后访问不不了,是bug,直接去掉jenkins,如果你的8080端口没有被占用的话)

初始的管理员密码,jenkins自动生成的,根据上面红色的路径找到密码,拷到下面的输入框中。

然后弹出安装jenkins插件的页面,如果出现无法自动安装插件,查看是否有防火墙和网络,实在不行得通过离线方式进行安装,我这是在线自动安装的。

接下来是创建用户和密码。

三、Python开发http接口(这个可以不关注)

一般公司接口测试,开发会提供明确的接口文档,包含接口地址、请求方式、入参、出参等以及各个返回值的对应的含义。

具体开发不做详细介绍哈,有兴趣的朋友可以一起探讨下。

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值