jmeter接口测试全流程!csv参数化|断言|接口依赖|多接口批量执行|报告生成|jdbc数据库操作|文件操作

发布时间:2024年01月13日

jmeter基础

目录

jmeter基础

一、jmeter的基础使用详解

常用测试元件

二、jmeter基本接口请求、接口关联操作

1、熟悉接口需求

2、设计接口测试用例

3、编写用例执行接口测试

三、参数化

参数化:每次请求,参数值都是变化的。设置为变量,需要的地方直接引用的。

参数化的方式:用户自定义变量、函数助手、CSV文件配置

引用:${定义变量名},比如

1、用户自定义变量

2、CSV文件配置(数据驱动ddt——Data-Driven Tests)

四、断言

1、响应断言

是最常用的一种断言方法,它可以对各种返回类型的结果进行断言,比如Test、html、application/json等

2、json断言

也是测试工作中经常用到的一种断言方法,它只能针对响应结果是applicaton/json格式的请求进行断言

3、BeanShell断言

BeanShell断言支持各种开发语言,使用BeanShell断言的好处是可以自由发挥,比如当断言失败,提示预期结果、实际结果,或者失败时把结果输出到日志

4、断言持续时间

断言持续时间通常用于做性能测试,一般用于检查HTTP请求的响应时间是否超过预期值。而这个响应时间是性能测试中常关注的一个性能指标。?编辑

五、接口业务关联 依赖处理

Jmeter解决方案:

六、多接口批量执行 多人协作——【模块控制器+测试片段】

测试片段:分模块管理脚本——一个接口一个测试片段

模块控制器:勾选对应的测试片段?编辑

七、接口测试报告

八、jmeter数据库操作

1、配置操作

在线程组中添加一个JDBC connection的配置:配置元件—JDBC Connection Configuration

2、数据库操作——请求

在线程组中添加一个JDBC请求,获取userid

在后续请求中,使用${userid_1}引用

九、文件操作

Jmeter文件上传操作


一、jmeter的基础使用详解

常用测试元件
  • 测试计划:默认

  • 线程组: 并发用户数、并发时间、请求循环次数

  • 采样器: 较常用HTTP请求,JDBC Request、soa/webservice

  • 监听器: 查看结果树、断言结果

  • 配置元件:http请求默认值、HTTP信息头管理器、JDBC Connection Configuration、CSV Data Set Config

  • 断言响应断言(通过对比服务器返回的响应数据,判断请求是否成功)、json断言、BeanShell断言

  • 参数化: 用户定义的变量参数、CSV 文件配置、函数参数化

  • 关联: 后置处理器:正则表达式提取器、json提取器(jsonpath表达式)

二、jmeter基本接口请求、接口关联操作

做接口测试,要熟悉接口需求设计接口测试用例,编写用例执行接口测试(借助工具或代码,脚本设计,本文讨论jmeter工具)

1、熟悉接口需求
  • 对单个接口需要弄懂:

    • 请求4要素:接口地址、请求方法、请求头、请求正文;

    • 响应3要素:http状态码、响应头、响应正文(code、msg、data...重点,判断接口是否通过)

  • 对于多接口要弄懂:接口之间的业务关联

2、设计接口测试用例
  • 用例设计方法(8大方法,等价类、边界值、场景法、错误推测法、正交实验法、状态迁移法、因果图、判定表) === 功能测试用例设计思路

  • 接口用例内容包含:请求4要素,响应3要素信息

3、编写用例执行接口测试

以简单的 【注册账号---登录---充值】 场景为例

1)jmeter对【注册接口】进行接口测试

  1. 直接将请求4要素信息分别填入到jmeter中、用到:【取样器-http请求】、【配置元件-http消息头管理器】

  2. 运行,通过【监听器-查看结果树】查看响应结果 请求内容

  3. 观察 输出实际结果 和 预期结果(接口文档中定义响应)是否一致

2)jmeter对【充值接口】进行测试(接口之间的业务关联??)

