自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 selenium——unittest框架

一、unittest框架基本介绍二、unittest框架解析三、unittest框架使用方法1.测试固件2.测试套件3.用例的执行顺序4.忽略测试用例中的方法5.unittest断言6.HTML报告生成

2023-05-10 08:00:00 1249

原创 HTML基础用法

目录一、HTML二、HTML、CSS、JavaScript区别三、支持HTML的软件四、DOM树结构五、HTML在VSCode上相关快捷键六、HTML常见标签1.标题标签(h1-h6)2.段落标签(P标签)3.换行标签 (br标签)4.格式化标签5.图片标签(img)6.超链接(a标签)7.表格标签(table标签)8.列表标签9.表单标签(1)form标签(2)input标签(3)label标签(4)select标签(5)textarea 多行编辑框10.div

2022-09-03 20:39:46 3612 4

原创 从浏览器中输入一个URL(地址)之后信息是怎么进行收发的?

从浏览器中输入一个URL之后,都发生了哪些事情?一、第一部分 发送之前的准备工作1.浏览器首先会根据这里的域名,查询对应的IP地址(1)先查浏览器自身的缓存(2)再查hosts文件(3)再查DNS服务器先查就近的DNS服务器,再查上一级的服务器2.浏览器就会构造出一个HTTP请求这个HTTP请求中就包含了刚才的这个域名信息(用户输入的信息)3.浏览器就要调用操作系统的socket API,把这个HTTP请求交给TCP来进一步处理。TCP协议就需要构造一个TCP数据报。(1)在发送TCP

2022-04-08 16:51:53 2804 1

原创 selenium用法(最新版)

一、什么是selenium二、selenuim原理1.selenuim1.0版本2.selenuim 2.0 版本三、webdriver常用的API1.元素的定位2.操作测试对象3.添加等待4.打印信息5.浏览器的操作6.键盘事件7.鼠标事件8.定位一组元素9.多层框架/窗口定位10.层级定位11.下拉框处理12.alert的处理13.DIV对话框的处理14.上传文件操作

2022-04-08 15:59:36 17086 15

原创 最新版selenium+python环境安装

python官网已经更新版本到3.10了,selenium对应应该下载4.1.3,一般pycharm会自带selenium,pip,setuptools,如果没带,版本一定要对应下载。一、下载安装python1.下载python3.10(最好记住安装路径)https://www.python.org/getit/2.下载完成之后打开cmd,输入python,查看是否下载好,出现版本号则下载好了。3.若是忘记安装路径,cmd输入where python二、下载pycharm1.pychar

2022-04-07 11:38:54 4337

原创 自动化测试

1.什么是自动化测试?按照设定好的条件或者步骤让机器(电脑)运行;2.自动化测试条件要求项目(需求)比较稳定,需求变动频繁的项目,项目周期短,人工交互比较强的项目无法做自动化测试.3.自动化测试的分类(1)UI自动化项目比较稳定,界面要稳定,在项目后期做UI自动化测试,用例维护量大。(2)接口自动化项目前期就可以介入,测试用例维护量少,接口稳定。(3)性能自动化4.自动化测试工具(1)QTP(quick Test Professional)HP 安装包很大 收费(2)jmeter 开

2022-04-07 07:30:00 506

原创 测试用例具体设计方法

一、根据需求写测试用例二、测试用例具体的设计方法1.等价类2.边界值3.因果图法4.正交法5.场景法6.错误猜测法

2022-04-06 11:33:44 367

原创 网络层(IP)和数据链路层(以太网)的关系

一、路由选择二、IP协议中的路由选择三、数据链路层协议(以太网)1.负责的工作2.核心的协议3.举例说明传输层,网络层,数据链路层之间的关系4.描述数据使用的不同术语(很少区分)5.以太网帧格式四、mac地址(数据链路层的地址)1.mac地址介绍2.如何查看自己主机的mac地址2.IP地址和mac地址区别3.画图描述mac地址五、ARP协议1.作用2.工作过程六、DNS 域名解析系统1.为什么发明DNS域名解析系统?2.DNS域名解析系统作用3.全世界这么多的电脑,都需

