自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 QQ音乐项目的GUI自动化测试

例如,如果界面上有⼀ 个登录功能,测试⼈员需要设计⽤例来验证用户输⼊正确的用户名和密码后是否能够成功登录,输⼊错误的用户名或密码时是否能够给出正确的提⽰,以及在不同⽹络环境下登录功能是否稳定等。对于复杂的业务功能,如数据查询、报表⽣成、⽂件上传下载等,也需要设计详细的测试⽤例来验证其功能的正确性和稳定性。界⾯测试主要关注界⾯的布局、元素的显示、交互设计 以及整体的用户体验。此外,还需要验证界面的交互逻 辑,例如用户点击按钮后是否有正确的反馈,输⼊框是否能够正确接收输⼊,下拉菜单是否能够正常 展开等。

2025-10-07 13:36:57 772

原创 GUI自动化之pywinauto

pywinauto。

2025-10-02 19:50:57 1797

原创 用C语言API(常用)操作MySql数据库

当部署好了MySql服务器,想通过程序访问服务端的数据,在编写程序的时候,可以通过官方提供的C语言API来实现。:为什么需要这个接口,由于C语言中字符串以'\0'结尾,当保存的数据是二进制形式时,可能中间保存着的值为'\0',安装字符串读取时导致后面的字符丢失了。返回值类型为char**,实际是char* [],数组里面保存的是当前行所有列的值。:返回一个结构体指针(数组),保存结果集中的所有列信息。如果打算复制字段值,使用strlen()计算长度,二进制形式保存的数据,可能导致数据丢失。

2025-08-31 18:59:18 1001

原创 MySQL如何创建视图和用户

语法:grant 权限列表 on 库.对象名(表名) to '用户名'@'主机名 ' [identified by '密码'];语法:set password for '用户名'@'主机名'=password('新的密码');简单来说,一个表的中的数据太大了,通过查询条件来建立一张子表。语法:create user '用户名'@'登录主机/ip' identified by '密码';如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户。

2025-08-31 15:00:26 921

原创 MySQL事务

MySQL是一个网络服务。大多数情况下,会有很多客户端连接MySQL服务。当多个客户端访问同一个表时,可能会出现问题。比如:火车票售票系统,当两个客户端同时买票,操作同一张票数表。当客户端A检测还有一张票,将票买掉,但是还没有更新数据库。于此同时,客户端B,也在买票,也检测到还有一张票,客户端B也将票买了。这样就导致一张票被卖了两次。于是MySQL需要对此现象加以控制。这就是事务解决的问题。要解决上面的问题,至少需要满足下面的属性(拿买票的过程举例):买票的过程得是原子的。

2025-08-30 19:11:30 671

原创 MySQL索引

MySQL是对用户的数据进行管理的,而数据都保存在磁盘中,MySQL对数据进行管理需要先将数据从磁盘读取到内存中,再将修改了的数据,刷新到磁盘中。然而,这是IO操作,效率是比较低的。并且当数据量比较大时,当查询数据时,由于内存无法全部保存数据,只能将数据分批次读取上来,这样会导致IO次数增加。索引是MySQL中提高查询数据的一种方式。但是查询数据的提高是以插入,更新,删除的速度为代价的。所以索引的价值在于提高海量数据的查询速度。

2025-08-26 11:38:34 681

原创 MySQL函数,复合查询和内外连接

部门名在部门表dept中,员工名和工资在员工表中emp中,需要将两表做笛卡尔积。显示工资比部门 30 的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工),即表1第一行和表2所有行组合,表1第二行和表2所有行组合,表1剩余行做同样操作。上面是内连接的规范语法,但是,我们在上面使用时,并没有写的成这样,也是可以的。显示工资比部门 30 的所有员工的工资高的员工的姓名、工资和部门号。即,表1中的信息,先在表2中找到和on条件匹配的数据,再进行组合。显示部门名,员工名,工资,条件部门号等于10。

2025-08-24 14:49:20 811

原创 MySQL表的约束

zerofill。

2025-08-23 20:22:57 735

原创 数据库(MySQL)概念和操作

我们都知道文件可以用来保存数据,那为什么还需要数据库呢?首先文件保存数据有以下几个缺点:文件安全性问题文件不利于数据的查找和管理文件在程序中控制不方便于是专家们为了更有利于管理数据,设计出了数据库。下面重点介绍现在主流的数据库,MySQL。数据库是一个管理数据的软件。磁盘和内存。MySQL是数据库的一种。MySQL是一个网络服务,具有客户端和服务器端。底层用的TCP协议。应用层的协议是MySQL自己的协议。我们安装了MySQL后,就连着服务器端和客户端一起安装了。

