自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (1)
  • 收藏
  • 关注

原创 常见的软件测试模型

瀑布模型是一种线性的、顺序的软件开发模型V模型是瀑布模型的变种,将瀑布模型中的测试部分做了细化W模型是由Ⅴ模型演变而来的,是对V模型的一种改进,它强调测试应伴随整个软件生命周期相对于V模型和W模型,H模型将测试活动完全独立出来,形成了一个完全独立的流程X模型的目标是弥补V模型的一些缺陷

2023-08-30 14:37:30 1872

原创 Python基础 - 构造函数

命名为_init_,在实例化对象之前会自动执行该函数构造函数方便我们在实例化对象的时候实现个性化定制。

2023-08-28 14:05:34 227

原创 Python基础 - 字典

字典的每个键值key=>value对用冒号 : 分割,每个对之间用逗号,分割,整个字典包括在花括号{}中。

2023-08-25 14:47:04 214

原创 Python2 和Python3的共存和切换

1、电脑中安装python2和python3,将python2,python3的路径都添加到环境变量中。2、修改python2目录中的Python.exe为python2.exe,使用python2命令启动。3、修改python3目录中的python.exe为python3.exe,使用python3命令启动。修改了python2和python3后,此时pip、pip2 、pip3命令使用会出现报错。pip2代表python2,pip3 代表python3。更新成功后,则可以使用pip相关命令了。

2023-08-21 16:04:43 265

原创 SpringBoot常用注解-@PathVariable、@RequestParam 、@RequestBody

默认是true,表示请求中一定要传入对应的参数,否则会报404错误,如果设置为false时,当请求中没有此参数,将会默认为null,而对于基本数据类型的变量,则必须有值,这时会抛出空指针异常。@PathVariable 获取url中的数据,绑定路径中的占位符参数到方法参数变量中,get或者post方式都可以,如果URL中无参数,将会出错。id,不输入id的数值,获得的结果是null。id=99, 可以获取id的结果99。只有知道url的格式,我们才能在指定的方法上通过相同的格式获取相应位置的参数值。

2023-08-21 14:02:32 195

原创 SpringBoot常用注解 - @Controller

实际开发中,有时候只是让后端的结果返回到前端,而不作为新的视图页面,此时需要结合 @ResponseBody,让这个方法返回给前端的不是一个视图,而只是给前端传递查询到的数据。@RestController 是加在类上面的注解,使得类里面的每个方法都将 json/xml 数据返回到前台页面。@ResponseBody 添加到方法上:代表只有这个方法返回的是数据,其他方法返回的还是视图。@ResponseBody 添加到类上:代表这个类中所有的方法返回的都是数据,而不是视图。

2023-08-16 15:06:05 217

原创 Maven方式构建SpringBoot项目

项目如下: 添加@SpringBootApplication注解,将APP.java作为启动的main文件 控制器用于Web访问,创建controller子包,然后在子包里创建控制器LoginController.java APP.java文件,点击右键-》run as java application启动成功后,浏览器中输入localhost://8087 即可看到页面

2023-08-16 14:37:43 766

原创 Jmeter 参数化的几种方法

可在测试计划、线程组、HTTP请求下创建用户定义的变量全局变量,可以跨线程组调用jmeter执行的时候,只获取一次,一直不变,即使变量的值是随机数(${__Random(1,55,)}),不同用户数循环多次,拿到的用户自定义变量值都是一样的用户定义变量有重名的情况,测试计划下

2023-08-14 14:15:59 447

原创 Jmeter - 函数助手

2、CSV文件列号| next| *alias:表示当前变量读取第几列数据(CSV文件列号从0开始,第一列0、第二列1、第三列2、依次类推)d.当第一个参数是false时,5个线程,循环2次,则结果为1 2 3 4 5 6 7 8 9 10。b.当第一个参数是true时,5个线程,循环2次,则结果为1 2 1 2 1 2 1 2 1 2。c.当第一个参数是false时,5个线程,则结果为1 2 3 4 5。a.当第一个参数是true时,5个线程,则结果为1 1 1 1 1。

2023-08-11 15:49:00 608

原创 Linux tail命令(输出文件末尾行)

tail -n 100 log.txt | grep "关键字" -B10 -A10 --color=auto。tail -n 100 log.txt | grep "关键字" -B10 -A10。#输出文件的后100行中包含关键字的行和该行的前后10行 关键字加上颜色。#输出文件的后100行中包含关键字的行和该行的前10行。#输出文件的后100行中包含关键字的行和该行的后10行。#输出文件的后100行中包含关键字的行和该行的前后10行。#输出文件的后100行中包含关键字的行。

2023-07-26 15:40:40 2349

