今天面试了一家公司的性能测试岗位,面试官问了很多性能测试知识的问题,主要的问题和回答的问题都整理出来供大家参考。
一、性能测试流程可以分为以下几个步骤:
1、确定测试目标
首先需要明确测试的目标,例如测试系统的响应时间、吞吐量、并发用户数等指标。这些指标应该与业务需求相符,具有可衡量性和可比较性。
2、设计测试场景
根据测试目标,设计测试场景,包括模拟用户行为、负载模式、数据量等方面。测试场景需要真实地反映出系统在不同条件下的表现,以便最大限度地暴露系统的瓶颈和问题。
3、准备测试环境
搭建测试环境,包括硬件和软件环境的配置、资源的分配、网络带宽等方面。测试环境应该尽可能地接近生产环境,以保证测试结果的可靠性和有效性。
4、定义性能脚本
性能脚本定义了任何模拟请求的过程,将在测试过程中使用。这些脚本包含真实流量,如用户浏览,搜索或提交表单。
5、执行测试用例
执行测试用例,收集测试数据并记录测试结果。测试数据包括响应时间、吞吐量、错误率、资源利用率等指标,测试结果应该清晰明了、易于分析和对比。
6、分析测试结果
对测试结果进行分析,找出系统存在的问题和瓶颈,并提出针对性的改进措施。分析测试结果需要综合考虑多种因素,包括硬件、软件、工作负载、网络等方面。
7、优化和再测试
根据分析结果,采取相应措施进行优化。在完成优化后,需要再次测试以验证改进是否有效,并确定各项指标是否符合业务需求。
8、编写测试报告
最后,编写测试报告,总结测试过程和结果,向相关方面汇报测试成果。

二、性能测试环境是自己搭建还是有专门的团队搭建,如硬件或软件方面等。
1、性能测试环境既可以由自己搭建,也可以由专门的团队负责搭建。如果自己有足够的技术、资源和开发团队支持,可以考虑自己搭建性能测试环境。主要相关的知识和技能,例如选购高性能的服务器硬件、配置网络、选择适合的性能测试工具等。在此过程中,还需要花费大量时间进行规划、实施和维护,以确保环境的可靠性和稳定性。
2、另一方面,可以由专门的团队来搭建性能测试环境。如开发团队通常拥有经验丰富的工程师和专业的设备和软件,可以更快速、高效地完成搭建任务。他们还可以提供专业的服务和支持,监测性能数据并分析环境中存在的风险和问题。
无论选择哪种方式,搭建性能测试环境都是一项非常重要的任务。一个好的性能测试环境可以确保软件系统在生产环境中表现良好,并且能够满足用户的需求。

三、性能测试的场景主要有那些。
1、基准测试:以一些特定维度为基础,检测被测系统在理想条件下的最大容量。通常重复多次测试并取平均值。
2、单交易测试:测试单个事务或操作的运行时间和资源消耗情况。通常需要建立符合该项任务说明的数据模型,供后面统计结果做依据。
3、混合测试:通过混合不同类型的工作负载,对选择多个原始基准的场景进行测试并进行分析。 通常采用不同比例的请求进行随机化测试,从而评估系统的总吞吐量和响应时间等指标。
4、稳定性测试:持续执行一定时间的测试以检测系统是否稳定,并验证系统能否适应长期使用和负载增长的情况。
5、容量测试(capacity test):对系统或组件进行测试,以确定其最大容量和吞吐量。容量测试通常用于确定系统在可接受的性能水平下可以处理多少数量的数据或用户。
除了以上列出的场景,还有很多其他类型的测试场景,例如安全测试、兼容性测试、功能测试等。在选择测试场景时,应根据具体的测试目标和需求进行选取。