2025-08-22 23:36:27 891

原创 MySQL表的增删改查(基础)

新增-- 单行插入insert into 表(字段1, ..., 字段N) values (value1, ..., value N);-- 多行插入insert into 表(字段1, ..., 字段N) values-- 插入并更新insert into students (id, sn, name) values (100, 10010, '唐大师')ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大师';-- 冲突则替换。

2025-08-20 12:47:38 865

原创 博客系统接口自动化项目

理解业务需求,若是针对未参与的项目实施接口自动化,应与业务人员、产品经理等沟通,了解接口所支持的业务场景和业务逻辑。根据业务需求,明确接口需要实现的具体功能,如数据的获取、修改、删除等操作,以及接口的输入输出要求。用例数量越多,测试时间越长。在使用pytest进行测试时,有时候我们需要按照特定的顺序来运行测试用例,尤其是在涉及到测试用例之间的依赖关系时。饼图显示了测试的通过率为100%,这意味着所有34个测试用例都成功执行,没有失败的测试用例。博客系统中接口较少,可以针对所有的接口实施自动化测试。

2025-08-18 18:11:53 670

原创 pytest框架-详解

pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:1、简单灵活,非常方便的组织自动化测试用例;2、支持参数化,可以细粒度地控制要测试的测试用例;3、能够支持简单的单元测试和复杂的功能测试,比如web端selenium/移动端appnium等自动化测试、request接口自动化测试4、pytest具有很多第三方插件,并且可以自定义扩展,比如测试报告生成,失败重运行机制5、测试用例的skip和fail处理;6、结合业界最美的测试报告allure+Jenkins,持续集成。

2025-08-15 10:53:28 1359

原创 JSON Schema

本篇主要介绍JSON Schema的基本语法,必要时会使用python代码来验证。JSON Schema是一种用于描述的规范,可以用来定义对象的结构、格式和约束条件。通过JSON Schema,可以对JSON数据进行验证、校验和文档化,确保数据的正确性和完整性。

2025-08-11 21:46:24 905

原创 个人博客系统测试报告

因为账号和密码都已经储存在数据库里面,只要对应的输入框输入正常的账号和密码就可以,跳转到博客列表页了。

2025-07-17 18:40:55 713

原创 云备份项目

我们要做的项目是云备份项目,云备份项目的功能是将客户端的指定目录下的所有文件进行备份管理,将文件上传到服务端进行备份,并且对备份的文件进行管理。该项目的核心技术是要了解掌握有关于http网络协议等知识,该项目采用C++语言进行开发,客户端的主要功能就是将目录下的文件通过http协议,上传到服务端。

2025-06-08 20:50:59 760

原创 【QT】 控件 -- 显示类

也可以通过设置图标的方式设置图片,但是并非是一个好的选择,更多的时候还是希望通过 QLabel 来作为一个更单纯的显示图片的方式。这里一连串的修改都是需要按照一定的顺序来完成的。此时就可以得到同上面效果一样,但是颜色不同的进度条了,同样的,通过上述方式,也可以修改文字的颜色,字体大小等样式。这样的约定主要是因为 GUI 中的状态往往是牵一发动全身的,修改一个地方,就需要同步的对其他内容进行调整。比如需要读取一个很大的文件,就可以获取文件的总的大小和当前读取完毕的大小,来设置进度条的比例。

2025-05-23 16:48:39 1093

原创 【QT】 控件 -- 按钮类(Button)