原创 TCP/IP协议

TCP/IP 是一类协议系统,它是用于网络通信的一套协议集合。

2023-07-26 14:57:17 2283

原创 如何进行接口测试

接口测试是测试系统组件间接口的一种测试。接口测试步骤1、理解接口文档和需求了解被测系统的设计和开发背景,研究接口文档和需求文档可以通过抓包工具或者 F12 开发者工具进行抓包分析2、确定测试范围和目标根据接口文档、需求文档等资料明确测试范围和目标,确定哪些接口需要测试以及它们之间的依赖关系3、制定测试计划根据测试目标、测试范围、被测系统、测试资源等条件,制定接口测试计划。包括测试范围、测试用例设计、测试环境搭建、测试工具、测试过程管理等环节4、设计测试用例和测试数据

2023-07-20 10:27:45 274

原创 如何定义bug严重程度和优先级

禅道将bug严重程度分为P1、P2、 P3、P4,优先级分为1、2、3、4。

2023-07-18 13:03:14 1271

原创 如何做好回归测试

回归测试是指在修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误系统经历了系统测试,有些模块可以保证没有问题,因此回归测试就需要测试人员对测试用例进行合理的选择。

2023-07-17 15:07:42 309

原创 JAVA - equal 和 == 等号比较

=号比较的是栈中的数据==可以用于基本数据类型和引用类型对于基本数据类型,数据存储在栈中,因此==判断的是值是否相同对于引用数据类型,栈中存储的是对象在堆中的引用地址,因此==比较的是对象在栈中保存的引用(地址)是否相同。

2023-07-14 15:05:56 351

原创 JAVA - 包装类

1、包装类增强了java面向对象的性质(统一成面向对象):在集合类中,无法使用int 、double等类型,因为集合的容器要求元素是Object类型,就可以使用对应的包装类。为了解决这个问题,Java语言为内置数据类型提供了对应的包装类。Java是面向对象的编程语言,但是Java中的八种基本数据类型却是不是面向对象的。2、包装类还为基本类型添加了属性和方法,丰富了基本类型的操作。系统自动将包装类型中的数据拆分成为对应的基本类型。把基本类对应的包装类称作为“对应的箱子”包装类均为java.lang包中。

2023-07-14 14:40:57 194

原创 JAVA - 内存泄漏和内存溢出

程序运行完后,没有释放所占用的内存空间(程序中有引用没有释放,不能被GC回收),本该被回收的对象不能被回收而停留在堆内存中。

2023-07-14 13:38:48 694

原创 JAVA - 内存管理

目录内存管理是什么JVM内存区域组成程序计数器PCjava虚拟机栈本地方法栈JAVA堆方法区常量池 运行时常量池Java的内存管理就是对象的分配和释放问题从逻辑上可将JVM内存分为5个部分,主要分为被所有线程共享的内存区域和仅被当前线程独占的内存区域线程共享的内存区域包括堆和方法区线程独占的内存区域包括虚拟机栈,本地方法栈,程序计数器写程序时,需要判断当前数据读写的是存在于哪类内存区域,如果存在的是线程共享的内存区域,那么就要考虑是否存在线程安全问题,如果存在线程独占的内存区域,就没关系 运行时常

2023-07-13 14:39:16 1759

原创 JAVA基础 - 多态

重载和重写什么是多态多态可以理解为多种形态,同一件事情,不同的对象去完成时会产生出不同的状态,也就产生不同的结果重载和重写重写重写(override):子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写重写可以让子类定义自己的行为,也可以用于实现父类的方法-》重写的规则:1、重写的方法的方法名相同,传入参数均相同2、被重写的方法返回值类型可以不同,但是必须是具有父子关系3、访问权限不能比父类中被重写的方法的访问权限更低。

2023-07-12 16:21:49 210

原创 Mysql - 检索出指定行数据(limit)

/从第6行开始,检索10行记录,检索6-15行。limit后面如果是一个参数,就是检索前多少行。如果是2个参数,就是从offset+1行开始,检索rows行记录。//检索前10行记录。遇到需要返回前几条或者中间某几行数据时,可以使用limit。#pageSize: 每页显示的条数。实际开发中,往往用的是分页查询。#pageNum:当前页码。

2023-07-11 13:36:55 1344

原创 Mysql 拼接函数(concat)

当遇到需要将多个字符串拼接在一起的情况,可以使用concat 、concat_ws函数。

2023-07-11 12:04:48 328

原创 Mysql 聚集函数