2022-04-06 10:22:58 6721

原创 测试的分类

工具集:

2022-04-02 07:39:47 712

原创 开发模型和测试模型

一、开发模型1.瀑布模型每一个阶段都只执行一次,适用于稳定的项目;风险往往迟至后期的测试阶段才显露。2.螺旋模型适用于需求明确有一定风险的项目3.增量模型和迭代模型增量∶第一周 完成AB模块 第二周完成CD模块;迭代∶第一周完成A BC D四个功能模块的基础功能,第二周A BC D四个功能模块功能的升级和细化。4.敏捷模型:强调迭代,每一个迭代中也是一个完整的软件开发周期;降低开发风险,随时都可以根据需求变动。(1)敏捷教练特点∶一是轻文档,轻流程,重目标,重产出;二是拥抱需求变化

2022-04-02 07:39:25 681

原创 性能测试的分类

目录一、性能测试1.基准测试2.负载测试3.压力(强度)测试4.并发测试5.容量测试6.配置测试7.可靠性测试一、性能测试1.基准测试对一个新系统进行性能测试,记录各项性能指标,作为后续性能测试的基准。2.负载测试给系统定容定量,在系统上不断增加负载(用户数),看系统最大承受的用户负载是多少,看系统是否达到了需求所需要的性能指标,RT/TRP,吞吐率,资源利用率3.压力(强度)测试为了找出系统的性能瓶颈,以及产生系统性能瓶颈的原因。4.并发测试在一定的软硬件环境下,系统的其他条件(数据库数

2022-04-01 16:47:09 2216

原创 为什么要做性能测试

目录一、为什么要做性能测试?二、什么时候做性能测试?三、性能测试的基础概念1.并发数2.响应时间 RT/ART(平均响应时间)3.事务响应时间4.点击率5.吞吐量/吞吐率6.思考时间7.资源利用率一、为什么要做性能测试?系统是否可以处理预期的用户负载;系统是否可以处理业务所需要的事物数量;系统可以处理非预期情况下的用户负载;系统能在预期和非预期的情况下稳定用户可以获得舒适的体验。二、什么时候做性能测试?功能测试之后,系统的功能比较稳定之后。三、性能测试的基础概念1.并发数(1)狭义的并发

2022-04-01 16:18:23 2744

原创 HTTP协议格式

一、http协议HTTP这个协议在传输层主要是基于TCP来实现的,应用层协议是给传输层的字节流赋予一定的含义。超文本的传输协议,其实就是指的是“HTML”(超文本里面包含一些特殊的东西,图片,链接,音频,视频)HTTP最早就是为了下载HTML二、HTTP协议传输模型一发一收,请求和响应式一一对应的(web开发中最常见的一种模型)。可以借助一些工具来观察到HTTP的请求和响应。1.Chrome信息看不全,看不到请求和响应的完整格式2.wireshark(抓包工具)直接从网卡上拿到数据(以太网

2022-03-28 21:04:28 1854

原创 MySQL多表查询

目录一、查询和新增结合二、聚合查询1.聚合函数2.group by子句三、联合查询1.笛卡尔积1.内连接2.外连接(1)左外连接(2)右外连接3.自连接4.子查询(嵌套查询)5.合并查询一、查询和新增结合将表2中的数据复制到表1insert into [表名1](列名,列名...) select (列名,列名...) from [表名2]二、聚合查询1.聚合函数函数说明count([distinct] expr)返回查询到的数据的 数量sum([distinct]

2022-03-28 19:54:11 425

原创 数据库约束

1.null约束create表时,指定某列不为空create table [表名](id int not null;-- id 不为空)2.unique :唯一约束指定列为唯一的,不重复的,插入前会查找若已存在则插入失败create table [表名](id int unique;-- id 不重复)3.default:默认值约束指定插入数据的时候,列为空取默认值,若为定义默认值则自动默认为nullcreate table [表名](name varchar(20) defa

2022-03-27 15:33:32 637

原创 MySQL数据库、表常用命令

目录一、数据库分类1.关系型数据库:2.非关系型数据库:二、MySQL相关基础三、MySQL数据库基础操作1.显示数据库2.创建数据库3.删除数据库4.使用数据库四、常用数据类型1.数值类型2.字符串类型3.日期类型五、MySQL表基础操作1.创建表2.查看表六、MySQL表的CRUD1.新增(create)2.查询(Retrieve)(1)全列查询(查整列)(2)指定列查询(3)查询字段为表达式(4)查询信息起别名(5)去重查询:distinct(6)排序:obey by(7)条件查询:where(8)分

2022-03-27 13:13:41 1395

原创 Linux常用操作命令

1.ls 列出当前目录中的文件2. pwd 列出当前目录的绝对路径3. cd 切换当前目录4. touch 创建空文件5. cat 读取文件6. echo 写文件7. mkdir 创建目录(文件夹)(make directory)8. rm 删除,既可以删除文件,也可以删除目录(1)删除指定文件rm 文件名(2)删除目录及其中的内容rm -r 目录名9.cp 复制一个文件或者目录(copy)(1)拷贝文件cp 要复制的文件名 要复制到的地方(文件名或者路径下如:zyd/)

2022-03-26 12:53:36 647

原创 TCP和UDP相关问题

目录一、网络基础1.OSI 七层模型划分为以下七层:(不实用)2.TCP/IP五层(或四层)模型二、UDP与TCP的区别三、如何基于UDP协议实现可靠传输(实际想说的是TCP)四、什么场景中适合使用TCP和UDP一、网络基础1.OSI 七层模型划分为以下七层:(不实用)2.TCP/IP五层(或四层)模型传输层(UDP和TCP都属于传输层)传输层是操作系统内核实现的,一般都是现成的协议,很少会涉及到自定制。负责端对端的数据传输,只考虑起点和终点,不考虑中间过程。二、UDP与TCP的区别1.

2022-03-25 22:24:30 5088

原创 TCP的特性(包含三次握手、四次挥手问题)

TCP协议基础一、确认应答(可靠性的核心)1.原理2.其他场景二、超时重传(可靠性)三、连接管理(三次握手、四次挥手)可靠性1.三次握手(如何建立连接)2.四次挥手(如何断开连接)四、滑动窗口(效率)1.传输原理2.窗口范围3.滑动窗口出现丢包的情况五、流量控制(可靠性)1.流量控制:2.窗口实际大小六、拥塞控制(可靠性)七、延时应答(效率)八、捎带应答(效率)九、面向字节流(粘包问题)十、TCP中异常的情况(心跳机制)1.进程终止2.机器重启3.机器掉电/网线断

2022-03-25 21:57:25 779

原创 FFmpeg、bcg729、SDL 的下载及编译

在执法记录仪中音视频通信客户端软件开发项目中是用 FFmpeg 进行视频编解码,bcg729 来进行音频编解码,而 SDL 是用 来进行视频渲染的。在下载 FFmpeg、bcg729、SDL 的时候要注意和 PJSIP 项目选择一样 的位数。在 pjproject-2.0 中拷入 FFmpeg、bcg729、SDL 并且添加相关 lib 文件,之后会在相 关项目中添加路径生成新的 lib 文件添加到本项目软件中,详见上文中 PJSIP 配置部分。 还要将相关的 dll 考入到本项目软件中。(1)在官网 h

2022-03-13 11:29:50 3368

原创 PJSIP 下载和编译

在执法记录仪中音视频通信客户端软件开发项目中是利用 PJSIP 来进行即时通信的。由于项目是音视频即时通信,需要用到视频,以及 FFmpeg、bcg729、SDL,因此将创建 config_site.h 文件在其中加入相关 参数。之后打开 pjproject-vs14.sln,对要用到的 PJSIP 中的项目添加会使用到的 FFmpeg、 bcg729、SDL 的相关路径。1)在官网 https://www.pjsip.org/上下载源码。2)创建 pjlib\include\pj\config_sit

2022-03-13 11:20:20 3853

原创 Qt 在 VS2017 上的安装配置

Qt5.0 以上的版本可以较好地满足一些软件项目开发的要求,并且移植性强。Qt 中包含 很多库函数用来支持 UI 界面的设计开发。所以可选择 Qt 与 VS2017 相结合的 开发方式。由于 Qt 是安装在 VS2017 上的插件,所以需要下载相关的 vsaddin-msvc2017 插件。(1)在官网上下载 Qt5.12.2,选择 Qt-opensource-windows-x86-5.12.2.exe,在 Win10 操作系统上安装 Qt。(2)Qt 安装时需要勾选相应的项目。(3)Qt 安装成功

2022-03-13 11:12:30 3409

原创 基于Java Servlet 构建的在线音乐服务器

//登录模块public User login(User loginUser) { User user = null;//Connection conn = null; //获取连接PreparedStatement ps = null; //预编译ResultSet rs = null;//结果集合 try { conn = DBUtils.getConn(); ps = conn.prepareStatement("select*from user where usernam.

2022-03-12 22:23:14 1820

原创 JAVA——括号匹配问题

问题:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合;左括号必须以正确的顺序闭合。方法:1.开辟一个栈,定义一个下标i,遇到左括号将其存入栈中。2.循环往后走的时候,若遇到右括号,分两种情况。第一种,遇到右括号时栈中为空,则右括号多。第二种,遇到右括号时,刚好和左括号(栈顶元素)对上,此时利用pop()删除栈顶元素,下图以{ [ 7 8] }为例,走到 ] 时,弹出栈顶元素;若不全能对上则说明左右两

2022-02-13 22:55:35 3828

原创 JAVA——最小栈

问题:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。方法:1.创建两个栈:一个stack,一个minstack(专门存放每次有新数组输入后的栈中最小值)。2.push(x)将元素 x 推入栈中:分两步。先把元素推入stack中。若此时minstack中为空则,将此元素也放入minstack中;若mins

2022-02-13 09:54:30 462

原创 JAVA——用栈实现队列

问题:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false方法:1.创建两个栈2.push(int x) 将元素 x 推到队列的末尾:将元素全都放到栈1中。3.pop() 从

2022-02-12 10:05:43 1158

原创 JAVA——用队列实现栈

问题:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false。方法:1.先创建两个队列2.push(int x)将元素x压入栈顶:要考虑两种情况。第一种两个栈都为空的时候,放到队列1中。

2022-02-12 10:04:34 750

原创 JAVA——链式队列、循环队列的基本用法

队列的基本用法一、基本介绍1.概念2.队列是用什么实现的?二、JAVA集合类对应的队列(LinkedList)三、自己实现队列基本用法四、循环队列基本操作1.为什么要引入循环队列2.基本操作一、基本介绍1.概念队列:(先进先出)队尾入队头出只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)入队列:进行插入操作的一端称为队尾(Tail/Rear)出队列:进行删除操作的一端称为队头(Head/Fron

2022-02-11 10:49:03 1750

原创 JAVA——栈的基本用法

文章目录一、基本介绍栈:(先进后出)一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈顶。二、栈自带的基本操作向栈中存放元素:stack.push();获取栈顶元素:stack.peek();删除栈顶元素(返回值为删除的元素):stack

2022-02-11 10:27:16 6670

原创 中缀表达式转后缀表达式

问题:中缀表达式转后缀表达式中缀表达式:就是符号在中间,也是我们见的最多的一种表达式,例如:10*(5+2 -3后缀表达式:就是符号在后面 。例如:10 5 2+*3-方法:从左往右先乘除后加减,最外层加括号。把每个括号里面对应的运算符都移到括号右边。之后去除括号即可。例子1:10*(5+2)-3的后缀表达式步骤:1.先加括号:(10*(5+2)-3)2.从左往右移符号(10*(5 2)+-3)(10(5 2)+*-3)(10(5 2)+*3)-3.去括号10 5 2+*3-例

2022-02-10 17:09:04 265

原创 JAVA——删除字符串(List)

问题:删除第一个字符串当中出现的第二个字符串中的类型例:输出结果:wl t A String str1=“welcome to A” String str2=“come”`方法:拿着str1中的每个字符和str2里边的字符对比,若2中没有则放入新开辟的空间内。代码: public static void func(String str1,String str2) { if (str1 == null || str2 == null) {

2022-02-09 18:49:38 1639

原创 JAVA——链表的实现(双向链表)

主题:双向链表双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。头插法方法:public void addFirst(int data){ ListNodeD node=new ListNodeD(data); if(head==null){ this.head=node;

2022-02-08 15:14:57 323

原创 JAVA——相交链表

问题:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。方法:先判断两个链表是否为空链表。接下来:1.计算两个链表的长度2.pl要先走比短链表多出来的那一截3.ps和pl同时走到相等时则为要求的焦点代码: public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if(headA==null){

2022-02-08 09:13:39 522

原创 JAVA——环形链表

问题1:给你一个链表的头节点 head ,判断链表中是否有环。如果链表中存在环 ,则返回 true 或者false 。方法:首先判断链表是否为空,以及是否只有一个结点。接下来利用快慢指针,slow走一步,fast走两步,在fast不为null以及.next不为空的情况下,若能找到fast=slow的相遇点则链表中有环。代码: public boolean hasCycle(ListNode head) { if(head==null){ return fals

2022-02-07 18:56:57 1144

原创 JAVA——链表的回文结构

问题:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法(不产生新的链表),判断其是否为回文结构,bollean类型返回true,false.。回文结构:例如1->2->2->1方法:首先要判断链表为空以及只有一个结点的情况。接下来1.找中间结点(利用快慢指针,slow走一步,fast走两步)详见JAVA——快慢指针解决链表相关问题(一)2.进行翻转,把中点以后的链表进行翻转,要有三个变量进行转换。3.两头往中间走,奇数走到head和slow相等处,偶

2022-02-07 16:12:32 497

原创 JAVA——删除链表中重复的结点

问题:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5方法:先设置一个新的空头指针newHead,把不重复的值接到newHead后面,重复的指针将指向下一个数,最后要将新链表的最后一个值置为null,不然最后一个数后面将跟着原来.next之后的数。代码: public ListNode deleteDuplication(Li

2022-02-07 14:12:58 814

原创 JAVA——链表分割

问题:现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。方法:把所有的数分成两组,小于x的一组,大于等于x的一组。小于x的数以bs开头be结尾;大于等于x的数以as开头,ae结尾。若cur=null则循环结束。之后要判断bs是否为空,以及as是否为空的情况。代码:public ListNode partition(ListNode pHead, int x) { /

2022-02-07 11:02:17 552

原创 JAVA——合并两个有序链表(二路合并)

问题:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。例如:输入l1[1,2,3] l2[3,4,5]输出[1,2,3,3,4,5]思路:首先要考虑两个表为空的情况,再考虑两个表各自为空的情况。若表A为空则输出表B,若表B为空则输出表A。当两个表都不为空如下图,若走到最后两个表有一个地址为空了则,tmp指向另一个表当前地址。代码:public ListNode mergeTwoLists(ListNode headA, ListNode headB)

2022-01-24 12:10:27 1171 1

原创 JAVA——快慢指针解决链表相关问题(二)

问题:输入一个链表,输出该链表中倒数第k个结点例如:输入:4{1,2,3,5,6,4} 输出:3思路:首先要考虑head为空的情况。再考虑k(与位置相关)的合法性。若k不小于0,让fast先走,利用k-1!=0让fast走到第一个k的倍数处,若在走之间fast.next的值出现空的情况,则说明k值大于了链表的长度size。之后让slow和fast一起走,直到fast为空,此时slow的值就是所要求的节点。主要代码:class ListNode{ public int val; pu

2022-01-23 20:09:05 154

原创 JAVA——快慢指针解决链表相关问题(一)

问题:给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。例如:输入:[1,2,3,4,5,6,7,8]输出:此列表中的结点 5 (序列化形式:[4,5,6])思路:首先要考虑链表为空的情况。利用快慢指针的方法定义一个快指针(每次走两格),慢指针(每次走一格)。当快指针走大到最后一个节点(奇数个)或者最后一个的.next处(偶数个)时,返回slow的值。代码:class ListNode{ public int val; p

2022-01-23 17:49:10 575

空空如也

空空如也

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

TA关注的人

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