运用jmeter做接口与性能测试

接口概念

不同单元或某块之间进行通信的通道,他有一套规范一套标准(数据与数据之间的交互)(遵循既定规则,比如百度搜索的wd)接口规范会预定到文档,称之为api文档

接口的作用

项目开发中,未采用接口时的缺点

1、研发标准不统一,团队磨合难度高

2、研发周期短

3、可扩展性差

使用接口时带来的优点

1、统一设计标准,更易于团队磨合

2、缩短研发周期

3、扩展性灵活

4、前后端都可以使用自己熟悉的技术,只需保证最终产出符合规范即可

接口测试的概念

跨过前段,直接测试后端实现是否符合接口规范

作用

1、更精准的定位bug

2、发现程序中的安全隐患

3、提高测试效率(项目越复杂越明显)

 接口测试流程

1、定位接口资源

2、提交测试数据

3、查看响应结果

接口测试类型

1、Web接口测试(b/s)

* 服务器接口测试

* 外部第三方接口测试(别人的接口)

2、模块之间的接口测试(c/s)

安装XXX系统

安装接口测试环境必须要在XXXX当前目录下执行依赖程序代码(XXX系统的安装依赖模块:pip install -r XXXX.txt)

当前目录下使用python启动命令(启动命令:python run_server.py)

浏览器输入url:http://127.0.0.1:8000/api/XXX

数据库文件

使用第三方的数据库文件,将数据库要使用的数据文件放到文件中,查看表的结构

RESTful架构风格

RESTful架构风格:接口设计架构风格,对API文档规范作用,保证API文档的易读性(一人编写,多人阅读)

三要素:定位接口资源、提交测试数据、查看响应结果

Post方法和get方法区别

1、提交方式不同(get提交的数据显示在地址栏,post时隐藏式的提交数据,后者更安全)

2、提交的数据量不同(get方法提交的数据量有限制,post没有)

3、执行效率不同(get方法要比post高)

4xx开头的基本上都是浏览器的资源请求错了(浏览器异常)

1xx开头的请求正常,服务器响应正常,浏览器无法正常显示(杜绝出现)

接口响应类型

1、响应html文档,如访问百度首页

2、响应JSON数据,比如学生管理系统响应的数据

实现

请求方式    定位资源   提交的数据                            响应的数据

查  URL+DET         一般键值对提交数据                   响应码200 响应体:单条或多条查询信息

增  URL+POST       一般键值对或者JSON提交数据     响应码201或200 响应体:新增后的数据

改  URL+PUT         一般键值对或者JSON提交数据     响应码201或200 响应体:修改后的数据

删   URL+DELETE  一般键值对提交数据                    响应码204 响应体:无

Jmeter

作用

1、接口测试

2、性能测试

3、压力测试

4、web自动化测试

5、数据库测试

6、java程序测试

优点

1、开源、免费—>支持二次开发

2、跨平台

3、支持多协议

4、小巧—》50兆 不需要安装

5、功能强大

缺点

1、不支持ip欺骗

2、使用jmeter无法验证JS程序,也无法验证页面ui,所以要需要和Selenium配合来完成Web2.0应用的测试

组件与元件

组件:Jmeter中的功能点实现

元件:Jmeter中组件众多,为了方便管理,对于组建按照功能、性质分类归组,分组的结果就是元件,换言之,元件是组件的集合

进程、线程组、线程:一个进程包含多个线程组,一个线程组可以包含多个线程

进程:正在运行的程序

线程:进程中的执行线索

线程组:为了方便线程管理,对线程按照性质、作用,归类分组。

并发执行:多个线程同时执行

顺序执行:多个线程顺序执行

线程组的作用

1、方便管理线程

2、可以通过一系列属性控制线程的执行

实现(重点)

线程组的执行顺序及层级结构

测试计划(进程)------------------- 线程组---------------------线程

      |                                               |

勾选每个线程组独立执行         多个线程组是并发执行

      |

多个线程组按顺序执行(先执行线程组1、然后线程组2.。。。)