四、执行性能测试时使用哪些监控工具,如nmon等。
1、nmon:nmon是一个轻量级的系统性能监控工具,可监控CPU、内存、磁盘和网络等指标,并将数据输出为文本格式或Excel表格。
2、top:top是一个标准的Unix系统命令,用于实时监控系统中的进程和系统资源使用情况。它提供了关于CPU利用率、内存使用率和IO等的信息。
3、sar:sar是一个Linux系统自带的性能监控工具,可以记录和报告各种系统资源使用情况。它提供了有关CPU、内存、磁盘、网络和系统调用等方面的信息。
4、vmstat:vmstat是一个非常有用的工具,它提供有关内存、进程、CPU和IO的详细信息。它还可以生成简单的报告,以评估系统的整体健康状况。
5、iostat:iostat提供了有关磁盘操作的统计信息,包括传输速度、I/O请求队列长度和平均响应时间等指标。它还可以为每个磁盘设备提供¥¥的统计信息。
6、netstat:netstat提供有关系统网络接口的详细信息,如TCP连接状态、路由表、网络接口状态和协议统计信息等。
除了以上几个工具,还有其他一些可用的监控工具,具体使用哪一个取决于你的需求和操作系统平台。

五、性能测试监控时重点监控哪些指标、应该密切关注以下重要指标:
1、响应时间(Response Time): 这是从用户请求到服务器响应返回所需的时间。它可以帮助您了解系统的响应速度并验证是否满足了业务需求。
2、吞吐量(Throughput): 吞吐量是每秒钟处理的请求数。这对于确定系统可以处理的负载大小非常重要,并且可以确定系统中的瓶颈。
3、错误率(Error Rate): 错误率可告诉您发生异常情况的频率,例如服务器错误或HTTP错误。跟踪错误率可以确定哪些功能需要修复以提高业务连续性和用户体验。
4、并发用户数(Concurrent Users): 此指标可以告诉您系统可以同时处理多少个用户请求。当并发用户数超过系统的限制时,系统可能会变慢或挂起,因此这是非常重要的指标。
5、资源使用情况(Resource Utilization): 系统的资源使用率(如CPU、内存和网络)还需要进行监控。这可以帮助您确定系统在高负载下是否会崩溃,并确定需要升级的资源。
6、可靠性指标(Reliability metrics): 同样,可靠性指标也不能少。例如平均恢复时间(Mean Time to Recover,MTTR)以及错误状态告警个数等可靠性指标对维护系统和发现问题非常有用。

六、性能测试碰到问题时排查到什么程度,是否碰到问题直接交给开发进行查问题。
在遇到性能测试问题时,排查问题的程度取决于问题的性质和原因。如果问题比较严重,影响了应用程序的正常使用,那么需要进行深度排查;如果只是一些轻微的性能问题,可以快速找到问题并解决,那么可以适当减轻排查工作量。以下是可能采取的一些步骤:
1、确认问题是否由性能导致:在发现应用程序出现问题时,应首先确认问题的性质是否与性能有关。如果是,则可能涉及到应用程序、服务器或网络等方面的问题。
2、收集更多信息:在确定问题与性能有关之后,需要收集更多有关应用程序性能的信息,例如 CPU 使用情况、内存使用情况、磁盘 I/O 以及网络延迟等。
3、测试完整场景:在测试中,确保测试覆盖了所有系统组件和交互。如对前端界面操作,核心业务流程以及数据库访问。
4、分析日志文件:分析应用程序的日志文件,尤其是针对性能的日志。从中获取信息并分析app服务或者框架等各层次引起的问题或者异常
5、联系开发人员:在经过上述步骤后,如果问题仍未解决,可以考虑联系开发人员。这有助于更深入地了解应用程序并找到问题的根本原因。开发人员可以通过代码调试、性能调优或者修改方案来解决问题。
总的来说,在遇到性能测试问题时,首先需要确认与性能有关的问题的性质,并结合以上一些步骤来进行排查。

