- 博客(49)
- 收藏
- 关注
原创 JMeter做性能测试教程及测试结果分析
4.由于一些请求需要有特定参数才能完成请求,比如查看数据的接口需要先登录获取token后再进行操作,我们可以先使用json提取器提取登录接口中返回的token,再添加HTTP信息头管理器来存放这一部分参数(依具体情况而定,我的token是放在请求头中传参的)在上一步创建的线程组上,新增http请求默认值,所有的请求都会使用设置的默认值,这设置协议为http,IP为服务器ip地址,端口为自行设置的端口值,一般为8080,这里我本地的端口设置为5002。端口不填时默认:80,我们可在请求中修改参数等。
2024-07-02 10:53:10
894
原创 性能测试-Jmeter中IF控制器使用
(1)新建if控制器,根据mode的值进行不同的请求。执行测试计划,可以看到,后面一个请求没有执行,是因为请求1执行完之后,flag的值变成N了,不满足第二个if控制器的条件。重新定义一个用户变量flag,值为"Y",新建两个if控制器,勾选Evaluate for all children。条件控制器,通过某个条件控制节点下的元件是否运行,只能作用于其下的子项,条件为假,则节点下请求/元件不执行。把第一个请求的请求地址写错,请求失败,请求2也没有请求。条件为True,请求成功。
2024-03-20 15:11:24
1350
原创 Jmeter-基础元件使用(二)-属性及对数据库简单操作
进入官网https://dev.mysql.com/downloads/connector/j/,选择:Platform Independent。点击Download,解压后找到jar文件,将文件放到lib目录的ext目录下即可。当我们想要在不同线程组中使用某变量,就需要使用属,此时Jmeter属性的设置需要函数来进行set和get操作。添加JDBC Request请求,编写SQL语句,使用参数化。我们可以看到,id由第一个线程组传入并作为参数在第二个线程组的请求中使用。添加线程组,设置线程组的次数。
2024-03-20 11:05:45
532
原创 性能测试-Jmeter常用元件基础使用
忽略状态:请注意这里是复选框,因为我们的断言有响应码自动判断机制,如果我们需要判断响应码为非200状态,我们需要将其勾选防止报错。或者:当存在多个测试模式时,默认为and(当全部满足才通过断言),如果勾选这里相当于or(存在一个满足就通过断言)否:当存在多个测试模式时,默认为and(当全部满足才通过断言),如果勾选这里相当于!: 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;.*匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来。
2024-03-15 17:26:14
1010
原创 性能测试-理论篇
基准测试狭义上指单用户测试,采用单用户测试在某一固定场景下进行测试并得到具体数据,以该数据作为基准和后续测试数据进行对比。2.性能测试主要是针对产品的执行速率,占用资源,并发量,最大可承受执行次数等多方面进行测试并判断是否满足产品需求。那么我们就需要测试在该功能崩溃情况下,是否能在较短时间内恢复该功能的正常运行/接口调用无异常。负载测试:是指一段时间内,在高负载的情况对于资源的消耗,是否会存在资源耗尽问题。并发测试是在极短的时间内,发送多个请求,判断是否出现资源争夺导致的异常情况。
2024-03-15 11:20:18
665
原创 测试人员简单使用Jenkins
当多个版本并行时,开发人员可以通过拉去不同的分支进行开发,从而保证多个版本开发测试互不干扰。2.填写开发分支,测试人员可通过相应分支进行测试环境的构建部署。1.Repository URL:填写git地址。配置成功后,点击Build Now,开始部署。一、测试人员使用jenkins干什么?一般由开发人员进行具体配置。
2023-08-04 15:53:38
1697
原创 redis工具使用
1.点击Connect to Redis Server,新建一个redis连接。官网下载:https://redisdesktop.com/download。Auth:如果redis服务器设置密码需填写,没有设置可不填。安装成功后点击finish。之后就可以打开软件进行操作了。点击Test Connection测试连接。2.Name:连接名,随便取一个就可以。自己选择路径,点击install安装。Host:填写redis服务器的ip。port:redis服务器的端口号。
2023-07-18 15:49:52
3051
原创 浏览器输入一个url地址后的完整过程
例如:我们要解析www.baidu.com1、首先,浏览器会搜索自己的DNS缓存2、如果没有,则搜索操作系统的DNS缓存3、若没有,则搜索操作系统的hosts文件4、若没有,则操作系统将域名发送至 本地域名服务器(递归查询方式),本地域名服务器 查询自己的DNS缓存,查找成功则返回结果,否则(以下是迭代查询方式)4.1 本地域名服务器 向根域名服务器(其虽然没有每个域名的具体信息,但存储了负责每个域,如com、net、org等的解析的顶级域名服务器的地址)发起请求,此处,根域名服务器返回com.
2021-09-07 14:35:52
332
原创 token,cookie,session
首先,我们都知道http是一个无状态协议,比如说我们要使www.zhihu.com/login.html和www.zhihu.com/index.html关联起来,就必须使用某些手段和工具。一、cookie和session由于http的无状态性,为了使某个域名下的所有网页能够共享某些数据,session和cookie出现了。客户端访问服务器的流程如下:首先,客户端会发送一个http请求到服务器端。服务器端接受客户端请求后,建立一个session,并发送一个http响应到客户端,这个响应头,其中就包含
2021-08-24 17:15:34
149
原创 Linux权限修改命令学习
su或su root后输入密码切换为root用户ls -rtl:根据时间排序显示-l:列出文件详细信息 ll-a:列出当前目录下所有文件,包括隐藏的llls -a权限修改3.1 chmod:123为文件名数字法:r=4,w=2,x = 1chmod 776 123 将123文件的user,group。other权限改为rwx,rwx,rw-加减法:u/g/o +/-/= r/w/xchmod g+w 123 将123文件的group组的权限增加了一个.
2021-08-17 16:50:00
669
原创 Putty使用
我们远程连接操作linux的工具有很多。Putty也是其中一个,它所占内存小,操作简单方便,默认登陆协议是SSH,端口号为22,支持SSH、Telnet、Serial等协议的连接。其中最常用的是SSH。1.下载地址:https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html2.其界面如下所示:3.简单使用1.输入所连接虚拟机的会话名2.点击save保存当前会话名3.之后就可以在Default Settings选择需要连接的虚拟
2021-08-17 09:39:54
136
原创 Linux之systemd命令
在linux上开发时,往往需要将自己的程序做成服务,并且实现服务开机自动重启,以及服务崩溃后自动重启功能,他的实现方法很简单,使用linux系统的systemd即可实现。systemctl是 Systemd 的主命令,用于管理系统。对于用户来说,最常用的是下面这些命令,用于启动和停止 Unit(主要是 service)。apache.service为软件服务名# 立即启动一个服务$ sudo systemctl start apache.service# 立即停止一个服务$ sudo syste
2021-08-11 12:01:51
224
原创 Day2
一、MySQL 临时表MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。用查询直接创建临时表的方式:CREATE TEMPORARY TABLE 临时表名 AS(SELECT * FROM 旧的表名LIMIT 0,10000);二、MySQL 复制表步骤一:获取数据表的完整结构。SHOW CREATE TABLE book1 \G;步骤二:修改SQL语句的数据表名,并执行SQL语句。
2021-08-08 11:51:39
85
原创 索引
一、索引MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。1、普通索引创建索引CREATE INDEX indexName ON table_name (column_name);显示索引信息SHOW INDEX FROM book1
2021-08-08 10:47:20
60
原创 MYSQL中ALTER命令
当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。1、删除,添加或修改表字段删除表字段(如果数据表中只剩余一个字段则无法使用DROP来删除字段)show columns from book;alter table book drop name;show columns from book;添加表字段①默认自动添加到数据表字段的末尾ALTER TABLE book ADD i INT;②指定新增字段的位置FIRST (设定位第一列)ALT
2021-08-08 10:20:37
5566
原创 Day1
1、MySQL 的 WHERE 子句的字符串比较是不区分大小写的。 我们可以使用 BINARY 关键字来设定 WHERE 子句的字符串比较是区分大小写的。SELECT * from book WHERE BINARY b_author=‘Bob’;2、LIKE 子句:们将 book表中获取 b_author 字段中以b为结尾的的所有记录SELECT * from book WHERE b_author LIKE ‘%b’;3、连接的使用INNER JOIN(内连接,或等值连接):查询结果
2021-08-07 21:49:29
68
原创 面试题:电梯/雨伞/杯子/笔/A4纸/纸杯… 怎么测试?
一、目的:面试的时候,面试官经常会随意指定生活当中的一件物品,问你如何测试,作为测试人员,电梯/雨伞/杯子/笔/A4纸/纸杯… 怎么测试?二、如何分析:(重点)以下以拉杆箱为例来给大家讲:1.那么首先,你应该反问面试官,需求是什么样的,比如测什么样的拉杆箱,大小?材质?品牌?2.如果回答是没有,那么你接下来的思路是:没有需求文档,但我了解拉杆箱的基本业务功能,以此为依据,从下面几个方面进行分析:功能测试(单个功能、逻辑业务/功能交互)、界面测试、易用性测试、兼容性测试、安全性测试、性能测试三、具
2021-06-29 21:50:50
805
原创 递 归
递归算法重点:递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。例如:我们要求6的阶乘6的阶乘可以表示为6!=65432*1public class Digui { //利用代码计算5的乘阶 public static void main(String[] args) { System.out.println(jieCheng(6)); } //递归实现
2021-06-29 10:22:02
63
原创 abstract
1.abstract以修饰类或方法。2.abstract 类可以扩展(增加子类),但不能直接实例化。abstract 方法不在声明它的类中实现,但必须在某个子类中重写。3.abstract 关键字不能应用于 static、private 或 final 方法,因为这些方法不能被重写,因此,不能在子类中实现。4.抽象方法:有方法名的定义,没有实现,(只定义了能做什么,没定义怎么做) 抽象方法的好处是允许方法的定义和实现分开。public abstract class Animals {
2021-06-24 21:22:53
107
原创 接口测试学习笔记(一)
1.工具:postman接口:例如前后端进行信息交互的一个通道软件的结构:前端(app,web),后端抓包:抓取网络上的数据包通过代理实现交互。浏览器上的抓包工具:Google(network),打开快捷键Fn+F12XHR一般为接口.取到的数据返回至前端2.接口的组成(1)接口状态URL(接口地址),Method(接口类型)----->get,postStatus Code(状态码)—>200(代表这个接口运行正常),400(接口发送的参数不正确),404(U
2021-06-22 22:29:06
140
原创 linux基础命令学习(二)
4.Vim文本编辑器i:在当前光标位置进入插入模式esc:回到正常模式: 进入命令模式w:写入文件q:退出q!:不保存退出wq:保存并退出(1)文本与文件查找grep命令:能使用正则表达式搜索文本,并能够把匹配的行打印出来。默认情况下只搜索当前目录常用格式: grep [选项] ”模式“ [文件]grep “gcd” *.txt:在所有txt文件中查找包含gcd的语句–color :将匹配到的内容以颜色高亮显示。-A n:显示匹配到的字符串所在的行及其后n行,after
2021-06-21 22:02:40
93
原创 linux下解决网卡配置问题
已经遇到过好几次网卡出现问题的情况,关键每次出现问题的原因都不一样,记录一下。第一次出现问题是因为网卡配置的问题输入命令"ip addr",查看IP地址,可以发现这里的网卡信息并不完整输入“vi ifcfg-ens33”或“vi /etc/sysconfig/network-scripts/ifcfg-ens33”编辑网卡文件,有时候会出现因为权限不够而无法编辑文件的问题,通过“su root”切换至管理员身份下再编辑配置文件即可。TYPE="Ethernet"PROXY_METHOD="n
2021-06-21 20:04:16
1046
原创 DQL、DML、DDL、DCL
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。1.数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE组成的。SELECT <字段名表>FROM <表或视图名>WHERE <查询条件>2 .数据操纵语言DML数据操纵语言DML主要有三种形式:(1) 插入:INSERT(2) 更新:UPDATE(3) 删除:DELETE3.数据定义语言DDL数据定
2021-06-21 09:53:18
97
原创 linux基础命令学习(一)
linux1.帮助命令help :help help,ls –help( --help一般是Linux命令自带的帮助信息 )。man :man ls,同ls --help。2.文件与目录管理(1)文件与目录查看ll:查看当前目录下文件权限,名称,创建时间,文件名等详细信息ls:显示当前目录下文件名ls -l:与ll相同作用ls -t:文件按创建的时间(从近到远)排列显示ls -a:显示隐藏文件ls -r:文件逆序显示(2)路径操作cd:进入指定路径cd var/tmp/:进入
2021-06-17 22:35:32
135
原创 堆排序
堆排序是一种不稳定的排序算法。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆 。堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了得到大顶堆:这里用到了递归的思想。一直调用toHeap()方法,直到堆完全变成大顶堆
2021-06-12 00:31:13
160
2
原创 基数排序/桶排序
基数排序不需要直接对元素进行相互比较,也不需要将元素相互交换,需要做的就是对元素进行“分类”。 其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较 。例如,对于给定的一组无序序列,我们假定有十个(0-9)容器,对序列中的数据依次分类,例如,按个位从0-9分别放入编号为0-9的容器中,然后将其按顺序取出,第一轮分类完成。同样的方法,对十位,百位…上的数字进行分类后取出,最终可以得到一个有序序列。在不考虑空间的使用时,基数排序效率很高。思路:1.确定排序次数2.找出序列中最大值3.基数排序
2021-06-10 18:40:35
115
原创 希尔排序
希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序 。核心思想是合理的选取增量,经过一轮排序后使序列大致有序,然后不断缩小增量进行插入排序,最后直至增量为1,排序结束。核心算法:for ( int h = a.length/2;h > 0;h=h/2){ //从第h个元素,逐个对其所在组进行直接插入排序操作 for (int i = h; i < a.length; i++) {
2021-06-10 10:58:59
55
原创 归并排序
采用了分而治之的思想。对序列元素逐层折半分组。采用递归的方式实现。需要额外开辟一个临时空间来存储排序数据。核心:将若干个数组两两合并,保证合并后的每个组有序,直到只剩下一组则排序完成。大(分组)---->小(排序)---->大(合并)核心思想:拆分,归并拆分:private static void chaifen(int[] a, int startIndex, int endIndex) { //从中间拆分,计算中间索引 int centerIndex
2021-06-09 20:40:17
43
原创 直接插入排序
简单说一下直接插入排序的实现:例如,从序列的第二个数开始,与第一个数比较,若第二个数小于第一个数,则将第一个数后移至第二个数的位置,然后将第二个数插至第一个数的位置。至此第一次插入完成。接下来,同样的方法,取第i个数与前面已排好序的i-1个数进行比较,也就是说,第i个数从第i-1个数开始依次向前比较,若a[i]小于a[i-1],则该值继续向前比较直到找到一个数小于a[i]则停止比较,并将a[i]插入该数后面的位置,其他数依次后移一位。核心算法实现:因为要从后向前进行比较,所以外层循环必须从1开始,内
2021-06-09 16:42:06
63
原创 快速排序
快速排序:1.在序列中任取一个数作为基准值(一般取左边第一个数)2.然后先从序列的最后一个数开始遍历,与基准值进行比较,如果大于基准值,则该数不变,继续向前寻找,直到找到第一个小于基准值的数,将这个数放入第一个数的位置;3.此时再从第二个数向后遍历,直至找到第一个大于基准数的值,将其放入之前的空位。4.之后一直重复上面的步骤,直到基准值左边的值均小于基准值,右边的数均大于基准值。至此,完成一次排序,之后对基准值两边的序列按照同样的方法进行排序,直至整个序列有序,则排序完毕。快速排序的核心算法:
2021-06-08 19:16:17
56
原创 选择排序
选择排序算法的核心:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到刚才已排序序列的后面。以此类推,直到所有元素均排序完毕。核心算法实现:假定第一个数为最小数,开始比较。如果a[minindex] < a[j],那么我们将其下标对换,相当于此时在数组中小的数字放在大数的后面,这样做的原因是每次比较之后,我们都会让比较的两个数值互换,两个数字进行交换后,能让原数列按照从小到大的顺序排列。(从大到小则相反)如果a[minindex]
2021-06-08 09:46:37
53
原创 java集合
Java中集合的概念:可以存储数量不等的多个对象,可看作一个可变长度的Object数组。集合类都位于java.util包中,集合按其存储结构可分为单列集合和双列集合。1.Collections与CollectionCollection 是一个集合接口。 它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。是list,set等的父接口。Collections 是一个包装类。 它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务
2021-06-07 15:34:49
57
原创 代理模式
代理模式类型:结构模式代理模式主要使用了java的多态。通过引入代理对象的方式来间接访问目标对象。三个角色:抽象(接口),真实,代理代理对象:起到中介作用,连接客户端和目标对象例子:电脑桌面的快捷方式。电脑对某个程序提供一个快捷方式(代理对象),快捷方式连接客户端和程序,客户端通过操作快捷方式就可以操作那个程序例子:客户想买一个lv包,但自己买不到,于是需要代购。代购(代理对象)代替客户(真实对象)去买lv包(间接访问的操作)。先定义一个实现的接口,也就是买包的操作public inter
2021-05-29 15:12:33
53
原创 单例模式
单例模式懒汉式单例、饿汉式单例、登记式单例。单例模式有以下特点:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。比如每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。因此,我们可以知道选择单例模式就是为了避免不一致状态,避免政出多头。//懒汉式单例类.在第一次调用的时候实例化自己 public class Si
2021-05-29 09:22:33
39
原创 二维数组中的查找
题目:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:从右上角第一个数比较,缩小范围a.length指二维数组有多少行。 public class Array02 { public static void main(String[] args) { Array02 array02 = new Array02();
2021-05-24 20:05:15
57
原创 数组中重复的数字
剑指 Offer 03. 数组中重复的数字在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。输入:[2, 3, 1, 0, 2, 5, 3],输出:2 或 3(java实现)public class Array01 { public static int comPare(int[] nums){ for (int i = 0; i <
2021-05-19 15:55:48
49
原创 数据库 <查>
http://note.youdao.com/noteshare?id=b3fa61e6979532a8f7b3bb7bd7719a93
2021-05-17 19:08:55
45
原创 java基础<自增,自减运算符>
java运算中的算术运算符++,–1、i++ , i–int a = 10;int b = a++;//将a先赋值给b之后再加一 //a = a + 1;System.out.println("a="+a);System.out.println("b="+b);结果a=11,b=102、++i,–ipublic static void main(String[] args) { int a = 10; int c = ++a;//将a先加一
2021-04-15 18:54:33
60
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人