涉及到的各种属性/函数/使用方法,针对接下来等下要介绍的 Qt 的各种控件都是。属性改变时触发的(当选中这个按钮时,会调用一次他的槽函数,当这个按钮的状态从。(3)当前代码中,如果程序启动时并不会选择任何选项,但是可以修改代码,让程序。Qt 的 api 设计风格是非常清晰的,此处列出的属性都是可以获取和设置的。是更彻底的禁用按钮的方式,此时该按钮无法被选中,也无法响应任何输入(这是属于。运行程序可以看到,点击 “其他” 按钮的时候,虽然不会被选中,函数,然后运行程序就可以看到随着选择不同的单选按钮,

2025-05-22 21:27:09 853

原创 【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件

如果资源比较大(比如是几个 MB 的文件),或者资源特别多,生成的最终的 exe 体积就会比较大,程序运行消耗的内存也会增大,程序编译的时间也会显著增加。其中有效数字是用二进制表示的,比如 .1(B),表示0.5,.01(B) 表示 0.25,而 0.1 这样的小数无法用二进制精确表示出来,只能凑一个非常接近 0.1 的数。中就可以看出来,并且 Qt 也提供了 “自定义控件” 的能力,可以让我们在现有控件不能满足需求的时候,对现有控件做出扩展,或者手搓出新的控件。直接修改,也可以通过代码的方式修改。

2025-05-08 23:04:00 1195

原创 【C++项目实战】日志系统

本项目主要实现的是一个日志系统,其支持以下功能:支持多级别日志信息支持同步日志和异步日志支持可靠写入日志到控制台、文件、滚动文件、数据库中支持多线程程序并发写日志支持扩展不同的日志落地在生产环境中的产品,为了保证其稳定性以及安全性,是不允许开发人员附加调试器去排查问题的,可以借助日志系统来打印一些日志帮助开发人员解决问题上线客户端的产品出现的Bug无法复现并解决,可以借助日志系统打印日志并且上传到服务端帮助开发人员进行分析。

2025-05-05 12:42:29 1453

原创 Python基础语法

变量名 = 值变量名自定义,要满足标识符命名规则。2.1 标识符由数字、字母、下划线组成不能数字开头不能使用内置关键字严格区分大小写内置类型:2.2 命名习惯见名知义。大驼峰MyName。小驼峰myName。下划线my_name。2.3 使用变量my_name = "张三"myAge = 23让代码更高效的重复执行。元组特点:定义元组使用小括号,且逗号隔开各个数据,数据可以是不同的数据类型。# 多个数据元组# 单个数据元组t2 = (10,)

2025-05-03 21:42:26 1831

原创 【QT】QT 的窗口坐标 & 信号与槽

这种自动生成代码的机制称为。

2025-05-01 21:27:23 978

原创 【QT】编写第一个 QT 程序 & 对象树 & Qt 编程事项 & 内存泄露问题

在Qt中创建很多对象的时候会提供一个Parent对象指针,下面来解释这个parent到底是干什么的。QObject是以对象树的形式组织起来的。当创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作为参数,这个参数就是parent,也就是父对象指针。这相当于,在创建QObject对象时,可以提供一个其父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表。当父对象析构的时候,这个列表中的所有对象也会被析构。

2025-04-30 23:12:43 1207

原创 Qt:(创建项目)

普通窗体模板,传统基于部件的窗体界⾯程序。:Qt控制台应⽤程序。因为Qt主要⽤于图形界⾯设计,这个控制台项⽬ 模板基本不⽤。:Qt提供的⼀种⾼级⽤⼾界⾯技术,使⽤它可以⽅便快速的为移动以及嵌⼊ 式设备开发流畅美观的⽤⼾界⾯。QtQuick模块是开发QML应⽤的标准库,提供了使⽤QML创建 ⽤⼾界⾯所需的⼀切,包括可视化、交互、动画、模型、视图、粒⼦效果以及着⾊效果等。

2025-04-30 18:06:35 2616

原创 Linux:(多路转接(中)——poll和epoll)

private_data回调函数会将红黑树节点中的next和prev指针的指向关系做修改,让该节点链入就绪队列中去,也就是图中的struct epoll_event结构,凡是处于就绪队列中的节点必然有事件已经就绪。:int epfd该值是epoll模型的描述符,int op表示修改句柄的选项,int fd要操作的文件描述符,struct epoll_event* event是用于epoll中的描述符属性结构体指针。比方说,我们增加一些指针变量等数据,红黑树的一个节点,也能成为链表中的一个节点。

2025-04-12 23:55:38 972

原创 Linux:多路转接(上)——select

fd_set* reads与fd_set* writefds、fd_set* exceptfds在使用上是一样的,只不过fd_set* writefds只关心进程向文件描述符中写数据的操作,而fd_set* exceptfds只关心该文件描述符是否出现了错误。:返回值大于0表示有相应个文件描述符就绪,返回值等于0表示没有文件描述符就绪,超时返回,返回值小于0表示select调用失败。也就是说,传参时这个位图代表需要监听的描述符,调用返回时这个位图代表已就绪的文件描述符。如果没有则超时返回。

2025-04-12 21:45:28 893 1

原创 Linux:(五种IO模型)

我们知道,IO过程我们在意的是拷贝,而不是等待。而拷贝需要的时间是由电路还有系统实现等保证的。随着科技的发展,拷贝本身花费的时间已经基本没有提升空间了,所以拷贝本身的效率已经很难再有提升了。那么等待时间的长度就决定了IO的效率。

2025-04-05 22:52:45 1108

原创 Linux:(DNS,ICMP,ping,NAT,代理服务器)

运营商服务器接收到服务器发来的数据。路由器在映射表中查找,发现这个数据的四元组信息能找到对应元素。此时,运营商路由器就将公网中的四元组替换为局域网中的四元组,再次进行发送。此时,在局域网中,四元组的唯一性被保证,家用服务器也能接收到数据。路由器通常情况下都带有NAT功能,否则无法完成内网和公网的IP地址转换问题,四元组的映射关系转换表也是由路由器自动维护的。假设使用TCP协议,当连接建立时,路由器中就会生成这对通信双方的映射表项,断开连接后也会删除这个表项。

2025-04-04 15:29:31 1015

原创 Linux:(数据链路层)

我们完成了传输层TCP、UDP和网络层IP协议的讲解,现在我们进入数据链路层,学习MAC桢协议和ARP协议。

2025-04-03 22:12:02 736

原创 Linux:(IP协议)

我们前面画的网段划分是公网网段划分的理想示意图,没有加入任何内网。实际上在到达一个国家的某个行政区时,就已经开始采用这种构建内网的方式了。所以,我们平时在B站,抖音等软件里都能看到评论归属地,但最细也只能到我国的省级行政区,无法看到区县这样的信息。这是因为各个行政区见使用的还是公网IP,识别属地很容易。在本行政区内大多使用内网IP,识别就比较困难了。

2025-04-03 16:34:18 909

原创 Linux:(UDP与TCP协议,三次握手,四次挥手,滑动窗口,拥塞控制,listen第二个参数)

目录一、再谈端口号1.端口号2.五元组3.端口号划分(1)知名端口号(2)操作系统动态分配的端口号(3)端口号与进程之间的关系4.一些Linux指令(1)netstat(2)pidof二、UDP2.解包和分用(1)解包(2)分用3.特点4.TCP缓冲区5.UDP缓冲区6.常见的基于UDP的应用层协议三、TCP1.协议格式2.解包和分用3.缓冲区4.面向字节流5.粘包问题6.网络协议和协议栈四、确认应答机制1.通信的可靠性2.确认应答(ACK)机制3.超时重传机制五、TCP报头信息的理解1.序号和确认序号2.

2025-03-31 22:53:12 983

原创 Linux:(HTTPS协议加密,服务端和客户端发送信息的安全)

数字指纹(数据摘要):其基本原理是利⽤单向散列函数(哈希函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字指纹不是加密机制,但可以⽤来判断数据有没有被窜改。如果有两个非常大的文本文件,如果我们逐字逐句地去核对该文件中的内容,那么付出的精力会相当大。如果我们使用某个Hash算法将文本内容转化为一个长度固定的字符串,那比较起来就简单很多了。该字符串就被称为数据摘要,由于重复性极低,所以也称为数据指纹。常用的算法有MD5、SHA1、SHA256、SHA512等。

2025-03-26 17:52:46 1007

原创 Linux:(模拟HTTP协议,GET和POST方法,Http的状态码)

所以,在第一次登录优快云后,在站内进行网页跳转(从一篇文章跳转到另一篇文章)时,你打开了一个新的网页,理论上需要再次输入账号密码登录,浏览器发送表单验证身份信息,但现实是我们不需要第二次登录就可以浏览站内的各个网页。使用浏览器访问根目录的时候,如上图所示,会得index.html文件表示的网页,查看该网页的Cookie信息,可以看到name是123456abc,有效时间是3分钟,和我们在服务端构建响应时写的内容一模一样。HTTP协议中文名为超文本传输协议,既是最经典的应用层协议,也是应用最广泛的协议。

2025-03-25 10:46:20 1578

原创 Linux:(网络协议定制)

我们以后代码中的序列化和反序列化,绝对不要自己写。在微信聊天的过程中,用户A发送的与用户B接受的都是同一种数据结构,所以用户A构建的message是按照特定的成员顺序组成的,用户B就必须按照这样的成员顺序去使用它接收到的message。协议本质是一种“约定”,在前面的TCP和UDP网络通信中,读写数据的时候都是按照"字符串"的形式发送和接收的,那我们如果不发送字符串,而是要传送一些结构化的数据怎么办呢?用户B接收到一个字符串报文,然后用户B的应用层(微信软件)将接收到的报文反序列化,还原回原来结构化的。

2025-03-20 00:59:59 647

原创 Linux:(socket套接字——TCP协议,守护进程)

我们让服务器进程运行起来打开另一个会话,使用查看使用网络的进程网络信息其中,第一个协议为tcp,IP第hi为0.0.0.0,端口号为8080的s进程就是我们的服务器进程。此时我们关闭运行服务器进程的Xshell对话框,再从另一个没关闭的对话框内再次查看网络进程信息,此时发现我们的服务器进程不见了。那问题就出现了,我只是关闭会话,并没让服务器进程退出,怎么服务器进程也没了。实际上,我们每次在Xshell上创建一个会话,Linux机器上都会运行一个名字为bash的进程。

2025-03-17 15:51:40 986

原创 Luinx:(socket套接字——UDP协议)

当bind绑定的IP地址是0.0.0.0的时候,这台计算机就会接收所有网络的请求,也会根据相关的端口处理。而Linux下一切皆文件,所以网络在系统看来也是一个"文件",也有维护它的结构体,也有自己的文件描述符。比如说,我们用QQ聊天,实际上使用的是手机上的客户端应用,我们使用QQ聊天等都是在向QQ的服务器进程发起网络请求。如果服务器仅绑定本地环回的IP地址,那么当另一台计算机的客户端想要通过公网IP向计算机发出请求时,由于绑定的IP地址与客户端IP地址不一样,服务端就会忽略客户端的请求。

2025-03-15 12:53:39 1041

原创 Linux:网络(网络编程基础)

其实在我们的生活中就有协议,比如说我跟同学约好了去水上公园玩,我告诉他,只要我给你打电话了,你下楼来找我就可以了。在这里,虽然我打电话只是一个行为,但是我们二人早就商量好了,只要我打电话他就下楼,这是我们之间不需要解释共识。所以,协议的本质就是约定。在计算机中也是一样,比如说两台计算机进行通信。两台计算机约定好,其中一台计算机给另一台计算机发送一个整形数字,每个整形数字代表的操作不同。比如 ,一台计算机给另一台计算机发送整型数字1,而数字1代表重启电脑,那另一台计算机收到数字1后就会直接重新启动。

2025-03-10 23:31:02 1119 1

原创 Linux:多线程(单例模式,其他常见的锁,读者写者问题)

设计模式就是一些大佬在编写代码的过程中,针对一些经典常见场景,给定对应解决方案,于是将其设计成一种模式,以后我们想使用就只需要套这个模式就好了。某些类,只应该具有一个对象(实例化),称之为单例。在很多服务器开发场景中,经常需要让服务器加载很多数据到内存中,此时往往需要单例的类来管理这些数据。1. 初始化读写锁功能:该函数用于初始化一个读写锁对象rwlock,可以指定属性attr,一般情况下可以传入NULL使用默认属性。参数rwlock:指向读写锁对象的指针,attr:读写锁的属性对象指针,可以为NULL。

2025-03-09 01:17:22 926

原创 Linux:多线程(三.POSIX信号量、生产消费模型、线程池)

超市是数据“交易”的场所,即共享资源或临界资源的存储空间(也可以叫缓冲区)。在多线程编程中,这通常是一个数据结构(如队列、缓冲区等),用于临时存储数据,供生产者和消费者线程进行访问。

2025-03-08 00:18:48 853

原创 Linux:多线程(二.理解pthread_t、线程互斥与同步)

关于静态变量与全局变量的小知识:静态变量(包括静态局部变量和静态全局变量)以及全局变量的初始化时间是在程序执行之前的一个特定阶段对于全局变量,静态变量,它们的生命周期与整个程序的生命周期相同。当程序结束时,操作系统会自动释放程序占用的资源作用域不同全局变量的作用域是整个程序,即在定义它的文件中的任何地方都可以访问。静态变量的作用域限定在定义它的函数或文件内部,外部无法直接访问。生命周期不同全局变量的生命周期是整个程序的运行期间,即在程序启动时分配内存,在程序结束时释放内存。

2025-03-04 23:19:05 1157

原创 Linux:多线程(一.Linux线程概念、线程控制——创建、等待、退出、分离,封装一下线程)

目录1. Linux线程概念1.1概念1.2线程的理解Linux中线程设计的巧思1.3Linux线程VS进程1.4调度与轻量级进程1.5程序如何划分(重拾页表、见一下LWP)2.线程控制2.1引言与原生库2.2线程创建pthread_create()与pthread_self()线程的特殊情况2.3线程等待pthread_join()函数2.4线程退出pthread_exit()函数pthread_cancel()函数2.5线程分离基本概念pthread_detach 函数3.重要结论线程是进程内部的一个执

2025-03-02 00:19:40 876

空空如也

空空如也

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

TA关注的人

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