线程组常见属性设置

线程数:如果设置成5,说明这个线程组有5个线程

Ramp-up时间(秒):如果设置成15,5个线程会在15秒内执行完成,每个线程执行间隔时间是均匀的3秒

循环次数:如果是2,当前5个线程会执行2次,相当于5个用户访问了两次。

               如果勾选永远,会一直执行,死循环,点击stop停止

调度器:使用调度器,建议循环次数勾选永远。

持续时间:如果设置成5,所有线程持续执行5秒

启动延迟:如果设置成3,所有线程在3秒后执行

特殊线程组setup线程组和tearDown线程组

 setup线程组:最先执行

tearDown线程组:最后执行

http请求默认值

当多条请求有相同请求内容可以通过http请求默认值封装起来,这样就不用在请求中重复编写了,可以提高脚本的编写效率。

例如:可以封装http协议、IP地址、端口号、编码集

Jmeter参数化

动态的获取、设置或生成数据,以程序驱动代替人工驱动的数据设计模式

作用提高脚本的编写效率和编写质量

四种实现方案:四种方案是互补的,我们可以根据参数化具体场景,选择实现方案

A、jmeter参数化之用户定义的变量

当http默认请求值无法封装资源路径下的相同部分,则可以使用用户自定义的变量设置

如:/api/XXX/—查、/api/XXX/T011/—改中的/api/XXX/部分则可以使用用户自定义的变量设置

B、jmeter参数化之CSV数据文件设置

Csv文件:都还分搁值,是一种简洁且常见的数据储存格式,储存语法如下

T001,葫芦山,大娃,救爷爷

T002,西游记,猴哥,救师父

T003,水浒传,武松,救大郎

Csv文档中,一行对应着一条信息,一条信息的不同字段使用英文,分隔

☑️实现思想:

1、使用Jmeter编写学院新增脚本模板<-----(写)------ 3、中间件关联程序与数据 ------(读)------> 2、使用csv文件储存测试数据

C、jmeter参数化之用户参数

与csv是基本一样的,使用组件-用户参数,如果想用户循环数据,需要设置线程数为3。

D、jmeter参数化之函数

第一步:方式一、打开函数助手对话框小图标

            方式二、从程序选项里添加函数助手对话框

            方式三、ctrl+shift+f1

第二步,生成所需函数

第三步,在需要添加函数的地方末尾加上生成的函数

常用函数

__counter(计数器函数):参数true:每个用户都独立拥有一个计数器;falus:所有线程公用一个计数器

__Random (随机数函数):参数1、一个范围的最小值

                  参数2、一个范围的最大值

例:参数1:1

    参数2:10

则函数在1-10之间随机生成数字

__time(时间函数,生成当前时间):返回的是时间的毫秒值,距离1970/01/01 00:00:00的毫秒数

格式化设置:参数1:yyyy/MM/dd hh:mm:ss

A、直连数据库

作用:可以见接口响应的结果与直连数据库响应的结果做对比,判断接口实现是否符合预期

       较之于人工访问数据库,更加高效快捷

实现:Jmeter不具备直连数据库,需要第三方jar包

B、断言:让程序代替人工判断响应结果是否符合预期

2、作用

1、更安全

2、更高效

3、功能更强大

实现:

响应断言=断言状态码和响应体(code(Equals)+body(substring))

大小断言=判断响应内容的字节长度(size)

断言持续时间=响应时间

接口业务测试之逻辑控制器

逻辑控制器

控制取样器执行顺序的组件实现,之前添加的取样器是无差异的都执行,使用逻辑控制器之后,可以控制取样器的执行顺序(分支+循环)

作用:

组织业务,测试接口业务(逻辑)

举例:测试登陆业务,如果登陆成功,那么访问页面,有分支实现,就需要使用逻辑控制器

实现

1、如果(if)控制器 == 分支实现

2、forEach控制器 == 循环往复实现

3、循环控制器 == 循环往复实现(循环频率)

如果(if)控制器 == 分支实现

步骤:

