- 博客(60)
- 收藏
- 关注
原创 基于python的问卷系统自动化测试及手工测试项目书
在软件测试领域,自动化测试凭借其高效、可重复的优势,成为保障项目质量的重要手段。本文将以问卷测试系统为实际案例,实现自动化测试,从测试用例设计、脚本开发到测试报告补充,完整拆解 Python 方向 Web 自动化测试的实施流程,确保问卷测试系统能稳定、高效地支持用户完成问卷创建、填写、提交及数据统计等操作。
2025-09-05 17:51:02
1005
原创 测试用例设计辅助工具
摘要:正交法是一种高效的多因素测试设计方法,通过正交表筛选代表性组合,大幅减少测试用例数量(如4个字段32种组合可缩减至数个)。其核心是确保各因素水平两两组合覆盖,同时保持均衡性。实践步骤包括:1)确定因素和水平;2)用工具生成正交表;3)补充关键用例(如全空场景)。相比全排列测试,正交法在保证覆盖度的前提下显著提升测试效率,尤其适用于多字段表单测试场景。(149字)
2025-08-30 14:21:56
964
原创 博客系统Web自动化测试项目:从用例设计到脚本执行全流程解析
本文以博客系统为案例,详细介绍了基于Selenium的Web自动化测试实施流程。通过设计分层测试用例,使用Python+PyCharm搭建测试框架,实现了对登录、首页、详情页、编辑页等核心功能的自动化测试。测试脚本采用模块化设计,包含浏览器配置、元素定位、异常处理和截图功能。测试结果表明,系统能正确识别登录状态、拦截非法操作,各功能模块交互正常。项目实践展示了自动化测试在验证系统功能完整性、提升测试效率方面的优势,为同类Web项目的质量保障提供了可复用的技术方案。
2025-08-30 00:00:03
1648
原创 C++ 方向 Web 自动化测试实战博客系统思路
摘要:本文以博客系统为例,详细介绍了基于Python+Selenium的Web自动化测试实施流程。首先设计了覆盖登录、博客列表、编辑和详情4大核心模块的测试用例,包含正向和异常场景。然后采用模块化开发思路,通过Utils工具类管理驱动和截图,按POM模式封装各页面操作,最终整合成可执行的测试脚本。整个方案实现了测试用例设计、脚本开发和报告生成的完整闭环,为C++Web项目提供了可落地的自动化测试实践参考。(150字)
2025-08-28 20:43:37
1043
原创 Web 自动化测试常用函数实战(三)
本文介绍了Wed自动化测试常用的核心函数及实践技巧。主要内容包括:1)元素定位与对象操作函数;2)三种等待方式(强制等待、隐式等待、显式等待)的区别与适用场景;3)浏览器导航控制(前进/后退/刷新);4)文件上传绕过系统弹窗的技巧;5)浏览器参数设置(无头模式、页面加载策略)。重点分析了代码执行速度与页面加载速度不匹配的问题,提供了多种解决方案,并通过具体案例演示了各函数的正确使用方法及常见错误处理方式。文章还强调了不同等待策略的选择依据,以及浏览器配置对测试效率的影响。
2025-08-28 12:50:05
945
原创 Wed 自动化测试常用函数实践(二)
本文介绍了Web自动化测试中的窗口控制与弹窗处理函数。主要内容包括:1)窗口切换方法(switch_to.window())及句柄管理;2)窗口大小控制(最大化、最小化、自定义尺寸)和屏幕截图(带时间戳命名);3)弹窗处理流程,涵盖警告弹窗、确认弹窗和提示弹窗的接受/取消操作。文章通过代码示例演示了各函数的实际应用,并提供了避坑要点,如切换窗口后的操作对象变化、弹窗处理对其他元素定位的影响等。这些核心函数能有效解决多窗口管理和弹窗交互等自动化测试常见问题。
2025-08-27 23:02:26
649
原创 Web 自动化测试常用函数实战(一)
本文系统梳理了Web自动化测试中的八大核心函数模块,重点讲解Selenium+Python环境下的元素定位和对象操作函数。在元素定位方面,详细对比了CSS选择器和XPath两种主流方式,分别介绍其语法规则、使用场景及避坑要点。在对象操作函数部分,深入解析了click()、send_keys()、clear()等核心交互方法,以及获取文本、属性的text和get_attribute()函数。
2025-08-27 21:09:07
1042
原创 自动化测试概念与 Web 自动化实战(基于 Selenium)
本文系统介绍了自动化测试在C++项目中的应用,重点分析了Web自动化测试的核心工具Selenium及其实现流程。首先阐述了自动化测试的本质是通过程序代替人工操作,提升回归测试效率,但明确指出其不能完全取代人工测试。文章详细解析了接口自动化和UI自动化的区别,并介绍了理想的"自动化测试金字塔"模型。在实战部分,通过百度搜索案例演示了Selenium+Python的环境搭建和脚本编写过程,包括元素定位、操作执行等关键步骤,最后还深入剖析了Selenium与浏览器驱动的工作流程。
2025-08-26 21:39:20
1089
原创 软件测试分类全解析:从基础概念到实战应用
本文系统梳理了软件测试的常见分类方式及其应用场景。从测试目标维度,详细解析了界面测试、功能测试、性能测试、可靠性测试、安全性测试和易用性测试六大核心类型;从执行方式维度,区分了静态测试和动态测试;从测试方法维度,阐述了白盒测试、黑盒测试和灰盒测试的特点;从测试阶段维度,介绍了单元测试、集成测试、系统测试和验收测试的全流程覆盖。此外还探讨了手工测试与自动化测试的优劣对比,以及其他分类方式如Alpha/Beta测试、国际化测试等。
2025-08-26 09:01:29
879
原创 软件测试用例指南:覆盖 6 大设计方法
本文系统介绍了软件测试中测试用例的设计方法与思路。首先阐述了测试用例的定义和重要性,指出测试用例是标准化测试的核心工具,能有效避免漏测、提高测试覆盖率和可追溯性。文章提出了"万能公式"测试设计方法,涵盖功能、界面、性能、兼容性、易用性、安全等6大维度。重点讲解了6种具体测试用例设计方法:等价类划分法、边界值分析法、正交试验法、判定表法、场景法和错误推测法,并分别通过邮箱注册案例进行了详细说明。这些方法既可单独使用,也可组合应用,能有效提高测试效率和质量,确保软件产品的稳定性和可靠性。
2025-08-24 21:33:00
1384
原创 软件测试 BUG 全攻略:从定义到争议解决,测试人必看
【摘要】软件测试是一项贯穿产品生命周期的系统性工作,核心在于全流程的BUG管理。测试包含需求分析、测试计划、设计开发、执行评估等7个阶段,需关注线上/线下环境差异。有效BUG管理需明确三要素:1)定义标准(程序与需求不符或未满足用户合理预期);2)描述规范(包含版本、环境、步骤等5要素);3)分级制度(崩溃/严重/一般/次要4级)。BUG生命周期含新建、确认、修复等7个状态,测试需全程跟踪。处理与开发分歧时,应通过清晰描述、换位思考、依据标准、提供方案4步理性解决,必要时启动多方评审。
2025-08-24 17:37:00
1021
原创 软件测试核心概念拆解:需求、开发模型与测试模型全解析
软件测试工作需关注三大核心问题:需求定义、开发模型和测试模型。需求分为用户需求和软件需求,后者是开发和测试的具体依据。常见开发模型包括瀑布模型、螺旋模型、增量/迭代模型和敏捷模型,各有特点和适用场景。测试模型主要有V模型和W模型,决定测试介入时机,W模型强调测试与开发同步进行。理解这些基础概念是确保软件质量的关键第一步,为后续测试工作提供明确方向。
2025-08-19 19:56:32
850
原创 认识测试:从定义到岗位,再到核心能力
本文系统解析软件测试的核心概念与职业发展。测试并非IT行业专属,生活中处处可见测试逻辑,其本质是验证产品是否符合用户需求。测试岗位分为测试开发工程师和测试工程师两类,前者侧重开发测试工具,后者聚焦业务测试。与开发岗相比,测试更注重问题发现而非产品构建,要求"广而全"的知识面。优秀测试人员需具备沟通能力、自动化技术、用例设计等6项核心素质。文章强调测试是保障产品质量的关键环节,需要专业能力与责任感,建议从业者立足兴趣深耕该领域。
2025-08-19 09:44:06
865
原创 C++ 类和对象详解(1)
本文系统讲解了C++中类和对象的核心概念,包括类定义、访问限定符、类域、实例化、对象大小计算和this指针。类通过封装数据和方法实现了面向对象编程,访问限定符(public/private)控制成员访问权限,类域确保成员隔离。对象实例化后仅存储成员变量,成员函数共享存储。重点解析了this指针的隐含传递机制及其在空指针调用时的表现。最后对比了C语言和C++实现栈结构的差异,展示了C++通过封装带来的代码简化和安全性提升。掌握这些基础概念是进行C++面向对象编程的关键。
2025-08-13 20:30:20
1007
原创 我的创作纪念日
但最大的收获,其实是自己的蜕变。而写文章时必须做到的 “逻辑闭环”,又会倒逼我在第二天更严谨地排查问题 —— 这就像个正向循环,知识的积累喂饱了创作,创作又反哺了学习思考,这种方法让我的学习效率提高了不止一倍。数据的增长也成了意外的动力,现在后台能收到来自各行各业开发者的关注 —— 这些数字背后,是被认可的底气,也是倒逼自己输出更严谨内容的压力。我过去写过一段基于C语言的扫雷代码,虽然代码内容不太复杂,但是,因为这是第一次写一个小游戏,所以对于我自己而言,属于第一个小里程杯式的成就,代码内容如下,详解见。
2025-08-12 20:53:32
805
原创 从 0 到 1 学 C++:为什么它值得你投入,以及入门必懂的核心知识点
摘要:C++作为一门兼具高效性与复杂性的编程语言,在操作系统、游戏引擎、音视频处理等领域占据核心地位。文章剖析了C++的长青秘诀:其性能优势在底层开发、高频交易等场景不可替代;梳理了从1979年诞生到C++26规划中的演进历程,重点介绍了C++11智能指针、C++20模块化等里程碑特性。针对初学者,文章提炼了8个核心知识点:命名空间解决命名冲突、类型自适应的IO流、缺省参数简化调用、函数重载实现多态、引用替代指针提升安全性、const保护数据、inline优化短函数性能、nullptr明确空指针语义。
2025-08-12 20:15:40
1334
原创 二叉树链式结构的遍历实现
本文系统介绍了二叉树的基本操作实现,包括节点创建、前序/中序遍历、节点统计、高度计算、层序遍历和完全二叉树判断等。通过递归方式实现了二叉树的核心操作,重点讲解了前序遍历的执行过程、节点计数方法(注意避免静态变量陷阱)、高度计算的递归逻辑(取左右子树最大值+1),以及层序遍历的队列实现方法。文章还详细分析了完全二叉树的判断逻辑,强调在遇到第一个空节点后检查后续节点的连续性。所有代码示例均展示了如何通过指针操作和递归分解来处理树形结构,体现了"分而治之"的算法思想。
2025-08-02 21:58:03
861
原创 建堆算法以及TopK算法分析
本文分析了堆排序算法的时间复杂度,并重点讨论了Top-K问题的堆解法。通过数学推导证明建堆时间复杂度为O(N),优于直接排序的O(NlogN)。针对Top-K问题,提出使用小根堆(求最大)或大根堆(求最小)的高效解决方案,只需维护大小为K的堆结构,时间效率为O(NlogK),空间占用极小,特别适合大数据场景。文章通过实例演示了堆的筛选机制,并对比了与其他算法(如快速选择)的优劣,指出堆解法在时间、空间上的综合优势。最后提供了C语言实现代码,展示如何从文件中高效获取前K个元素。
2025-08-02 11:23:08
1146
原创 堆的理论知识以及实现
堆是一种基于完全二叉树的数据结构,分为大顶堆(父节点≥子节点)和小顶堆(父节点≤子节点)。其核心特性包括:1. 存储结构采用数组顺序存储,利用完全二叉树的紧凑特性实现空间高效;2. 通过索引快速定位父子节点(父i→子2i+1/2i+2);3. 支持高效插入(O(logN))和删除(O(logN))操作。堆排序利用堆特性实现升序/降序:升序建大堆,降序建小堆。与操作系统内存管理的"堆"概念无关。典型应用包括优先队列和TopK问题求解。
2025-07-29 22:02:17
1024
原创 二叉树基本概念
摘要:本文系统介绍了二叉树的基本概念、存储结构和遍历方法。主要内容包括:1)二叉树定义及两种存储结构(顺序存储适合完全二叉树,链式存储使用二叉/三叉链);2)特殊二叉树(满二叉树和完全二叉树)的性质及节点计算公式;3)二叉搜索树的查找原理;4)四种遍历方式(前序、中序、后序递归遍历及层序遍历)。重点阐述了顺序存储的父子节点下标关系,以及二叉搜索树利用"左小右大"特性实现高效查找的机制。
2025-07-28 22:35:31
395
原创 树的基本概念
树是一种非线性数据结构,由具有层次关系的有限结点组成,包含根节点、子节点等。树的相关概念包括度、叶节点、父节点、子树等,其中树的度指最大节点的度,深度是节点的最大层次。树的表示方法有多种,如双亲表示法、孩子兄弟表示法等。树结构常用于表示文件系统的目录结构等实际应用场景。
2025-07-27 21:43:19
315
原创 栈和队列经典面试题解析
本文摘要: 通过两个队列实现栈结构,利用队列的先进先出特性模拟栈的后进先出特性。关键是通过辅助队列实现元素反转,保持一个队列始终为空用于操作中转。提供了完整的C语言实现代码,包含初始化、入栈、出栈等操作。 设计循环队列时使用数组存储,通过头尾指针和取模运算实现环形缓冲。重点解决了队空/队满的判定问题,采用两种方案:记录元素个数或多开一个空间。给出了包含创建、入队、出队等操作的完整实现。 解析了5道经典栈和队列选择题,包括栈的出栈顺序、不可能的出栈序列、循环队列元素计算等题目,通过具体示例说明解题思路和原理。
2025-07-26 21:49:47
785
原创 队列的核心知识
本文介绍了队列的基本概念和实现方法。队列是一种先进先出(FIFO)的线性表,支持在队尾插入元素(入队)和队头删除元素(出队)操作。文章推荐使用链表实现队列,通过定义包含队头指针、队尾指针和队列大小的结构体来管理队列。详细讲解了队列的初始化、入队、出队、获取队头/队尾元素、判空、销毁等核心操作的实现代码。最后通过测试代码验证了队列的正确性,并简要提及了循环队列的概念及其在生产者消费者模型中的应用。文章提供了完整的C语言实现代码示例。
2025-07-26 09:56:11
434
原创 栈的核心原理
本文介绍了栈的概念、实现方式及核心操作。栈是一种遵循后进先出(LIFO)原则的线性表,支持在固定端(栈顶)进行插入(Push)和删除(Pop)操作。文章详细说明了使用数组实现栈的方法,包括结构定义(包含数组指针、栈顶索引和容量)、初始化、销毁、入栈、出栈、获取栈顶元素、判空和获取栈大小等核心操作的代码实现。其中重点分析了入栈时的动态扩容机制和不同栈顶指针设置方式的差异。最后通过测试代码演示了栈的基本操作流程。
2025-07-25 20:16:34
459
原创 双向链表详解及实现
双向链表作为链表的重要形式,相比单链表增加了前驱指针,使得节点可以双向遍历,在插入、删除等操作上更加灵活。本文将详细讲解双向链表的结构、实现方法,并与顺序表进行对比分析,帮助大家深入理解双向链表。
2025-07-22 22:25:19
724
原创 链表经典算法题(一)
本文总结了单链表在算法题目中的常见应用及解法,包括以下经典问题:1. 移除链表元素 - 通过创建新链表或原地修改实现;2. 反转链表 - 使用头插法或三指针法;3. 合并有序链表 - 双指针比较进行尾插;4. 寻找中间节点 - 快慢指针技巧;5. 环形链表约瑟夫问题 - 循环链表模拟;6. 链表分割 - 创建大小链表分别处理。文章还介绍了带头节点优化方法及8种链表结构,重点分析单链表和双向带头循环链表的特性与实现差异。所有解法均提供了详细思路图示和完整C语言代码实现。
2025-07-22 20:17:22
1142
原创 单链表专题
本文系统介绍了单链表的核心概念与实现方法。首先阐述了链表存在的意义,通过“火车车厢”的比喻形象说明了链表的离散存储特性,并对比了链表与顺序表在动态内存管理、插入删除效率等方面的差异。随后详细解析了单链表节点结构设计,包含数据域和指针域的内存布局。文章重点讲解了单链表的11种核心操作实现。
2025-07-20 23:02:08
928
原创 顺序表应用实践(通讯录系统、 移除元素、合并两个有序数组)
顺序表作为线性表的基础实现方式,在实际编程中有着广泛的应用。本文将围绕动态顺序表的两大核心应用场景展开,深入剖析其实现原理与优化思路。
2025-06-28 23:22:14
1071
原创 C语言内存函数
在 C 语言的编程世界里,内存管理至关重要,而内存函数则是开发者操控内存的得力工具。今天,我们就一同深入探索 C 语言中几个常用内存函数的奥秘,包括memcpymemmovememset和memcmp。
2025-05-14 10:35:25
555
原创 字符函数和字符串函数
在编程的过程中,我们经常要处理字符和字符串,为了方便操作字符和字符串,C语言标准库中提供了一系列库函数,接下来我们就学习一下这些函数。
2025-05-11 23:51:48
1655
原创 指针运算典型例题解析
0x1就是结构体指针+1,要跳过一个结构体,结构体的大小是20个字节,所以就是+20字节 —— 如果是10进制则是:0x100020,但是现在是16进制,所以是0x100014。unsigned int* 强制转换为,无符号整型的指针,+1是跳过一个整型的4个字节,所以是0x100004。所以,按照逗号表达式计算括号中保留了:1,3,5. 又因为是3行两列的,所以用 0 补位。a[0] 是第一行的数组名,数组名表示首元素的地址,其实就是&a[0][0]p 是数组指针,p 指向的数组是 4 个整型元素的。
2025-05-10 23:51:29
1560
1
原创 数组和指针典型例题合集(一维数组、字符数组、二维数组)
/ a是首元素的地址——类型是int*,a+1跳过一个整型,a+1就是第二个元素的地址。// 而sizeof(&a)取出的是整个数组的地址,是地址就是 4/8 个字节。// &a+1 跳过一个数组,数组的地址还是地址,地址就是 4/8 个字节。// *(&a[0] + 1)是对第二行的地址解引用,就是第二行。// arr是数组名,表示首元素的地址,arr+0还是首元素的地址。// &p[0] 是首元素地址,&p[0] + 1是第二个元素地址。
2025-05-08 15:23:31
1541
原创 快速get sizeof和strlen的区别 !
sizeof 和 strlen的对比:sizeof1. sizeof是操作符。2. sizeof计算操作数所占内存的大小,单位是字节。3. 不关注内存中存放什么数据。4.sizeof 括号中有表达式的话,表达式是不参与计算的!!!//表达式不计算int main()int a = 8;//short类型return 0;short 2个字节int 4个字节所以在运行是 int 被截断了运行结果:那么,为什么不计算呢?
2025-05-07 17:13:39
554
原创 深⼊理解指针(8)
如果我们有4个函数的地址,要把函数的地址存到⼀个数组中,那这个数组就叫函数指针数组,那函数指针的数组如何定义呢?如果要计算其他运算,就要对现在的代码进行补充 case 的语句会越来越长,那么我们有没有办法简化代码呢?增加函数、修改菜单、再在函数指针数组种加入函数名、再修改循环中的数据即可。为什么p3 是指针变量, p4是整型变量呢?//arr是指针数组 —— 存放的是指针。以上是两个整数的运算,完成的加减乘除运算。//p3 是指针变量, p4是整型变量。进行8 , 4 的 4 种函数运算。
2025-05-01 23:45:02
874
原创 深⼊理解指针(7)
我们发现:以函数是有地址的,函数名就是函数的地址,当然也可以通过& 函数名 的⽅式获得函数的地址。//(void (*)())0 —— 将0强制转换为 void (*)() 的函数指针类型。// signal( int, void(*)(int) ) —— 其中少函数值的返回类型。//(void (*)()) —— 括弧里面放类型就是强制转换。// 而剩下的void ( )(int);—— 这就是返回类型。// void (*)()—— 是函数指针类型。// void(*)(int) —— 参数2。
2025-05-01 00:07:50
617
原创 深入了解指针(6)
所以,根据数组名是数组⾸元素的地址这个规则,⼆维数组的数组名表⽰的就是第⼀⾏的地址,是⼀维数组的地址。根据上⾯的例⼦,第⼀⾏的⼀维数组的类型就是int [5] ,所以第⼀⾏的地址的类型就是数组指针类型int(*)[5]。那就意味着⼆维数组传参本质上也是传递了地址,传递的是第⼀⾏这个⼀维数组的地址,那么形参也是可以写成指针形式的。⾸先我们再次理解⼀下⼆维数组,⼆维数组起始可以看做是每个元素是⼀维数组的数组,也就是⼆维 数组的每个元素是⼀个⼀维数组。那么⼆维数组的⾸元素就是第⼀⾏,是个⼀维数组。
2025-04-28 19:10:22
765
原创 深入理解指针(5)
相同的字符串在C语言中,没有必要保存两次 ===== 因为常量字符串没有办法被改变,所以没有必要。所以,大家公用一份是能满足的,这样也能够节省空间。因为常量字符串是不能被修改的,否则,编译器报错。常量字符串,在C语言中也有自己的空间。故而,str4 和 str3 一样。str3指向常量字符串的第一个地址。一般在代码段中存放常量字符串。为什么是这样的运行结果呢?继续go,并且观察p2。
2025-04-27 23:22:12
397
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