??不能充值单接口去跑! 必须依赖登录状态——建立登录成功之后,才能进入充值界面,进行充值操作 ==== 登录鉴权,这里用到token。

  1. 先登录账号,成功后返回token

  2. 充值接口需要携带这个token去进行请求=====》服务器就放行资源

  3. ?怎么获取登录接口返回的token信息?

    ——用到【后置处理器-json提取器】放到待提取的请求下面

    ——填写json表达式 $.data.tokeninfo.token / $..token,变量名定义为user_token

    【图-在结果树中-测试提取表达式】

    【图-json提取器】

  4. 充值接口怎么携带token?通过 ${user_token}引用上述提取的token

    【图-请求头中引用提取的变量】

    【图-请求体中引用提取的变量】

三、参数化

思考:脚本一旦调通,回归测试/性能测试,每跑一次,手机号码字段,都需要更改一次——引入参数化

  • 参数化:每次请求,参数值都是变化的。设置为变量,需要的地方直接引用的。
  • 参数化的方式:用户自定义变量、函数助手、CSV文件配置
  • 引用:${定义变量名},比如
{ 
 ?"mobile_phone": "${phone}", 
 ?"pwd": "${pwd}", 
}

1、用户自定义变量

如下图,

  • 很多接口请求中,存在部分相同的请求信息

    • 例如环境地址:测试环境/预发布环境/发布环境,服务器地址不一样 ,在不同环境下测试,得一个个接口去修改地址---麻烦;

    • 不同测试环境,ip和端口不一样,可以把它定义为变量,作为全局变量,在每个接口的服务器地址栏位置,引用该变量${变量名}

  • 针对注册需要用的手机号,用Random函数产生手机号后8位的随机数,使用的时候拼接上运营商前3位,"mobile_phone": "158${phone}"

    【图-jmeter工具-Random函数-生成表达式】

    【图-添加配置元件-用户定义的变量-可以添加固定值,也可以添加函数表达式】

2、CSV文件配置(数据驱动ddt——Data-Driven Tests)

思考:一个接口,需要正常/异常多用例数据进行测试,得到不同的输出结果。

—— 可以手动每次修改传参的用例数据,然后执行,但效率低。

——可以尝试 CSV文件数据配置+循环控制器

  • 添加【逻辑控制器 - 循环控制器】

    • 控制接口执行次数,用例条数,可以写成固定值——不灵活

    • 自动从CSV文件中读取到多少用例,自动循环多少次---- 可以实现,写代码

  • 添加【配置元件 - CSV Data Set Config】

    • 参数引用 ${变量名} 可以在任意位置引用,比如设置请求名称

四、断言

思考:一个接口,不同用例数据得到不同结果,如何判断测试结果正确性?

——手动测试,凭眼睛一个个请求查看接口返回数据和期望响应是否一致

——jmeter有多种断言方式,自动判断响应结果跟预期的一致性。如 响应断言,json断言,baseshell断言,断言持续时间...

1、响应断言
是最常用的一种断言方法,它可以对各种返回类型的结果进行断言,比如Test、html、application/json等

可以结合数据驱动ddt,把期望响应写在csv用例表格中,在【测试模式】引用期望响应的字段,判断响应文本中是否包含【期望内容】

如:"code":${exp_code},"msg":"${exp_msg}"

断言成功--结果绿色;断言失败-结果红色

断言结果,可以通过结果树查看:断言成功--结果绿色;断言失败-结果红色

也可以添加【监听器 - 断言结果】查看

2、json断言
也是测试工作中经常用到的一种断言方法,它只能针对响应结果是applicaton/json格式的请求进行断言

期望值(断言结果)可以写正则表达式,json表达式,引用变量,常量(比如code字段期望是0)

3、BeanShell断言
BeanShell断言支持各种开发语言,使用BeanShell断言的好处是可以自由发挥,比如当断言失败,提示预期结果、实际结果,或者失败时把结果输出到日志