这些聚集函数可以与GROUP BY子句以及HAVING子句一起使用,将查询结果根据不同字段进行分组,更加准确的精细的显示查询结果。MySQL聚集函数是一种内置函数,它们能够根据查询结果中的一列数据,计算出结果汇总值。常见的聚集函数有:AVG()、COUNT()、MAX()、MIN()、SUM()等。AVG()函数用于求出某一列数据的平均值, AVG函数忽略列值为NULL的行。max函数查询某一列的最大值,忽略列值为null的行。min函数查询某一列的最小值,忽略列值为null的行。count()求行数。

2023-07-11 09:15:17 139

原创 Mysql 数据库去重(distinct)

有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段。这种方式会将全部内容存储在一个hash结构里,最后通过计算hash结构中key的个数即可得到结果,是以空间换取时间的方式。#查询出不重复的用户名,返回结果只有一个name字段,没有其他字段。

2023-07-10 16:56:12 1501

原创 JAVA基础 - String,StringBuilder,StringBuffer

String 属于不可变类,即一旦String对象被创建以后,对象中的字符序列是不可改变的,直至这个对象被销毁上面实例中a的值好像被改变了,其实是a指向了新的字符串对象, “12345”这个对象并没有被改变,如果没有被再次引用,则会被String实例化有两种方式:方式1:String a = "12345";//通过字面量方式为字符串赋值,此时的字符串存储在方法区的字符串常量池方式2:String a = new String("12345");//通过new+构造器方式实例化字符串,

2023-07-10 15:17:10 196

原创 Python基础 - format 字符串格式化

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),增强了字符串格式化的功能基本语法是通过 {} 和 : 来代替以前的 %

2023-07-10 10:14:46 296

原创 Python基础 - 字符串处理

print(s[0]) #h ,索引从0开始print(s[-1]) #d ,-1表示末尾print(s[-3]) #r ,-3倒数第三个字母print(s[0:4]) #hell 注意左闭右开的区间print(s[7:-1]) #orl 注意左闭右开的区间print(s[:]) #hello world 若头下标和尾下标都缺省,则取整个字符串print(s[:5]) #hello 头下标缺省,表示从字符串的开始取子串。

2023-07-07 18:11:44 471

原创 Python基础 - 文件操作

readlines(hint=-1) #读取多行,默认读取完,返回每行组成列表。以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码。#mode 一个可选字符串,用于指定打开文件的模式。read(n=-1) #读取指定字节或者读取完成,默认读取完。r :只读模式【默认模式,文件必须存在,不存在则抛出异常】0 表示偏移参考文件的开头,offset 必须是 >=0 的整数。w :只写模式【不可读:不存在则创建;a :追加模式【可读;不存在则创建,存在则报错】

2023-07-07 14:29:34 207

原创 Python进阶 - 迭代器

使用for循环遍历取值的过程叫做迭代Python 中的迭代器是一个对象,用于迭代列表、元组、字典和集合等可迭代对象Python 迭代器对象必须实现两个特殊的方法:​​​和​​ 方法​​方法初始化迭代器对象​​ 方法进行迭代注意:1、如果一个对象是迭代器 Iterator,这个对象肯定是可迭代对象;但是反过来,如果一个对象是可迭代对象,这个对象不一定是迭代器 Iterator2、使用iter()将可迭代对象转换成迭代器(iter()函数实际上就是调用了可迭代对象的__iter__方法)

2023-07-05 16:57:02 111

原创 Python基础 - 装饰器

装饰器本质上是一个Python函数(其实就是闭包),它可以让其他函数在不需要做任何代码变动的前提下增加额外功能装饰器能够在那个函数执行前或者执行后分别运行一些代码装饰器的参数是一个函数,返回值也是一个函数闭包的相关知识,参考 : Python基础 - 闭包_Melody~M的博客-CSDN博客有一个test函数,想给test函数执行前后分别添加一些功能(此处用打印功能代替),代码如下:创建一个 my_decorator函数作为装饰器,入参是一个函数,my_decorator内部创建一个闭包wrappe

2023-07-05 15:09:20 171

原创 Python基础 - 闭包

定义:闭包就是能够读取外部函数内的变量的函数定义一个函数A , 函数A中嵌套了另一个函数B,并且A将函数B进行返回,这里的函数B就叫做闭包例如下面的代码,outer函数中有一个inner函数,inner函数可以获取到outer函数中的变量,outer函数将inner函数进行返回,F=outer() 将获取到inner函数对象,F此时保存的是innner函数所在位置的引用,F()相当于执行inner函数inner函数就形成了闭包,外部函数返回的不是一个具体的值,而是一个函数。

2023-06-30 14:35:50 156

原创 Python基础 - 命名空间

