Web系统性能优化技术研究与模拟验证
摘要
随着互联网的快速发展,各种软件产品越来越多地出现在人们的视野中,给人们的生活和工作带来了极大的便利。软件规模和杂度的不断提升,使得,用户越来越关注软件的质量。他们不仅关心软件产品的功能是否能够满足要求,更重要的是,他们要求产品满足各类性能要求,这就使得性能测试的重要性越来越高。本文介绍的性能测试工具是JMeter。此外,在当今日益复杂的软件产品中,节省时间和控制劳动力成本已成为公司赚取更多利润的方式之一。自动化测试的出现有效地解决了企业的这个问题。随着自动化测试的出现,它不仅可以为企业节省大量的人员成本,而且在一定程度上提高了测试人员的工作效率。本文基于当前的测试工作,设计了一个适用于自己产品的自动化测试框架,并成功地将其应用于测试。本文调研了软件性能、自动化测试相关概念,介绍了JMeter 测试工具原理及其优势,并阐述了选择该工具的原因。对系统进行需求分析,并进行总体设计,最后从被测电商系统出发,对日常场景的登录、下单业务功能进行了用例设计,围绕着这几个场景下的主要接口进行了详细的性能测试,并对其测试结果进行了分析和优化,使测试结果尽可能的接近真实的使用场景。
关键词:自动化测试;性能测试;测试用例;JMeter
Research and Application of Performance Automation Testing Technology Based on JMeter
ABSTRACT
With the rapid development of the Internet, a variety of software products are increasingly appearing in people’s vision, bringing great convenience to people’s life and work. The continuous increase in software scale and complexity has made users increasingly concerned about the quality of software. They not only care about whether the functionality of software products can meet the requirements, but more importantly, they require products to meet various performance requirements, which makes performance testing increasingly important. The performance testing tool introduced in this article is JMeter.In addition, in today’s increasingly complex software products, saving time and controlling labor costs have become one of the ways for companies to earn more profits. The emergence of automated testing has effectively solved this problem for enterprises. With the emergence of automated testing, it can not only save a lot of personnel costs for enterprises, but also improve the work efficiency of testers to a certain extent. This article is based on current testing work and designs an automated testing framework suitable for one’s own product, which has been successfully applied to testing. This article investigates concepts related to software performance and automated testing, introduces the principles and advantages of JMeter testing tool, and explains the reasons for choosing this tool. Conduct requirement analysis on the system and conduct overall design. Finally, starting from the tested e-commerce system, design use cases for login and ordering business functions in daily scenarios. Conduct detailed performance testing around the main interfaces in these scenarios, and analyze and optimize the test results to make them as close as possible to real usage scenarios.
Keywords: Automated testing;Performance testing; Test Cases;JMeter
目 录
1 绪论 1
1.1 研究背景及意义 1
1.2 国内外研究动态 2
1.2.1 国内研究现状 2
1.2.2 国外研究现状 3
1.3 本论文的研究内容及结构 4
1.3.1 本文研究内客及结构 4
1.3.2 论文内容的组织结构 5
1.4 本章小结 5
2 自动化测试的介绍 7
2.1软件自动化测试 7
2.1.1 软件自动化测试的概念 7
2.1.2 软件自动化测试的原则 8
2.1.3 软件自动化测试的优势 9
2.1.4 软件自动化测试的流程 10
2.2 性能测试 12
2.2.1 性能测试的定义 12
2.2.2 性能评测的方法 12
2.3 JMeter性能测试工具 13
2.3.1 JMeter 的概念 13
2.3.2 JMeter的优势 14
2.3.3 JMeter主要测试元件 14
2.4 本章小结 15
3 基于JMeter的性能自动化测试设计 16
3.1 测试框架需求分析 16
3.1.1 测试框架需求分析 16
3.1.2 测试框架业务需求 16
3.1.3 测试框架非功能需求 18
3.1.4 测试框架环境需求 18
3.2 测试总体设计 19
3.2.1 JMeter性能自动化部署设计 19
3.2.2 JMeter性能自动化框架设计 20
3.3 JMeter 脚本文件解析 22
3.4本章小结 23
4 基于JMeter进行性能测试设计实例 24
4.1测试项目简介 24
4.2 电商项目性能指标 24
4.3 登录接口的性能测试 26
4.3.1负载测试步骤 26
4.3.2 登陆脚本实现 26
4.3.3 登陆脚本运行及结果分析 27
4.4 下单业务的性能测试 29
4.4.1 设计性能测试用例 29
4.4.2 编写测试脚本 29
4.4.3 模拟不同用户下单 30
5.5.5 脚本运行及结果分析 31
4.5 本章小节 33
5 研究总结与展望 34
参考文献 35
致 谢 37
1 绪论
1.1 研究背景及意义
随着近年来软件产业的快速发展,软件已经应用于人们生活的各个方面。人们离不开软件应用程序,无论是个人电脑(PC)软件还是移动软件,都给人们带来了极大的便利。在软件开发的早期阶段,对于软件公司来说,软件的功能是否满足用户的要求往往才是重要的。近年来,随着互联网应用的快速发展,移动应用因其便利性而得到了广泛的应用。一旦一个好的软件被公众广泛接受和使用,软件的性能问题就会立即出现。例如,站购软件、微信红包都经历过类似的性能危机。对于软件开发公司来说,除了担心软件的功能是否满足客户需求外,软件性能问题对公司未来的发展也变得越来越重要。因此,公司逐渐提高了对软件性能的要求。为了确保软件性能,性能测试是提高软件效率和稳定性的一种手段。目前流行的自动化工具,如LoadRunner和JMeter。
然而,由于缺乏连贯性和可持续性不足,目前市场上许多免费的性能测试工具通常需要公司手动花费大量人员进行干预,这限制了性能测试的发展,有时无法保证稳定性。例如,JMeter性能测试工具在多场景过程控制、环境监测和结果输出方面存在一些瓶颈。此外,目前中国大多数软件公司的测试人员在进行性能测试时都会遇到以下问题:对于功能已经成熟的软件,每次迭代更新到上一版本时,大多数功能都会相似;随着用户需求的持续增长,组织也在不断压缩迭代周期,导致发布周期非常短,测试时间也很少。其次,由于主观因素,测试人员可能总是会出现漏检、错检和误操作的情况;在一些小企业中,测试人员在快节奏的测试阶段经常遇到这样的情况,尽管他们努力测试产品,但他们仍然对产品的性能没有信心。软件行业人员的高流动率和内部测试人员知识水平的不均衡往往限制了软件公司的发展。值得一问的是,新的或低级的测试人员如何在短时间内轻松掌握软件性能测试方法。
自动化性能测试的出现通过取代手动测试来提高测试效率,从而解决了上述大部分问题。性能测试通常不仅测试一种类型的场景,有时同一场景中可能同时存在多种情况。因此,为测试人员手动测试组合场景和测试用例将需要很长时间。另一方面,鉴于软件规模的不断扩大,对这么多人进行测试是完全不现实的(比如12306火车票购买网站的性能压力测试)。自动化测试可以降低成本并提高效率,因此需要多人测试的场景可以由机器执行。需要在一天内完成的测试结果可以在最短的时间内实现。因此,每家软件公司都希望通过定制自己的工具来满足其产品测试要求。因此,一个精心开发的自动化测试系统可以直接为公司带来好处。
性能自动化测试系统不是盲目设计的,而是基于对相关要求的不断发现和总结。技术往往不是最复杂的,复杂性在于不断变化的需求。只有密切关注需求,软件公司才能设计和开发一个强大、易于使用、可扩展、兼容和易于维护的自动化性能测试系统。使软件公司在行业竞争中占有一席之地。对于具有类似功能的每次迭代,功率自动化测试都可以执行功率回归测试,以提高日常测试效率。此外,它还具有一致性和可重复性。由于性能自动化测试的一致性,很容易检测到被测软件性能的变化。自动化性能测试可以更好地利用时间资源,充分利用周末和晚上的资源,避免开发和测试之间的等待时间,解决测试和开发之间的冲突。对于需要大量人力的性能测试,自动化性能测试也可以轻松处理。测试人员和购买者都认为,只有通过各种测试方案测试的版本才是可靠的,自动化性能测试可以有效地提高对软件的信心。Performance Automation系统易于学习和使用的功能在减轻公司人员的学习和培训压力以及降低后期业务成本方面发挥着至关重要的作用。基于以上几点,测试人员开发了一个免费、简单、易于学习的产品性能测试性能自动化测试系统,提高了软件产品性能测试的准确性和效率,系统的通用性和兼容性,易于故障排除和故障排除,易于理解测试结果。
1.2 国内外研究动态
1.2.1 国内研究现状
由于国际上技术发展水平参差不齐,与国外的软件企业对比,国内的软件公司还只是停留在软件的开发上,认为测试并不是最重要的,并且很多相对小的公司认为测试工作并没有什么高的技术含量,找一些人员对照着需求去测试就行了,更不会愿意去为性能问题去投资更大的成本[3],这样很容易就会导致做出来的产品质量并不能像最初需求设计的那样满意[4]。随着互联网市场的不断扩大,即便近几年来软件企业对于软件测试的重要性的认识有所提高[5],但是软件企业为了赢得更多的利益,不愿意为软件产品花费太多的时间以及成本,所以就会不断地压缩整个软件产品的发布周期,对应的软件测试的时间就会受到一定的限制[6]。考虑到开发的成本问题,国内的大部分软件公司都会通过购买性能测试工具来进行自身产品的性能测试工作[7],但是对于一些功能比较健全,易于上手操作的性能测试工具,这些工具的价格都显得相当的昂贵[8],并且要获得这些工具的正版使用权,需要每年交付不菲的费用,这对于软件公司来说又是一笔不菲的投入成本,尤其是对于一些小型的公司来说,他们开发软件的目的就是为了获得利益,所以花钱去买性能自动化测试工具对他们来说是不太现实的,并且性能测试工具并不能完全匹配自身的软件产品,因此一些公司希望定制属于适用于自身产品的性能自动化测试工具来完成相应的性能测试工作[9]。软件企业会组织一个专门的团队进行自动化测试的开发,团队可以由一些开发和一部分测试人员组建而成,针对自身的软件产品的特性开发出适合自身使用的性能自动化测试框架[10]。对于测试人员来说,这是一个很好的提升自己技术的机会,通过参与自动化测试框架的设计开发,不仅能够实现自己的价值[11],并且能够推动整个测试行业的发展。性能测试脚本自动生成是指根据用户需求,通过一定的算法和方法,自动产生测试软件执行脚本的过程。这些方法通常基于被测软件的需求[12]、设计、实现等信息,旨在减轻测试人员的负担,提高测试效率和覆盖率。常见的JMeter测试脚本自动生成方法包括基于模型的方法、基于搜索的方法、基于符号执行的方法等[13]。
杨向前,任美鹏,刘罡,等对Web项目所在的文件夹进行递归检索[14],以获取性能测试所需要的目标文件;然后对获取到的性能测试相关文件通过反射机制来获取符合特定规范的接口信息,所需要的JMeter执行脚本正是根据这些接口信息来生成的。该专利的投入使用,不仅能减少测试人员编写测试脚本的时间花费,加快测试工作的完成,还可以提高性能测试的完备性,因为反射机制的使用可以确保自动生成的性能测试脚本没有遗漏测试接口。
胡中波,王旭鹏对测试脚本自动生成问题问题[15],提出了一种使用事件序列模型描述移动应用行为的建模方法,并在此基础上提出了基于ESM的移动应用测试脚本自动生成方法,建立了模型和测试脚本之间的映射关系。将脚本中的事件序列映射到ESM上,找到对应的模型事件序列,然后根据变化维护事件序列,生成更新后的事件序列再次测试脚本。在后续的实验之中构建了ESM、DESM,并为每个应用程序生成了测试脚本。
1.2.2 国外研究现状
在国际上,软件测试(软件质量控制)关乎着软件产品的质量问题,性能测试则在测试阶段占着相当大的比重[16]。例如对于IBM和Microsof 这些大型的软件开发企业来说,由于企业认识到测试对产品以及公司形象的重要性,因此会相对的增多测试人员的数量。在软件测试的众多技术中,性能自动化测试成为人们关注的重点,但是由于性能测试的特殊性,人们在尽最大的能力使得性能测试变得智能化、自动化[17]。大约十年前,国外意识到软件产品的性能问题对于产品本身来说及其的重要,因此在产品设计的初期会转换思想,考虑性能问题的因素,自主研发自动化测试工具,不断地改善测试工具的功能以备能够满足更多也更方便的产品应用[18],其主要的思路是:从设计开始,采用共同的测试策略,通过“增值开发”的方式使后一段的研发能够应用前一段开发的成果,重复利用相同的软件模块,使用商业通用标准,成熟技术,缩短研发时间,降低开发成本并且易于升级与扩展[19]。在这项工作中进行了用软件需求模型自动生成测试脚本的初步尝试。工作中,作者从范围需求和逻辑需求两方面,对领域专用语言的语法规则进行定义。使用DSL来弥合目标领域中,模糊的自然语言规范和严格的形式规范之间的差距。最后,利用模型到文本转换技术自动生成基于文本的测试脚本[20]。以上脚本生成方法在实际应用中,通常还需要结合手动配置和优化以满足具体的测试需求。另外脚本维护方面通常比较麻烦,以脚本中参数修改为例,以上的自动生成方式需要对脚本进行重新录制,维护成本过高。所以提出一种学习成本低、易于维护、编写方法简单的测试脚本自动生成方法是很有必要的。而采用DSL方式生成JMeter脚本可以让测试人员更容易地创建和修改性能测试脚本,降低学习成本,提高了脚本的可维护性。
1.3 本论文的研究内容及结构
1.3.1 本文研究内客及结构
JMeter是一个开源的Java应用程序,由Apache软件基金会开发和维护,可用于性能测试、压力测试、接口测试等,使用JMeter能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期.
(1)JMeter工具介绍
JMeter工具的特点、功能和优势:JMeter是一款开源的Java框架,主要用于进行性能测试和负载测试。其开源免费、图形化界面、平台无关、可拓展的主要特点使其具有进行Web应用性能测试、负载测试、数据分析等多种功能。而其本身具有的强大的性能测试能力、多样的测试元素、友好的用户界面和社区支持也是其相较于其他测试工具的主要特色。
使用JMeter进行Web性能测试:通过创建测试计划、添加HTTP请求、配置监听器、运行测试等步骤完成测试,得到测试结果。
(2)Web性能测试指标
常用的性能测试指标:如响应时间、吞吐量、并发用户数等。指标对于评估Web应用性能的重要性:响应时间是指从发送请求到接收到完整响应所花费的时间。较短的响应时间通常意味着更好的用户体验,因为用户能够更快地获取到所需信息。吞吐量表示系统在单位时间内处理的请求数量。对于高流量的Web应用来说,高吞吐量是至关重要的,因为它影响着系统的并发处理能力。并发用户数指同时访问Web应用的用户数量。了解并发用户数可以帮助评估系统的承载能力,并规划服务器资源以应对高负载情况。
(3)JMeter性能测试配置
在JMeter中配置性能测试:通过创建线程组、添加配置元件、添加取样器、添加监听器、设置断言等操作完成配置。
(4)性能测试场景设计
基于JMeter设计真实场景的性能测试:了解应用场景、模拟真实用户行为、设置不同用户类型、引入业务逻辑、模拟不同访问路径、设置随机性、增加负载和压力、监控系统资源。
(5)结果分析与报告
通过JMeter收集测试性能数据:在JMeter中,可以通过添加不同类型的监听器来收集性能测试数据。常用的监听器包括聚合报告、图形结果、查看结果树等。这些监听器提供了不同方式来展示和分析性能数据]。
1.3.2 论文内容的组织结构
本研究分为六章,这六章的安排是指研究课题的阶段、任务和步骤:
本论文共分为六章,主要内容如下:
第一章主要通过介绍性能自动化测试的背景和重要性,论述了开展研究和实施性能自动化测试工作的重要性。对国内外电力自动化测试现状的分析和研究为本文的研究和实施提供了相应的背景和出发点。
第二章主要介绍了自动化测试的相关概念,并从软件测试和自动化测试两个方面对其进行了区分。其次,介绍了JMeter性能测试工具,该工具通过相关知识介绍和学习为性能自动化测试框架提供了适当的技术支持。
第三章主要对性能自动化测试框架进行了需求分析和初步设计,并通过各种需求分析方法展示了系统旨在实现的功能。基于本文的概要设计,该框架需求中要实现的功能由数据库设计指定。
第四章主要实现了性能自动化测试框架,并使用自动化测试框架详细设计和编码了环境安装、升级、卸载和核心案例测试等关键难点功能。
第五章主要对设计的自动化测试框架进行性能测试,使用JMeter压力测试工具验证自动化测试框架的容量和稳定性是否符合标准,并确定设计的自动化检测框架是否可以实际用于未来的测试工作。
第六章主要对本文所做的工作进行了全面的分析和总结,解释和总结了自动化测试框架的优缺点,并为后续工作的进一步发展提出了目标和方向。
在文章最后是本文的参考文献与致谢部分。
1.4 本章小结
本章主要分析了软件行业快速发展带来的日益明显的性能问题。在介绍性能测试人员在性能测试中面临的许多困难和问题的背景下,基于JMeter Tool的性能自动化测试框架的研发将基于一个性能自动化测试架构的研发,该架构可以解决当前环境下软件公司成本与测试人员开发之间的各种矛盾。通过对国内外性能测试现状的分析和研究,发现国内外对自动化测试的理解仍存在显著差距,这为未来相关技术的研究和开发提供了背景和出发点。最后,本章在一些相关工作的基础上,列出了本文的总体结构,并根据本文的结构完成了性能自动化测试框架的设计和实现。
2 自动化测试的介绍
2.1软件自动化测试
2.1.1 软件自动化测试的概念
自动化是指机器或系统过程在没有人或很少人的情况下识别、操作、分析和实现预期结果的过程。自动化测试是一种过程,人们根据测试人员期望的测试计划和方案,使用测试工具或其他手段更有效、更快地提高软件效率和质量。整个自动化测试不仅仅是一个简单的记录和回放工具,而是整个系统的管理过程。自动化测试通常是指软件测试的自动化。软件测试是在预定条件下操作系统或应用程序,评估运行结果的过程。预定条件应包括正常和异常条件。
软件自动化测试是模拟手动测试步骤,执行用特定编程语言编写的测试程序,控制被测软件的执行,并完成全自动或半自动测试的过程。全自动测试是指由程序自动完成的整个测试过程,无需人工干预。半自动测试是指在自动测试过程中手动输入测试用例或选择测试路径,然后自动测试程序根据手动指定的要求完成自动测试。软件自动化测试的定义涵盖了所有测试级别,跨平台兼容,独立于过程。手动测试程序的各种测试,如功能、性能、并行性、压力等,都可以自动化。软件自动化测试有几种工具。自动化测试可以执行自动化回归测试。自动化测试需要一个计划、测试覆盖率,并通过评估自动化测试是否带来好处来确定测试的内容。
图2.1 自动化测试框架
2.1.2 软件自动化测试的原则
许多软件测试人员在设计自动化测试用例时,经常将所有手动测试的测试用例直接转换为自动化测试用例,甚至在不编写自动化测试用例的情况下开发测试脚本,这是非常非传统的,最终可能导致项目失败。因此,软件自动化必须遵循某些测试原则,才能事半功倍。
(1)自动化测试用例的范围通常包括核心业务流程或重复率高的公司。在测试过程中,许多测试工程师依靠自动化测试,并相信他们可以完全取代手动测试。然而,这种想法是错误的。特别是对于大型项目,测试场景可能非常广泛,对于非常复杂的场景和用例,编写脚本通常需要花费大量时间。此外,一些小公司不太重视测试,往往不安排测试人员只进行自动化测试。如果项目频繁更改,测试用例投资量巨大,后期维护工作量增加,这可能会导致最终失败。投资越高,损失就越大。因此,有必要将自动化测试用例的范围限制在重复率高的核心业务和公司。
(2)自动化测试用例的选择通常基于正常流程:在手动测试中,经常会出现设计异常测试用例场景的情况,每个异常场景都有不同的预期结果。如果所有异常情况都要转换并反映在自动化测试用例中,那么后期的维护成本肯定会非常高。真实的测试用例通常不需要反向测试用例,项目自动化通常用于回归测试,其主要目的是确保正常的场景和用例。因此,自动化测试通常选择正常场景。
(3)并非所有手动测试都可以通过自动化实现:许多测试专业人员有一种误解,即新的自动化测试通常会理想化所有手动测试用例都可以转换为自动化测试用例。然而,在实际的实施过程中,发现许多用例无法转换为自动化测试用例。因此,当创建自动化测试用例时,必须有一个规范文档来确定哪些测试用例可以转换为自动化测试用例。一旦有了标准测试工程师,他就可以根据规范开发自动化测试用例脚本。
(4)自动化测试必须回到起点:许多经验丰富的自动化测试人员都遇到过这个问题,许多测试脚本在第一次运行时运行平稳,但在第二次运行时立即报告错误,因为它们没有回到起点。所谓的返回原点是在执行测试用例之前恢复初始状态。如果在执行下一个用例之前,用例没有返回到其原始状态,则此脚本称为死脚本。因此,在执行自动化测试用例时,准备数据并返回起点至关重要,这是自动化测试的关键步骤。
(5) 自动化测试用例与手动测试的不同之处在于,并非每个步骤都需要编写预期结果:在手动测试中,每个测试步骤都有一个可靠的结果,但在自动化测试中,只有在测试脚本中准备检查点的测试用例才需要有预期结果,而其他测试用例则被视为正在进行的过程中的一个步骤。使用自动化测试,并非所有内容都需要验证。过多的验证会影响自动化的稳定性,并增加后期的维护成本。因此,并非自动化测试的每一步都需要预期的结果。
2.1.3 软件自动化测试的优势
通过各种工具提高软件质量和效率的最终目标是最大限度地降低软件成本,并在软件市场上获得尽可能多的优势。软件自动化测试就像一剂肾上腺素,最终可以有效地降低软件成本。通常,一个小项目可以为测试人员节省大量时间,并确保最大的准确性。
它之所以被称为兴奋剂,是因为它不仅使软件更加健壮,而且缩短了软件的生命周期。所有软件自动化测试都有以下独特优势:
(1)它可以提高测试的质量。软件开发的过程是一个持续的集成和改进过程,任何更改都可能导致错误。因此,当部分或全部软件产品或应