1、搭框架,测试计划,线程组,结果树,声明一个用户定义的变量

2、核心:添加if控制器,子级添加取样器(和之前实现不同,控制器和取样器存在父子级关系)

3、执行并查看结果

forEach控制器 == 循环往复实现

步骤

1、搭框架,测试计划,线程组,结果树,声明一个用户定义的变量,存储一组数据

2、核心:添加forEach控制器,子级添加取样器(和之前实现不同,控制器和取样器存在父子级关系)

3、执行并查看结果

循环控制器 == 循环往复实现(循环频率)

步骤

1、搭框架,测试计划,线程组,结果树

2、核心:添加while控制器,子级添加取样器(和之前实现不同,控制器和取样器存在父子级关系)

3、执行并查看结果

思考

线程组属性可以控制循环次数,那循环控制器有何作用?

两者控制精度不一样,循环控制器更好

关联:上一个请求的结果作为下一个请求的参数

xpath提取器

步骤:

1、搭框架,编写两个请求,传智播客+百度搜索

2、核心:取出传智播客页面源码的title值

3、传递给百度${变量名}的方式传值

正则表达式

如“dep_name”:”(.*?)”(如果不加?就是贪婪式提取,会提取到最后一个)

模版$1$,调用第几个正则表达式就写几

匹配数字,响应调用第几个包裹的字段就写几

步骤

1、搭框架,编写两个请求,传智播客+百度搜索

2、核心:从学院查询结过中通过正则表达式提取学院信息

3、传递给百度${变量名}的方式传值

跨线程组关联

1、线程组一的正则表达式出来的函数,想要在其他线程组中使用,需要使用函数_ setProperty导出到公共空间,相当于postman中设置环境变量

_ setProperty参数一:属性名称:out

参数二:正则表达式提取的变量用${myname}形式填写

2、添加专门组件beanshell取样器导入函数

在使用传参的线程中使用_Property函数

线程中传参应该是函数生成的变量

可以通过属性显示元件查看到处的变量

跨线程组关联与组内关联有啥区别?

区别变量的作用域不一样

Jmeter性能测试

性能测试:模拟各种正常的,峰值的测试环境,检测程序的各项性能指标是否能够达标

作用

1、技术选型

2、测试当前程序所能支持的最大负载

3、发现程序中性能的瓶颈,提高资源的利用率。有助于提高优化

4、提升用户体验

……

实现

同时100个同时访问学生管理系统,统计高并发情况下平均响应时间以及错误率(高并发)

步骤

1、搭框架,线程组,去延期,结果树(局限性),指定线程组的线程数属性值为100

2、核心:怎样实现100个用户同时访问?添加定时器的synchronizing time(集合点组件)

3、运行查看结果

运行过程

阶段一:启动后,并不会马上访问服务器,而是创建线程且打包(耗时)

阶段二:打包完毕批量执行

结果查看

聚合报告

同步定时器

属性1、打包同步执行的用户数

属性2、超时时间以毫秒为单位,当总用户数不能整除并发用户数,设置此属性,当超过这时间则剩余用户继续会被执行

常量吞吐定时器

QPS:query per seconds每秒查询数的查询率,每秒访问多少次服务器

属性一、公式QPS*60

分布式实现

架构:

控制机:负责任务分配

执行机:负责任务的执行

工作流程

1、控制机需要指定测试任务,并下发到执行机

2、执行机执行任务并将结果返回到控制机

3、控制机做结果汇总

演示

前提:分布式环境已经搭建完毕了

1、控制集群(控制机、执行机)

控制机:ApacheJmeter.jar

执行机:jmeter-server。bat

2、编写策四计划

线程数=总线程数/执行机台数

3、将测试计划下发到执行机(执行机会将结果自动返回给控制机)

如何分布式远程启动

1、执行机需要配置的端口号(server_port=1099)