如果使用包含匹配,只需要修改预期结果即可,预期结果需要写在双引号之间,中间的双引号需要添加\转义,如下:

期望包含:【“code”:0】。java脚本可以写:

String response = "";
String Str = "{\"code\":0"; ? //预期结果,需要校验的字段
?
response = prev.getResponseDataAsString(); ? ?//获取当前请求响应结果
?
if(response == ""){ ?
 ? ?Failure = true; ?
 ? ?FailureMessage = "系统无响应,获取不到响应数据!"; ?
 ? ?log.info(FailureMessage);
 ?  }
else if(response.contains(Str) == false){ ?
 ? ? ? ?//把断言失败置为真 ? 
 ? ? ? ?Failure = true; ? ?
 ? ? ? ?String Msg = "\n系统返回响应结果与期望结果不一致!请排查是性能问题,还是程序代码问题"; ? ? ?     ? ? ? ? ?FailureMessage = Msg + "\n" + "期望结果:\n" + Str + "\n" + "响应内容: \n" + response +"\n"; ? 
 ? ? ? ?log.info(FailureMessage);
 ? ? ?  }
4、断言持续时间
断言持续时间通常用于做性能测试,一般用于检查HTTP请求的响应时间是否超过预期值。而这个响应时间是性能测试中常关注的一个性能指标。

五、接口业务关联 依赖处理

思考:当前接口需要用到前面接口的返回数据,如,充值接口需要用到登录接口返回的token、id等,每次手工操作一遍登录,复制登录的token、id到产品接口传参位置,很麻烦。

Jmeter解决方案:
  • 前置处理 -- 登录接口作为前置,通过json提取器提取token、id

    • json提取器,正则表达式提取器——目前工作中比较常用的

  • 后面接口引用变量--${变量名},也可以在用例里面引用变量如下:参数里面引用${user_id}

  • ??问题:${req_data}请求数据中包含${user_id}--- 变量中嵌套了其他变量

    • 解决办法:Jmeter自带的eval函数 生成——> ${__eval(${req_data})}

    • 工具生成

    • 后续接口请求参数

六、多接口批量执行 多人协作——【模块控制器+测试片段】

大型项目,脚本编写工作是协同工作的,A负责123模块,B负责456模块,分别保存测试片段

测试片段:分模块管理脚本——一个接口一个测试片段
模块控制器:勾选对应的测试片段

七、接口测试报告

报告生成命令:

jmeter -n -t [.jmx文件路径] -l [指定要生成的.jtl文件名] -e -o [最后html报告要保存的路径]
?
jmeter -n -t /Users/.../api_utils/jmeter/jmeter训练营.jmx -l jmeter报告.jtl -e -o /Users/.../api_utils/jmeter/报告

报告:

八、jmeter数据库操作

思考:对于充值接口——每次充值都是新注册——登录——充值——麻烦。用例中需要多个userid ,想从数据库用户表中直接获取!!

另,例如注册,短信验证码! 存在数据库中, 从数据库中获取短信验证码,然后传给注册参数。

——需要操作数据库:1)数据库连接 2)数据库操作-增删改查、 数据库知识、表结构

1、配置操作

在线程组中添加一个JDBC connection的配置:配置元件—JDBC Connection Configuration
  • 项目的数据库信息-找开发:

    • database url : 不同数据库url不一样,百度

      • jdbc:mysql://主机:端口/数据库名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true

    • 注意:驱动--不同数据库驱动不一致,添加驱动jar包;放到jmeter安装目录下的lib目录

2、数据库操作——请求

在线程组中添加一个JDBC请求,获取userid

写sql语句:select id from member where mobile_phone = '${phone}';

获取到的数据保存在userid 数组形式, ${userid_1}

在后续请求中,使用${userid_1}引用

九、文件操作

Jmeter文件上传操作

文件操作接口:

请求体数据——文件名称:绝对路径,路径不要包含中文;文件保证在本地存在的

文章来源:https://blog.csdn.net/weixin_40772077/article/details/135538136
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。