一个命名空间是一个容器,容器内的元素是能映射到对象的名称命名空间是一个 字典(dictionary)多个命名空间相互独立,允许不同命名空间有相同的名称命名空间的分类1.每个函数都有着自已的命名空间,叫做局部命名空间,它记录了函数的变量,包括函数的参数和局部定义的变量2.每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。3.还有就是内置命名空间,任何模块均可访问它,它存放着内置的函数和异常命名空间查找顺序。

2023-06-30 14:13:19 243

原创 Python基础 - global & nonlocal

Python基础 - global & nonlocal

2023-06-30 10:45:58 135

原创 Python基础 - 推导式

推导式(又称解析式),是Python的一种独有特性,可以从一个数据序列构建另一个新的数据序列。

2023-06-29 13:44:16 96

原创 Python WebDriver API - 鼠标操作ActionChains

用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等。而selenium给我们提供了一个类来处理这类事件——ActionChains当调用ActionChains的方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当调用perform()方法时,队列中的事件会依次执行。

2023-06-28 09:39:44 907

原创 Selenium 使用已开启的浏览器执行测试

实际测试工作中可能遇到某些需要使用手动开启浏览器执行测试的情况,比如某些网站登录需要手机短信验证,为了跳过这步,可以手动登录网站,在已登录的页面继续测试。--user-data-dir 指定创建新的chrome配置文件的目录,为了确保在单独的配置文件中启动浏览器,不会破坏默认的配置文件。--remote-debugging-port 端口值可以指定任何打开的端口。1、启动浏览器dbug模式时需要把浏览器打开的进程先全部关闭。2、9222是默认端口,可以修改,但不要使用已经被占用的端口。

2023-06-28 09:10:04 1689

原创 Selenium 不开启浏览器页面执行测试用例

实际工作中会遇到不开启浏览器页面来执行测试用例的情况,可以通过ChromeOptions来实现ChromeOptions是chromedriver支持的浏览器启动选项Google 针对 Chrome 浏览器 59版 新增加的Chrome-headless 模式,可以在不打开UI界面的情况下使用 Chrome 浏览器。

2023-06-28 06:47:38 1290

原创 TestNG 断言

用例最后一个断言后面需要调用assertAll(),因此软断言在断言失败的时候,只记录失败但不会抛出异常,调用assertAll()则可以将没有抛出的异常进行抛出。Assert.assertFalse检查condition结果是否为False,断言失败会打印message信息。Assert.assertTrue检查condition结果是否为True,断言失败会打印message信息。软断言意思是如果一个断言失败,会继续执行这个断言下的剩余代码。硬断言意思是如果运行到断言失败则停止执行,后续代码不再执行。

2023-06-27 10:26:13 89

原创 Maven 使用详细教程

Maven 是 Apache 下的一个纯 Java 开发的开源项目Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目Maven它提供了中央仓库,能帮我们自动下载构件Maven仓库就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR,这节省了磁盘资源。

2023-06-24 14:41:24 2006

原创 Python Selenium WebDriver API - 元素对象的定位

find_elements_by_partial_link_text() 通过链接中的部分文字查找元素,内部调用find_elements(self, by=By.PARTIAL_LINK_TEXT, value=None)方法,find_element_by_partial_link_text() 通过链接中的部分文字查找元素,内部调用find_element(self, by=By.PARTIAL_LINK_TEXT, value=None)方法,

2023-06-21 14:03:09 347

原创 Python Selenium CSS 定位方法详解

CSS(Cascading Style Sheets)层叠样式表是一种用来表现HTML或XM等文件样式的计算机语言CSS 使用选择器来为页面元素绑定属性, 这些选择器可以被 selenium 用作另外的定位策略CSS 可以比较灵活选择控件的任意属性, 一般情况下定位速度要比 XPath 快,定位更稳定""":Args::Returns::Raises::Usage:"""""":Args::Returns::Usage:"""

2023-06-21 13:55:44 3279

wireshark-tshark 命令详解

wireshark - tshark 命令详细介绍,Ethereal是一个很流行的开源sniffer,支持包括solaris在内的很多平台。2006年初,主导Ethereal源码的大牛Gerald Combs跳槽到了CACE公司。原来“Ethereal”的商标就不能用了。伟大的开源项目如果因此而over,不免同好者唏嘘。怎么办?Combs等人只得舍弃人气既旺的Ethereal名号,将项目更名为Wireshark。它吸引了大多数原来Ethereal的contributor,从Ethereal的fork点0.99.1开始,继续添加无数令人兴奋的新功能。这个互联网的放大镜,展现给了我们一个生动却又枯燥,温馨伴着冷漠,充满智慧的流量和阴谋的机关,不舍虚构而又看似真实的“以太”世界。

2018-04-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除