1,自我介绍
2,项目是怎么测的?(登陆页面怎样测的功能?)
- 界面UI测试:
- 界面设计
页面布局是否合理,输入框和按钮是否对齐, 输入框和按钮的大小高度是否合适
页面的颜色是否符合用户习惯
错误信息是否清晰易懂,能否帮助用户快速定位问题 - 交互设计
验证在输入账号密码时,是否有实时验证(如密码强度提示)以提高用户体验
验证登录过程中是否有合理等待提示,如加载动画或进度条
- 界面设计
- 功能测试:
- 正确登录
输入正确账号,正确密码,点击登录,登陆成功,跳转到正确页面 - 失败登录
输入正确账号,错误密码,点击登录,登录失败,提示相应错误信息
账号,密码为空,点击登录,登录失败,提示相应错误信息
- 正确登录
- 性能测试:
在不同网络环境下(如:Wi-Fi,5G,4G等)的登录的响应时间
跳转页面时花费的时间 - 安全测试:
账号和密码输入框是否防止SQL注入攻击
账号和密码输入框是否防止XSS攻击
密码是否前端加密,在网络传输过程中是否加密
错误登录次数限制(防止暴力破解)
是否支持多用户在同一机器上登录
一个用户在不同终端上登录
用户异地登录 - 易用测试:
检验登录错误提示是否明确,易于理解
登录过程中是否流畅,无卡顿现象
登录界面是否简洁明了,易于操作 - 兼容性测试
BS架构:不同浏览器测试,比如IE,火狐,谷歌,360等
APP:在主流的不同机型,不同分辨率,不同操作系统的手机上进行测试,如华为,Xiaomi,vivo,OPPO,苹果等
3,测试用例应该包括那些信息?
测试用例编号、测试环境、测试功能、测试步骤、测试数据、预期结果、实际结果
- 测试用例编号:
唯一标识符,用于区分和跟踪不同的测试用例。
编号通常遵循一定的规则,如项目代码+模块代码+流水号。 - 测试环境:
描述执行测试用例所需的硬件、软件和网络环境配置。
包括操作系统、浏览器版本、数据库版本、服务器配置等。 - 测试功能:
简要描述测试用例所针对的软件功能或特性。
可以是某个具体的功能模块、业务流程或用户场景。 - 测试步骤:
详细描述执行测试所需的操作步骤。
包括用户操作、系统输入、等待时间等。
步骤应该清晰、具体,以便测试人员能够准确执行。 - 测试数据:
执行测试步骤时所需的输入数据。
可以是预定义的数据集、文件、数据库记录或用户输入。
数据应该能够覆盖测试场景中的各种情况。 - 预期结果:
根据测试步骤和测试数据,预期系统应返回的输出或状态。
可以是具体的界面显示、输出数据、系统提示等。
预期结果应该与测试功能的要求相一致。 - 实际结果:
执行测试后实际得到的输出或系统状态。
测试人员需要记录实际结果与预期结果的对比情况。
如果实际结果与预期结果不符,则可能表明存在缺陷或问题。
4,软件开发流程(开发模型优缺点)?
软件开发生命周期(以及软件测试的生命周期)
软件开发生命周期:需求分析,计划,设计,编码,测试,运行维护。
软件测试生命周期:需求分析,测试计划,测试设计,测试开发,测试执行,测试评估。
-
瀑布模型
描述: 瀑布模型是将软件开发划分为不同的阶段,只有上一个阶段完成了才能进入到下一个阶段。
优点: 对于开发周期短、成本不高、需求少的小型项目来说有着比较好的优势;适用于需求易于定义、不易变动的软件系统的开发。
缺点: 开发过程不可逆转,否则代价太大;无法适应用户的需求变更,只能等到项目完成后,用户才能够看到项目结果。 -
螺旋模型
描述: 螺旋模型将开发过程分几个螺旋周期,在每个周期开始之前都会进行风险分析。
优点: 每一阶段都会进行风险分析,避免问题到达下一个阶段
缺点: 公司需要一定成本,一旦风险分析错误,就会带来一定的损失 -
V模型
描述: V模型和瀑布模型有一些共同的特性,V模型中的过程从左到右,描述了基本的开发过程和测试行为。
优点: V模型明确地标识出了在开发过程中一般应完成的测试级别。
缺点: 测试介入太晚了,这不符合尽早测试的原则,会增加很多开发成本,以至于影响软件交付工期。 -
W模型
描述:在V模型中增加软件各开发阶段同步进行的测试,演化为W模型,测试与开发是同步进行的,从而有利于尽早的发现问题。
优点:测试人员更早的介入了需求
缺点:开发模型和测试模型保持前后的线性关系,只有等用户需求完成后才能验收做测试准备等等,可以看出是是重文档,重过程的模型,不支持敏捷模式的。 -
迭代模型:
迭代模型包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。
在某种程度上,开发迭代是一次完整地经过所有工作流程的过程:需求分析、设计、实施和测试工作流程。实质上,它类似小型的瀑布式项目。
- 灵活性:迭代开发具有高度的灵活性,能够适应需求的变化,适合需求不断变化或不确定的项目。
- 持续改进:迭代方法允许通过连续的循环不断改进软件,从而产生可能更加完善的最终产品。
- 客户参与:定期反馈周期让客户参与整个开发过程,确保产品与他们的期望紧密结合。
-
增量模型:
增量模型把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。
采用增量模型进行开发时,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。增量模型的特点是降低软件开发的风险,开发顺序灵活,将待开发的软件系统模块化和组件化。
- 早期交付:增量开发允许系统功能部分的早期交付,从而在项目时间表内更快地为客户提供切实的好处。
- 部分功能:客户可以更早地开始使用部分功能并从中受益,这对于需要快速部署某些功能的项目至关重要。
- 更轻松的管理:每个增量都可以作为一个独立的项目进行管理,从而简化了进度的控制和监控。
5,你对敏捷开发是怎样认识的?
所谓敏捷开发,简言之就是是一种以人为核心、迭代、循序渐进的开发方法。敏捷方法强调以人为本,专于交付对客户有价值的软件。在高度协作的开环境中,使用迭代式的方式进行增量开发,经常使用反馈 进行思考、反省和总结,不停的进行自我调整和完善。
测试人员在敏捷方法中的价值:
在敏捷方法中,开发人员的主导作用更明显,系统设计、编程实现、单元测试、重构等看似关键的一些任务都落在开发人员身上,测试人员容易被边缘化。那么,在敏捷方法中,测试人员的价值又如何体现呢?
- 在需求和功能设计讨论上,测试人员可以站在客户角度来阐述自己的观点,扮演“用户代表”角色,强调用户体验,真正体现测试人员和开发人员的互补作用。
- 测试人员不仅扮演“用户代表”角色,而且通过需求讨论、代码复审等各种活动及时地提供质量反馈,包括代码质量、接口一致性等,保证在产品构造的整个过程中质量受到足够的关注,以提高质量改进的持续性和可视性。
- 测试人员应积极参与单元测试,即使不参加单元测试,也应督促开发人员进行单元测试,确保单元测试达到80% 以上覆盖率,确保开发出具有良好可测试性的代码。
- 在敏捷方法中,往往将一个大的系统开发分解成多个小的子系统(模块或组件),集成测试和端到端(End-to-End)测试显得更为重要,测试人员在这些测试上能发挥更大的作用。
- 产品发布前,验收测试和回归测试依然不可缺少,这更是测试人员的用武之地。
一个迭代周期结束后,对缺陷根本原因进行分析、总结规律,帮助开发人员建立良好的习惯,预防缺陷,从根本上提高产品质量。
理想情况下,测试人员掌握设计模式、具有很好的编程能力,可以和开发人员进行角色互换,如在当前版本开发中担任测试人员角色,在下一个版本开发中则担任开发人员角色。这样双方对不同角色的工作有着更深刻的认识,消除沟通的障碍,开发的效率和质量会有进一步的提高。
敏捷开发者价值观:
① 个体与交互 胜于 过程与工具
② 可用的软件 胜于 复杂的文档
③ 客户协作 胜于 客户谈判
④ 响应变化 胜于 遵循计划
6,如果敏捷里的一个迭代,整个流程是怎样的?(讲一下敏捷的整个流程:需求——上线)
敏捷开发是一种以人为核心、迭代、循序渐进的方法论,用于应对快速变化的需求。在敏捷开发中,整个流程通常围绕需求到上线的迭代进行,具体步骤如下:
-
需求阶段:
确定项目目标和愿景,通过与利益相关者沟通,明确项目的业务需求和功能需求。
进行需求分析,识别用户故事(User Stories)或任务,这些故事或任务描述了产品的增量功能或改进。
优先级排序,根据业务价值、难度等因素对需求进行优先级排序。 -
计划阶段:
根据优先级排序的需求,制定迭代计划。确定每个迭代的目标、预期完成的功能、资源分配和时间表。
评估团队容量,确保能够按时交付计划内的功能。 -
设计阶段:
基于用户故事或任务,进行详细的设计工作,包括但不限于界面设计、数据库设计、系统架构设计等。
设计评审,确保设计满足需求规格和团队的标准。 -
开发阶段:
按照设计文档进行编码和其他必要的开发工作。
每日站立会议(Daily Scrum)以检查进度、解决问题和调整计划。 -
测试阶段:
进行单元测试、集成测试和系统测试,确保代码质量和功能正确性。
发现问题后,通过敏捷流程中的反馈机制快速修复。 -
评审与反馈阶段:
向利益相关者展示新开发的功能,获取反馈。
根据反馈进行调整,可能是功能的细化、性能优化等。 -
上线阶段:
准备上线环境,确保生产环境与测试环境一致。
进行最后的测试,确保没有问题后部署到生产环境。
监控上线后的性能和稳定性,及时处理任何出现的问题。 -
回顾与改进阶段:
在每个迭代结束时,进行回顾会议(Retrospective),讨论哪些做得好,哪些可以改进。
根据回顾会议的结论,为下一个迭代或未来的工作制定改进计划。
通过这种方式,敏捷开发允许团队快速响应变化,不断交付价值,同时保持灵活性和适应性。
7, 敏捷测试测试点是越大越好,还是越小越好?
- 在敏捷测试中,测试点的大小并不是绝对的,而是需要根据项目的具体情况来灵活调整。
- 较大的测试点可以提高测试效率,但可能会遗漏细节问题;较小的测试点可以深入测试软件的特定部分,但可能会增加测试成本。
- 因此,在确定测试点的大小时,需要综合考虑项目的需求、风险、迭代周期和测试成本等因素,以找到最佳的平衡点。
8,单元测试,集成测试,端对端测试,从测试角度来说有什么区别吗?
-
单元测试:
粒度最小,通常由开发小组采用白盒方式进行测试,主要测试单元是否符合设计规格。
测试内容主要关注单个模块或函数的功能正确性,确保最小可测试单元的质量。
使用阶段为开发阶段,是开发人员在开发过程中要做的事情。 -
集成测试:
粒度介于单元测试和系统测试之间,由开发小组采用白盒加黑盒的方式来测试,既验证设计又验证需求。
测试内容关注模块与模块之间的交互以及功能正确性,确保各部件能够正确集成并工作。
使用阶段为测试周期内的早期阶段,在开发过程中进行,以确保集成后的系统能够正常工作。 -
端对端(E2E)测试:
粒度最大,通常涉及多个组件和系统,模拟真实用户场景,测试应用程序从开始到结束的整个流程。
测试内容侧重于从用户的角度测试整个应用程序或系统,确保所有组件作为一个整体正确地功能。
测试环境通常在类似生产环境的环境中进行,尽可能地模拟真实用户条件。
自动化程度通常很高,以有效地模拟复杂的用户交互和场景。
综上所述,这三种测试方法在软件开发过程中扮演着不同的角色,从单元测试的微观层面到端对端测试的宏观层面,共同确保软件的质量和用户满意度
9,详细解释一下因果图的设计方法?
-
分析软件规格说明:首先,需要分析软件规格说明中的输入条件(即原因)和输出条件(即结果)。这些输入和输出条件构成了因果图的基础。给每个原因和结果赋予一个标识符,以便在因果图中进行标识。
-
画出因果图:根据原因和结果之间的关系,画出因果图。在因果图上,使用特定的记号表明约束条件或限制条件,这些记号用于表示某些输入条件组合下,输出条件可能不会出现的情况。
-
转换为判定表:将因果图转换为判定表,这是通过列出所有输入条件的所有可能组合及其对应的输出条件来实现的。判定表帮助系统地组织信息,确保所有可能的输入条件组合都被考虑。
-
设计测试用例:最后,根据判定表的每一列(代表一种特定的输入条件组合),设计相应的测试用例。每个测试用例都针对一种特定的输入条件组合,验证在这种情况下的输出条件是否符合预期。
因果图方法是一种系统化的测试用例设计技术,它通过图形化的方式明确表示输入与输出之间的关系,帮助测试人员设计和执行有效的测试用例,确保软件在各种条件下都能正常工作。
10,持续集成和持续部署在测开中的作用是什么?
-
持续集成指的是频繁的将代码集成到主干上。它的好处主要有两个:
快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至 难以集成。 -
持续交付指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的中。它强调的是,不管怎么更新,软件是随时随地可以交付的。
-
持续部署是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。持续部署的前提是能自动化完成测试、构建、部署等步骤。
11,应用层的协议有那些?
- 域名系统(Domain Name System,DNS):
用于实现网络设备名字到IP地址映射的网络服务。
允许用户使用易记的域名而不是复杂的IP地址访问互联网资源。 - 超文本传输协议(Hypertext Transfer Protocol,HTTP):
用于在Web浏览器和Web服务器之间传递数据。
它基于请求-响应模型,客户端发送HTTP请求,服务器返回HTTP响应。
HTTP广泛应用于Web开发,用于获取网页、传输HTML、CSS、JavaScript等资源。 - 文件传输协议(File Transfer Protocol,FTP):
用于实现交互式文件传输功能。
它支持两种模式:主动模式(Standard/Active)和被动模式(Passive/PASV)。
FTP的通信过程中,控制链路和数据链路是在两个不同的端口独立进行通信的。 - 简单邮件传送协议(Simple Mail Transfer Protocol, SMTP):
用于实现电子邮箱传送功能。
它定义了邮件的格式以及在不同设备之间的传递方式。
SMTP通信的三个阶段包括建立连接、邮件传送、连接释放。 - 远程登录协议(Telnet):
用于实现远程登录功能。
是一个简单的远程终端协议,也是因特网的正式标准。 - 简单网络管理协议(Simple Network Management Protocol,SNMP):
用于网络管理,包括网络设备状态的监控和配置。
由SNMP本身、管理信息结构(SMI)和管理信息库(MIB)三部分组成。 - 邮件读取协议(Post Office Protocol 3,POP3):
通常被用来接收电子邮件。
12,TCP 和 UDP 在网络模型中的哪一层?区别?
TCP 和UDP 都是位于传输层的协议,它们在网络模型中处于IP层(网络层)和应用层之间。
- 连接性,TCP是一种面向连接的协议,UDP是一种无连接的协议。
- 可靠性,TCP提供可靠的数据传输服务,UDP的传输不保证可靠性,有丢包的可能。
- 传输效率,TCP传输效率比UDP的传输效率要低(慢)。UDP是一种简单、快捷、高效的传输协议,TCP要求建立连接和使用确认重传机制。
- 数据包大小,TCP将数据划分为较小的数据包进行传输,UDP允许将多个数据包打包成一个较大的数据包进行传输。
- 流量控制,TCP拥有流量控制和拥塞控制机制,UDP面向报文,没有阻塞控制。
- 连接数量,TCP只支持点对点,一对一的通信方式。UDP支持一对一,一对多,多对一的交互通信方式。
13,MySQL在返回数据中只取第一条数据
SELECT * FROM students LIMIT 1;
14,Java里的list,set,map的区别?
① list 集合中的元素是有序的,可以有重复的,通过序号访问。list接口的实现类有ArrayList、LinkedList等。其中ArrayList和LinkedList是线程不安全的,Vector是线程安全的。
② set集合是的元素是无序的,不能重复的,不能通过类似list集合的序号来访问。set接口实现类有HashSet、LinkedHashSet、TreeSet。
③ Map集合由两个集合构成,一个是键(key)集合,键集合是Set集合,所以不能有重复的元素;一个是值(value)集合,是Collection类型,可以有重复的元素。Map(映射)允许按照某个键来访问元素。map实现类有HashMap、TreeMap、Hashtable等。
-
Arraylist与LinkedList区别
① ArrayList底层数据结构是数组,查询快,增删慢。
② LinkedList底层数据结构是链表,查询慢,增删块。
③ 它们都是线程不安全的。
-
hashmap 和 treemap区别
① HashMap是无序的,TreeMap是有序的;
② HashMap的key和value都允许为null,TreeMap的key不允许为null;
15,写自动化测试过程中遇到什么问题,怎么解决的?
-
元素定位问题
原因:元素没有加载出来、句柄没有切换、定位的元素是随机变化的。
解决方案:
使用显示等待、隐式等待、强制等待等方法确保元素加载完成。
使用driver.window_handles获取所有句柄,并切换到目标窗口。
通过元素的xpath或css选择器来定位,确保选择器正确且能准确定位到目标元素。 -
元素交互问题
原因:尝试与一个不可交互的元素进行交互,如元素尚未加载完成或被其他元素遮挡。
解决方案:
确保页面完全加载完成后再尝试与元素交互,使用等待机制确保元素可见并可交互。检查是否有其他元素遮挡目标元素,调整测试代码以避免与不可交互的元素进行交互。 -
元素引用失效问题
原因:尝试与一个已经不再存在的元素进行交互,如页面重新加载或刷新导致元素引用失效。
解决方案:
在交互前检查元素的引用是否仍然有效,使用条件判断或异常处理机制处理失效的元素引用。必要时使用显式等待或隐式等待确保元素仍然存在于页面上再进行交互。 -
测试执行速度过慢
原因:测试执行过程中可能存在不必要的等待时间,导致整体执行速度过慢。
解决方案:
优化等待机制的使用方式,避免不必要的等待;直接访问能直接访问的链接,避免一步步点击;使用try-except来抛出错误;尽量使用css来定位元素以提高效率。
16,了解过接口自动化测试吗?
-
接口自动化测试是什么:
接口自动化测试,顾名思义,是指通过编写脚本或使用专业工具,对应用程序的接口进行自动化测试,从而验证接口的正确性和稳定性。接口是软件系统中不同组件或模块之间交互的桥梁,其质量和稳定性直接关系到整个系统的运行效果。
-
接口自动化测试的核心优势:
-
提升测试效率与准确性:接口自动化测试能够迅速、准确地执行大量测试用例,避免因人为操作而产生的错误或遗漏。这不仅缩短了测试周期,还提高了测试的质量。
-
降低人力成本:自动化测试使得测试人员可以从繁重的重复性工作中解脱出来,专注于更高层次的测试任务,如测试策略制定、缺陷分析等,从而提高了工作效率。
-
确保测试的一致性与可重复性:由于测试脚本是预先编写好的,每次执行都会按照相同的步骤和要求进行,这保证了测试的一致性和可重复性。
-
提高测试的稳定性与可靠性:自动化测试减少了人为因素的干扰,从而降低了测试过程中可能出现的异常情况。
-
优化回归测试 : 每当代码发生变更或添加新功能时,自动化测试可以快速重新运行测试用例,确保没有引入新的缺陷。
-
-
常见的基于工具的接口自动化测试方案:
Postman+Newman+git+Jenkins:Postman是一种常用的接口测试工具,可以发送HTTP请求并查看响应。Newman是Postman的自动化测试插件,可以用于运行和组织测试用例。git是版本控制工具,用于管理测试用例和脚本。Jenkins是一个持续集成工具,可以用于自动化构建、测试和部署。
JMeter+Ant+git+Jenkins:JMeter是另一种常用的接口测试工具,可以用于测试Web服务和API的性能。Ant是一种构建工具,可以用于自动化测试和构建过程。git和Jenkins同样用于管理和自动化测试流程。
17,未来的职业规划是什么?