2、控制机需要配置执行机的ip和端口号(格式,ip:端口号#remote_hosts=localhost:1099,localhost:2010)

3、无论控制机还是执行机都得设置远程访问相关属性:

将Jmeter配置信息server.rmi.ssl.disable=true

总结

作用域:组件和控制器在添加位置的作用范围

执行顺序

不同组件都有预定义的执行顺序(和添加位置无关)

各元件之间的执行顺序

1、配置元件  -两头

2、前置处理器 -核心

3、定时器 -核心

4、取样器 -中间

5、后置处理器 -核心

6、断言 -核心

7、监听器 -两头

先两头,再核心,最后中间

接口测试流程

步骤

1、指定测试计划,分配任务

2、从api文档中提取接口清单

3、设计测试用例并参数化覆盖测试用例

4、编写脚本的实现,并导入设计的测试数据(csv数据文件设置)

5、测试结果汇总,bug提交

项目实现之功能测试

功能测试:逐一测试所有接口,测试中模拟用户的多样性操作提交各种测试数据

1、覆盖所有的必选参数

2、组合可选参数

3、参数边界值

4、越界的数值

5、如果参数的取值范围是枚举变量,需要覆盖所有枚举值(性别,排序方式)

6、空数据

7、包含特殊的字符(敏感词汇)

8、错误数据(重复id,错误的数据格式、非法的常量值)

参数化覆盖测试用例

根据测试用例设计的数据类型,设计具体的测试数据,逐条设计,逐条覆盖

测试脚本编写

1、编写脚本模版

2、使用csv储存测试数据

路径使用相对路径

编码集UTF-8无BOM

关联脚本与数据

1、解析csv文件

2、将数据设置进脚本模版

3、设置循环次数

生成测试报告

逐条比对,找出与文档不符的数据,提交bug

项目实现之自动化测试

在新版本会加入新功能测试原有的功能(接口是否受影响),是否正常运行

设计原则

1、只需要测试重要的或者被重复调用的接口

2、只需设计正向用例

3、自动化脚本可以重复执行

4、一个线程组只设计一个取样器,方便单个接口测试

步骤

1、选择被测试的接口

2、分析应用组件

性能测试设计原则

1、线程组:增删改查每一个功能点,都需建立单独线程组,而避免在同一个线程组内添加多个取样器

2、参数化:参数化尽量避免采用外部读取参数(csv组件),而是使用前缀_函数生成测试数据

3、查看结果树:必须清除单个接口内或线程组内的查看结果树,建议一个测试计划就一个结果树

4、报告:性能报告可根据实际需求选择,建议保留添加聚合报告

5、分布式:如并发数量大,采用分布式测试

6、新增/修改/删除:建议不要采用时间模式(集合点、QPS…)来压测,直接使用线程数和循环

JMeter图形化生成报告

命令:jmeter -n -t  脚本文件 -l  hello.txt  -e  -o  目录

注意,日志文件和目录必须为空

-n 无图形化

-t 被运行的脚本

-l 将运行信息写入日志文件

-e 生成测试报告

-o 指定报告输出目录

接口测试流程

指定接口测试计划

从API文档提取接口清单

设计测试用例,并且参数化覆盖测试用例

编写脚本,并导入用例

执行并结果比对,生成测试报告

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/522513.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

粉嘟嘟的免费wordpress模板

粉色好看的wordpress免费模板&#xff0c;用免费wordpress模板也可以搭建网站。 https://www.wpniu.com/themes/11.html

七彩虹@电脑cpu频率上不去问题@控制中心性能模式cpu频率上不去@代理服务器超时@账户同步设置失败

文章目录 windows电脑cpu频率上不去新电脑的系统时间问题系统时间不准造成的具体问题举例代理超时vscode同步请求失败自动校准时间 windows电脑cpu频率上不去 问题描述,标压处理器的笔记本,cpu频率上不去 如果cpu没问题的话,就应该是系统限制了功耗导致的有的笔记本有控制中心…

WordPress建站入门教程:如何创建菜单和设置前端导航菜单?

前面我们跟大家分享了WordPress如何上传安装WordPress主题&#xff0c;但是启用主题后前端没有看到有导航菜单&#xff0c;这是因为我们还没有创建菜单和设置导航菜单。 JianYue主题导航菜单和右上角菜单 今天boke112百科就继续跟大家分享WordPress站点如何创建菜单和设置前端…

基于SVM模型的网络入侵检测模型训练与评估(NSL-KDD数据集)

简介 针对网络安全领域的NSL-KDD数据集进行分类任务的预处理和模型训练、以及超参数调优。 数据预处理 读取并解析数据集&#xff1b;检查并删除指定列&#xff08;outcome&#xff09;的缺失值&#xff1b;对类别型特征&#xff08;protocol_type, service, flag&#xff0…

13 OpenCv自定义线性滤波

文章目录 卷积算子示例 卷积 卷积是图像处理中一个操作&#xff0c;是kernel在图像的每个像素上的操作。Kernel本质上一个固定大小的矩阵数组&#xff0c;其中心点称为锚点(anchor point) 把kernel放到像素数组之上&#xff0c;求锚点周围覆盖的像素乘积之和&#xff08;包括锚…

JavaWeb——015 Maven高级(分模块设计与开发、继承与聚合、私服)

Maven高级 目录 Maven高级1. 分模块设计与开发1.1 介绍1.2 实践1.2.1 分析1.2.2 实现 1.3 总结 2. 继承与聚合2.1 继承2.1.1 继承关系2.1.1.1 思路分析2.1.1.2 实现 2.1.2 版本锁定2.1.2.1 场景2.1.2.2 介绍2.1.2.3 实现2.1.2.4 属性配置 2.2 聚合2.2.1 介绍2.2.2 实现 2.3 继承…

IP定位技术在金融风控中的应用研究

随着金融科技的快速发展&#xff0c;金融行业的风险也呈现出多样化、复杂化的特点。金融风控作为保障金融安全的重要手段&#xff0c;其面临的挑战也日益加剧。在这样的背景下&#xff0c;IP定位技术作为一种先进的信息技术手段&#xff0c;正逐渐成为金融风控领域的重要工具。…

STM32day3

1.思维导图 1.总结任务的调度算法&#xff0c;把实现代码再写一下 /* Definitions for myTask02 */ osThreadId_t myTask02Handle; uint32_t myTask02Buffer[ 64 ]; osStaticThreadDef_t myTask02ControlBlock; const osThreadAttr_t myTask02_attributes {.name "myTa…

spring对IOC的实现

Ioc控制反转 控制反转是一种思想。 控制反转是为了降低程序耦合度&#xff0c;提高程序扩展力&#xff0c;达到OCP原则&#xff0c;达到DIP原则。 控制反转&#xff0c;反转的是什么&#xff1f; 将对象的创建权利交出去&#xff0c;交给第三方容器负责。将对象和对象之间关系…

硬盘温度过高会怎么办?机箱温度多少算正常?

硬盘温度 硬盘在使用过程中&#xff0c;断电很容易导致数据丢失&#xff0c;但如果温度过高&#xff0c;也可能对硬盘造成损坏。 硬盘的温度是决定电脑能否正常使用的重要因素。 如果长时间读取和存储数据&#xff0c;硬盘的温度会升高。 那么&#xff0c;硬盘的正常温度是多少…

代码随想录day16 栈与队列:前 K 个高频元素(leetcode347)

题目要求&#xff1a;给定一个非空的整数数组&#xff0c;返回其中出现频率前 k 高的元素。 思路&#xff1a;我们需要使用map来统计整个数组中元素出现的频率&#xff0c;然后再根据统计好的频率去排序&#xff0c;取得频率前K高的元素。我们不必使用快排实际上我们使用优先级…

Open CASCADE学习|表面着色显示模型

模型表面着色具有如下作用&#xff1a; 视觉增强&#xff1a;通过为模型表面添加着色&#xff0c;可以使其更加生动和逼真&#xff0c;提高视觉体验。 信息区分&#xff1a;在复杂的模型中&#xff0c;不同的部分或组件可能需要通过不同的颜色来区分&#xff0c;以便更清晰地…