七、对于Java的GC垃圾回收机制有哪些?
Java的GC垃圾回收机制是一种自动内存管理机制,用于监控和回收不再使用的对象。Java的主要垃圾回收机制包括:
1、标记-清除算法(Mark-and-Sweep):这个算法最早被提出,并且现在依然被广泛使用。它的基本思
2、想是遍历堆空间中未被引用的对象,并将其从内存中删除,该算法容易产生内存碎片。
3、标记-压缩算法(Mark-Compact):这个算法也叫 "移动式 GC" 。首先标记所有存活的对象,然后将所有“活”对象压缩到堆的一端。
4、复制算法(Copying):这个算法对一个半空间进行内存分配,当这个半空间满了之后,将其中还活着的对象全部复制到另一个空间,然后将两个半空间交换,从而保证每次都只有一个半空间是可用的。
5、分代算法(Generational):这个算法根据对象的生命周期划分对象到不同的代中,然后对不同代采用不同的 GC 策略。通常会将年轻代采用复制算法,老年代采用标记-清除或标记-压缩算法。

八、使用loadrunner进行web协议的录制时,cookie与session的区别。
Cookie和Session都是在Web开发中常见的概念,Cookie和Session都是一种用于保持状态的机制,但它们有着本质的不同之处:
1、定义: Cookie是客户端存储机制,服务器通过设置Cookie值来告诉客户端如何处理后续请求;而Session是服务器端存储机制,服务器通过Session来保存客户端的状态信息,同时为客户端生成唯一的sessionId。
2、存储位置: Cookie是储存在客户端上的文件中,每次HTTP请求时都会发送到服务端;而Session则是存储在服务器端的内存中或者其他缓存介质或数据库中。
3、安全性: Cookie易被网络黑客窃取;而Session存在在服务器端,所以安全性较高。
4、存储大小: cookie的存储容量一般为4k,但如何Web开发者未做任何设置,则只能保存20条左右,因此cookie不适合存储大量数据;而Session能够存储用户信息、浏览器行为、操作记录等。

九、App如何进行性能测试,主要采用以下几种方法进行测试:
1、接口测试:检查网络请求和响应的速度、正确性等问题。
2、压力测试:模拟多用户同时使用App的情况,通过不同的载荷对App进行测试,检查其负载承受能力,以及在高负载下是否稳定。
3、安装&启动速度测试:测试从*载下**安装到首次打开App所需要的时间,这是很多用户重视的指标之一。
4、稳定性测试:长时间运行App,通过模拟各种场景,例如弱信号、低电量、内存占用等,评估App的稳定性。
5、用户体验测试(UX测试):模拟不同用户的使用场景,检查App的各项功能在实际使用中是否满足用户的需求和期望。
6、设备兼容性测试:测试App在不同的操作系统版本和硬件设备上的表现,确保App 兼容性良好。
以上测试方法旨在找出 App 的性能瓶颈,以便提供更好的用户体验。在测试前应该充分了解 App 的特点和用户需求,建立测试场景,选择合适的测试工具,并充分记录测试结果,最后及时改进调整,提升 App 性能和竞争力。

十、性能测试如何进行那些异常测试。
性能测试方面的异常测试通常是为了模拟系统在超过预期使用负载时出现的各种异常情况。这些异常包括:
1、高并发:模拟许多用户同时访问系统,导致系统崩溃或延迟。
2、大数据量:在系统中使用大量数据来查看系统对存储和检索大量数据的处理方式。
3、长时间运行:检查系统在连续运行一个或多个任务后是否会出现内存泄漏、缓存问题等。
4、非法操作:测试系统对于非法或恶意操作的响应,例如攻击者试图破坏系统安全的情况。
5、特定硬件或软件环境:测试系统在不同的硬件或软件环境下的表现,以确定系统的可移植性和兼容性。
6、网络问题:测试系统对于网络问题(如丢包、延迟、带宽限制等)的响应。
创造这些异常负载的目的是尽可能模仿真实场景下可能遇到的问题,以便开发人员能够更好地了解系统的强度、稳定性和灵活性。通过进行性能测试方面的异常测试,可以提前发现和解决潜在的问题,从而保证系统在实际运行中的表现和可靠性。

经过了一个多小时的腾讯会议面试后终于面试完成,面试官说上报到公司人力资源部,等待他们的通知,这几天看来要守在手机看有没有成功上岸了。
花了几个小时终于把这次面试的内容整理出来,提供给大家作参考,同时也可以作为自己的总结,不断的提升自己。
