请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试
参考回答:
1、单元测试:完成最小的软件设计单元(模块)的验证工作,目标是确保模块被正确的编码,使用过程设计描述作为指南,对重要的控制路径进行测试以发现模块内的错误,通常情况下是白盒的,对代码风格和规则、程序设计和结构、业务逻辑等进行静态测试,及早的发现和解决不易显现的错误。
2、集成测试:通过测试发现与模块接口有关的问题。目标是把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构,应当避免一次性的集成(除非软件规模很小),而采用增量集成。
自顶向下集成:模块集成的顺序是首先集成主模块,然后按照控制层次结构向下进行集成,隶属于主模块的模块按照深度优先或广度优先的方式集成到整个结构中去。
自底向上集成:从原子模块开始来进行构造和测试,因为模块是自底向上集成的,进行时要求所有隶属于某个给顶层次的模块总是存在的,也不再有使用稳定测试桩的必要。
3、系统测试:是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。系统测试的对象不仅仅包括需要测试的产品系统的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等。因此,必须将系统中的软件与各种依赖的资源结合起来,在系统实际运行环境下来进行测试。
4、回归测试:回归测试是指在发生修改之后重新测试先前的测试用例以保证修改的正确性。理论上,软件产生新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再次出现。根据修复好了的缺陷再重新进行测试。回归测试的目的在于验证以前出现过但已经修复好的缺陷不再重新出现。一般指对某已知修正的缺陷再次围绕它原来出现时的步骤重新测试。
5、验收测试:验收测试是指系统开发生命周期方法论的一个阶段,这时相关的用户或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。验收测试包括Alpha测试和Beta测试。
Alpha测试:是由用户在开发者的场所来进行的,在一个受控的环境中进行。
Beta测试:由软件的最终用户在一个或多个用户场所来进行的,开发者通常不在现场,用户记录测试中遇到的问题并报告给开发者,开发者对系统进行最后的修改,并开始准备发布最终的软件。
● 请你回答一下单元测试、集成测试、系统测试、验收测试、回归测试这几步中最重要的是哪一步
参考回答:
这些测试步骤分别在软件开发的不同阶段对软件进行测试,我认为对软件完整功能进行测试的系统测试很重要,因为此时单元测试和集成测试已完成,能够对软件所有功能进行功能测试,能够覆盖系统所有联合的部件,是针对整个产品系统进行的测试,能够验证系统是否满足了需求规格的定义,因此我认为系统测试很重要。
● 请回答集成测试和系统测试的区别,以及它们的应用场景主要是什么?
参考回答:
区别:
1、计划和用例编制的先后顺序:从V模型来讲,在需求阶段就要制定系统测试计划和用例,HLD的时候做集成测试计划和用例,有些公司的具体实践不一样,但是顺序肯定是先做系统测试计划用例,再做集成。
2、用例的粒度:系统测试用例相对很接近用户接受测试用例,集成测试用例比系统测试用例更详细,而且对于接口部分要重点写,毕竟要集成各个模块或者子系统。
3、执行测试的顺序:先执行集成测试,待集成测试出的问题修复之后,再做系统测试。
应用场景:
集成测试:完成单元测试后,各模块联调测试;集中在各模块的接口是否一致、各模块间的数据流和控制流是否按照设计实现其功能、以及结果的正确性验证等等;可以是整个产品的集成测试,也可以是大模块的集成测试;集成测试主要是针对程序内部结构进行测试,特别是对程序之间的接口进行测试。集成测试对测试人员的编写脚本能力要求比较高。测试方法一般选用黑盒测试和白盒测试相结合。
系统测试:针对整个产品的全面测试,既包含各模块的验证性测试(验证前两个阶段测试的正确性)和功能性(产品提交个用户的功能)测试,又包括对整个产品的健壮性、安全性、可维护性及各种性能参数的测试。系统测试测试软件《需求规格说明书》中提到的功能是否有遗漏,是否正确的实现。做系统测试要严格按照《需求规格说明书》,以它为标准。测试方法一般都使用黑盒测试法。
● 请问测试开发需要哪些知识?需要具备什么能力?
参考回答:
需要的知识:
软件测试基础理论知识,如黑盒测试、白盒测试等;
考编程语言基础,如C/C++、java、python等;
自动化测试工具,如Selenium、Appium、Robotium等;
计算机基础知识,如数据库、Linux、计算机网络等;
测试框架,如JUnit等。
需要具备的能力:
业务分析能力,分析整体业务流程、分析被测业务数据、分析被测系统架构、分析被测业务模块、分析测试所需资源、分析测试完成目标;
缺陷洞察能力,一般缺陷的发现能力、隐性问题的发现能力、发现连带问题的能力、发现问题隐患的能力、尽早发现问题的能力、发现问题根源的能力;
团队协作能力,合理进行人员分工、协助组员解决问题、配合完成测试任务、配合开发重现缺陷、督促项目整体进度、出现问题勇于承担;
专业技术能力,掌握测试基础知识、掌握计算机知识、熟练运用测试工具;
逻辑思考能力,判断逻辑的正确性、对可行性逻辑分析、站在客观角度思考;
问题解决能力,技术上的问题、工作中的问题、沟通问题;
沟通表达能力,和技术人员、产品人员、上下级的沟通;
宏观把控能力,有效控制测试时间、有效控制测试成本、有效制定测试计划、有效进行风险评估、有效控制测试方向。
● 请说一说黑盒与白盒的测试方法
参考回答:
黑盒测试:
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,因此不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。
常用的黑盒测试方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。
白盒测试:
白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。
白盒测试需要遵循的原则有:1. 保证一个模块中的所有独立路径至少被测试一次;2. 所有逻辑值均需要测试真(true)和假(false);两种情况;3. 检查程序的内部数据结构,保证其结构的有效性;4. 在上下边界及可操作范围内运行所有循环。
常用白盒测试方法:
静态测试:不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。
动态测试:需要执行代码,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。
白盒测试中的逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化:
1.语句覆盖每条语句至少执行一次。
2.判定覆盖每个判定的每个分支至少执行一次。
3.条件覆盖每个判定的每个条件应取到各种可能的值。
4.判定/条件覆盖同时满足判定覆盖条件覆盖。
5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
6.路径覆盖使程序中每一条可能的路径至少执行一次。
● 请说一下手动测试与自动化测试的优缺点
参考回答:
手工测试缺点:
1、重复的手工回归测试,代价昂贵、容易出错。
2、依赖于软件测试人员的能力。
手工测试优点:
1、测试人员具有经验和对错误的猜测能力。
2、测试人员具有审美能力和心理体验。
3、测试人员具有是非判断和逻辑推理能力。
自动化测试的优点:
1、对程序的回归测试更方便。这可能是自动化测试最主要的任务,特别是在程序修改比较频繁时,效果是非常明显的。由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大提高测试效率,缩短回归测试时间。
2、可以运行更多更繁琐的测试。自动化的一个明显的好处是可以在较少的时间内运行更多的测试。
3、可以执行一些手工测试困难或不可能进行的测试。比如,对于大量用户的测试,不可能同时让足够多的测试人员同时进行测试,但是却可以通过自动化测试模拟同时有许多用户,从而达到测试的目的。
4、更好地利用资源。将繁琐的任务自动化,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来投入更多精力设计更好的测试用例。有些测试不适合于自动测试,仅适合于手工测试,将可自动测试的测试自动化后,可以让测试人员专注于手工测试部分,提高手工测试的效率。
5、测试具有一致性和可重复性。由于测试是自动执行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试的可重复的效果。
6、测试的复用性。由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同的测试过程中使用相同的用例。
7、增加软件信任度。由于测试是自动执行的,所以不存在执行过程中的疏忽和错误,完全取决于测试的设计质量。一旦软件通过了强有力的自动测试后,软件的信任度自然会增加。
自动化测试的缺点:
1、不能取代手工测试
2、手工测试比自动测试发现的缺陷更多
3、对测试质量的依赖性极大
4、测试自动化不能提高有效性
5、测试自动化可能会制约软件开发。由于自动测试比手动测试更脆弱,所以维护会受到限制,从而制约软件的开发。
6、工具本身并无想像力
● 请问你怎么看待软件测试的潜力和挑战
参考回答:
软件测试是正在快速发展,充满挑战的领域。尽管现在许多自动化测试软件的出现使得传统手工测试的方式被代替,但自动化测试工具的开发、安全测试、测试建模、精准测试、性能测试、可靠性测试等专项测试中仍然需要大量具有专业技能与专业素养的测试人员,并且随着云计算、物联网、大数据的发展,传统的测试技术可能不再适用,测试人员也因此面临着挑战,需要深入了解新场景并针对不同场景尝试新的测试方法,同时敏捷测试、Devops的出现也显示了软件测试的潜力。
● 你觉得软件测试的核心竞争力是什么
参考回答:
测试人员的核心竞争力在于提早发现问题,并能够发现别人无法发现的问题。
1、早发现问题:问题发现的越早,解决的成本越低。如果一个需求在还未实现的时候就能发现需求的漏洞,那么这种问题的价值是最高的。
2、发现别人无法发现的问题:所有人都能发现的问题,你发现了,那就证明你是可以被替代的。别人发现不了,而你可以发现,那么你就是无法被替代。
● 你觉得测试和开发需要怎么结合才能使软件的质量得到更好的保障
参考回答:
测试和开发应该按照W模型的方式进行结合,测试和开发同步进行,能够尽早发现软件缺陷,降低软件开发的成本。
在V模型中,测试过程被加在开发过程的后半部分,单元测试所检测代码的开发是否符合详细设计的要求。集成测试所检测此前测试过的各组成部分是否能完好地结合到一起。系统测试所检测已集成在一起的产品是否符合系统规格说明书的要求。而验收测试则检测产品是否符合最终用户的需求。V模型的缺陷在于仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段,忽视了测试对需求分析、系统设计的验证,因此需求阶段的缺陷很可能一直到后期的验收测试才被发现,此时进行弥补将耗费大量人力物力资源。
相对于V模型,W模型增加了软件各开发阶段中应同步进行的验证和确认活动。W模型由两个V字型模型组成,分别代表测试与开发过程,图中明确表示出了测试与开发的并行关系。
W模型强调:测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、设计等同样要测试,也就是说,测试与开发是同步进行的。W模型有利于尽早地全面的发现问题。例如,需求分析完成后,测试人员就应该参与到对需求的验证和确认活动中,以尽早地找出缺陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制定应对措施,这将显著减少总体测试时间,加快项目进度。
W模型中测试的活动与软件开发同步进行,测试的对象不仅仅是程序,还包括需求和设计,因此能够尽早发现软件缺陷,降低软件开发的成本。
● 你觉得单元测试可行吗
参考回答:
可行,单元测试可以有效地测试某个程序模块的行为,是未来重构代码的信心保证。事前可以保证质量,事后可以快速复现问题,并在修改代码后做回归自测。可行性考虑的是要用一些可行的方法做到关键的代码可测试,如通过边界条件、等价类划分、错误、因果,设计测试用例要覆盖常用的输入组合、边界条件和异常。
● 你觉得自动化测试有什么意义,都需要做些什么
参考回答:
自动化测试的意义在于
1、可以对程序的新版本自动执行回归测试
2、可以执行手工测试困难或者不可能实现的测试,如压力测试,并发测试,
3、能够更好的利用资源,节省时间和人力
执行自动化测试之前首先判断这个项目是不是和推广自动化测试,然后对项目做需求分析,指定测试计划,搭建自动化测试框架,设计测试用例,执行测试,评估
● 请你回答一下测试的相关流程是什么?
参考回答:
测试最规范的过程如下
需求测试->概要设计测试->详细设计测试->单元测试->集成测试->系统测试->验收测试
来自W模型
● 请你说一下如何写测试用例
参考回答:
1、测试人员尽早介入,彻底理解清楚需求,这个是写好测试用例的基础
2、如果以前有类似的需求,可以参考类似需求的测试用例,然后还需要看类似需求的bug情况
3、清楚输入、输出的各种可能性,以及各种输入的之间的关联关系,理解清楚需求的执行逻辑,通过等价类、边界值、判定表等方法找出大部分用例
4、找到需求相关的一些特性,补充测试用例
5、根据自己的经验分析遗漏的测试场景
6、多总结类似功能点的测试点,才能够写出质量越来越高的测试用例
7、书写格式一定要清晰
● 请问你觉得测试项目具体工作是什么?
参考回答:
搭建测试环境
撰写测试用例
执行测试用例
写测试计划,测试报告
测试,并提交BUG表单
跟踪bug修改情况
执行自动化测试,编写脚本,执行,分析,报告
进行性能测试,压力测试等其他测试,执行,分析,调优,报告
● 请问如果想进行bug的测评,怎么去评测bug?
参考回答:
Bug的priority()和severity()是两个重要属性,通常人员在提交bug的时候,只定义severity,而将priority交给leader定义,通常bug管理中,severity分为四个等级blocker、critical、major、minor/trivial,而priority分为五个等级immediate、urgent、high、normal、low。
Severity:
1、blocker:即系统无法执行,崩溃,或严重资源不足,应用模块无法启动或异常退出,无法测试,造成系统不稳定。常见的有严重花屏、内存泄漏、用户数据丢失或破坏、系统崩溃/死机/冻结、模块无法启动或异常退出、严重的数值计算错误、功能设计与需求严重不符、其它导致无法测试的错误, 如服务器500错误。
2、critical:即映像系统功能或操作,主要功能存在严重缺陷,但不会映像到系统稳定性。常见的有:功能未实现,功能错误、系统刷新错误、数据通讯错误、轻微的数值计算错误、影响功能及界面的错误字或拼写错误。
3、major:即界面、性能缺陷、兼容性,常见的有:操作界面错误,边界条件错误,提示信息错误,长时间操作无进度提示,系统未优化,兼容性问题。
4、minor/trivial:即易用性及建议性问题。
Priority
1、immediate:即马上解决,
2、urgent:急需解决
3、high:高度重视,有时间要马上解决
4、low:在系统发布前解决,或确认可以不用解决。
软件测试基础知识(二)
1.现成的接口文档
2.抓包工具:F12/Fiddler
3.在线接口文档框架-接口文档+debug
(1)Swagger;(2)yapi
JMeter开发接口脚本
接口文档--jmeter新建线程组--HTTP(TCP/SOCKET)取样器--脚本开发--查看结果树;
性能测试和压测
不要用GUI做压力测试,用GUI做测试和debug
参数化,为了多条用例测试
接口测试:
一.常见的Post提交数据的方式有哪些?
主要有四种方式:取决于Content-Type这个请求头
Content-Type:application/x-www-form-urlencoded 特点:数据报文是字典,相当于通过表单方式去提交数据,数据格式为:a=1&b=2。
Content-Type:multipart/form-data 特点:报文包含有文件上传。
Content-Type:application/json(text/plain,text/xml) 特点:报文都是字符串类型。
Content-Type:binary 特点:报文类型都是以二进制的方式上传文件。
二.常见的请求头以及它们的作用是什么?
Accept:客户端接收的数据格式。
X-Request-With:异步请求。ajax异步请求。无刷新。
User-Agent:发送请求的客户端的类型。
Content-Type:请求的内容的报文格式。
Cookie:cookie信息。
三:get和post的区别是什么?
get和post都可以向服务器提交数据,并且都会从服务器获取数据。
区别在于:
1.传送参数的方式不同:get通过地址栏的方式传参,post通过表单报文传参。
2.传参的长度不同:get有参数限制,post没有。
3.get是获取数据,比如查询;post提交数据,比如增删改。
4.get只发送一个TCP数据报文(包含请求头和data),post发送两个报文(1.请求头,返回100; 2.data,返回200)
5.post比get更安全。
四:接口请求中常用的返回状态码
1×× 信息提示
2×× 成功
3×× 重定向(发送一个请求时,这个请求多次请求了服务器的多个资源)
4×× 客户端错误
5×× 服务端错误
五:cookie,session,token有何异同
相同点:都是服务器生成用于鉴权的。
不同点:
cookie保存在客户端的浏览器上,不安全,可以去分析在本地的cookie进行欺骗。
session保存在服务器的内存,默认保存30分钟,比cookie安全,缺点是当用户多会占用服务器资源。每个session会产生一个session ID,可以通过cookie传输,名字可由开发自定义。
token是存储在服务器的数据库里,通过一个接口或通过登录获取,然后后续接口都必须传token才可以请求成功。token也可以通过cookie传输。
接口都可以,web一般用session。
六:HTTP请求和响应报文内容
请求报文一般分为请求行,请求头和请求数据,空行。
请求行:方法字段,HTTP协议,URL字段
请求头(K-V形式):一般是产生请求的浏览器类型,主机地址和客户端识别的内容类型列表。
请求数据:在post里会把数据以K-V形式发送
响应报文分为状态行,响应头和响应正文
状态行:HTTP版本+状态码+状态码的描述
响应头:包括服务器类型,内容类型,长度,日期
响应正文:返回的HTML页面或者json数据
七:如何做接口测试
1.获取接口文档,熟悉单接口以及链路接口(接口业务流程)的业务,包括接口地址,鉴权方式,入参,出参,错误码等。
2.编写接口测试用例并评审
正例(1-2个):单接口返回成功场景,链路接口业务流程实现
反例:
鉴权异常:空,错误,过期。。。
参数异常:空,类型异常,长度异常。
错误码异常:
其他异常:接口黑名单,接口调用次数限制,分页(少于0,0,中间叶,最大页,超过最大页)。
3.使用接口测试工具或代码方式执行接口测试
重要考虑一下情况:
1)接口关联,接口参数加密,是否动态参数,接口参数是否签名,是否需要带请求头。
4.实现持续集成并输出接口测试报告电子邮件,由Bug提bug
八:没有接口文档,怎么做接口测试?
方式一:可以使用Fiddler,Charles抓包工具抓取接口数据之后整理成接口文档,如果有不清楚的字段,找时间集中找开发验证,然后再进行接口测试。
方式二:可以通过Jmeter的代理录制功能,先把接口请求录制下来形成接口文档,然后再逐一的进行接口测试。
九:接口测试中,依赖登录状态的接口怎么测试?
依赖登录的接口本质上是每次发送请求的时候需要带上cookie和session ID才能发送成功。如果是通过Postman来测试,postman会自动去管理;如果通过jmeter测试,需要增加cookie管理器组件。如果通过代码来实现接口测试,那么需要生成session对象,然后通过session对象来发送请求。
十:接口测试中发现过哪些bug?
接口测试就是为了避免绕过前端验证,直接反问后端接口的BUG。
常规bug:接口没实现,接口报错,输入异常值(空值,特殊字符),没有返回合理的错误提示。
如:购买商品接口,其中有价格参数,改成-3,购买成功。
权限Bug:
如:测试修改不同商品信息接口,接口文档要求只有商家和超级管理员才能有权限修改,而传入一个普通用户ID或者传入其他商家的ID,修改成功。
十一:在接口测试中怎么校验结果是否正确?
两种需要校验:
第一种:状态码校验,验证返回的状态码为200.
第二种:业务校验:
1.错误码,开发自定义的
2.当接口响应报文比较短,比较固定的情况下,校验完全一致。
3.当接口响应报文比较长,校验最核心的业务信息。
4.当接口响应报文特别复杂XML格式或者JSON格式,通过Xpath,JSONpath,正则表达式的匹配方式获取最关键的业务节点,然后校验
5.查询数据库校验或者其他接口校验
十二:如何分析一个BUG是前端还是后端的?
通过抓包工具抓包,查看请求报文,如果请求报文比较接口文档有问题,那么就是前端问题。
如果请求没有问题,就看返回报文,返回数据不对,那么就是后端开发的问题。
十三:依赖第三方数据的接口怎么测试?
接口关联是项目中的接口依赖于本项目。
可以通过postman搭建mock服务,但是有访问次数限制,一天只能访问1000此。也可以通过servlet等技术实现接口mock服务。
十四:对于加密接口,签名接口如何进行测试:
加密接口:
首先知道加密方式,如
1.对称式的加密方式(私钥加密):常用的是Base64加密,不常用的DES,AES。
2.非对称的加密方式(双钥加密):RSA加密方式
由一个私钥密码生成双钥,公钥加密,私钥解密,私钥加密,公钥解密。
3.只加密不解密
1.MD5加密
2.SHA1,SHA3.。
4.自定义加密规则。混合加密方式。
对参数对应的加密之后发送请求。postman使用JavaScript脚本实现,jmeter使用beanshell中的Java代码实现。