Loadrunner 压测脚本:从原理到实践的全面解析

在软件性能测试领域,Loadrunner 作为一款行业领先的性能测试工具,被广泛用于模拟大量用户并发操作,以评估系统在不同负载下的性能表现。而 Loadrunner 压测脚本作为该工具的核心组成部分,是实现性能测试场景的关键载体。它如同性能测试的 “指令集”,精准定义了用户的操作流程和系统交互方式,为全面、准确的性能评估提供了坚实基础。

Loadrunner 压测脚本:从原理到实践的全面解析插图

一、Loadrunner 压测脚本基础概念

Loadrunner 压测脚本是使用 Loadrunner 专属的脚本语言(如 C 语言基础上扩展的 C Vuser 脚本、Java Vuser 脚本、Web Service Vuser 脚本等)编写的程序,用于模拟真实用户在被测系统上的一系列操作行为。通过这些脚本,Loadrunner 能够模拟成百上千甚至数万个虚拟用户,同时对被测系统发起请求,从而测试系统在高并发、高负载情况下的响应时间、吞吐量、资源利用率等性能指标。

压测脚本的核心作用在于将用户的业务流程转化为可被 Loadrunner 识别和执行的代码。例如,在电商网站的性能测试中,压测脚本可以模拟用户注册、登录、浏览商品、加入购物车、下单支付等一系列操作,Loadrunner 通过运行这些脚本,收集系统在处理这些操作时的各项性能数据,为系统性能优化提供依据。

二、Loadrunner 压测脚本的工作原理

Loadrunner 压测脚本的工作过程主要围绕虚拟用户(Vuser)的行为模拟展开,其核心原理包括以下几个关键节:

  1. 录制与协议解析:在脚本创建的初始阶段,通常会通过 Loadrunner 的录制功能,记录真实用户在被测系统上的操作过程。在录制过程中,Loadrunner 会捕获用户与系统之间的通信数据,并根据被测系统所采用的协议(如 HTTP/HTML、TCP/IP、SOAP、JDBC 等)对这些数据进行解析。例如,对于基于 HTTP 协议的 Web 应用,Loadrunner 会记录浏览器发送的 HTTP 请求(如 GET 请求、POST 请求)和服务器返回的 HTTP 响应,解析出请求头、请求参数、响应状态码、响应内容等关键信息。
  2. 脚本生成与参数化处理:录制完成后,Loadrunner 会根据解析后的通信数据自动生成基础脚本。但生成的初始脚本往往包含固定的参数值(如用户名、密码、商品 ID 等),这些固定参数无法满足模拟多个不同用户操作的需求。因此,需要对脚本进行参数化处理,将固定参数替换为参数变量,并通过参数化设置为这些变量分配不同的值(可以从预设的参数文件中读取,或通过函数生成)。例如,在模拟多个用户登录时,将脚本中的固定用户名替换为参数 “username”,并为该参数设置一个包含多个不同用户名的参数列表,使每个虚拟用户使用不同的用户名进行登录操作,更贴近真实的用户场景。
  3. 事务与检查点设置:为了准确衡量系统处理特定业务流程的性能,需要在脚本中设置事务。事务是指从用户发起某个操作到该操作完成的整个过程,如 “登录事务”“下单事务” 等。Loadrunner 会记录每个事务的开始时间和结束时间,从而计算出事务的响应时间。同时,为了验证系统响应的正确性,还会在脚本中设置检查点。检查点可以检查服务器返回的响应内容中是否包含预期的字符串、图片、状态码等信息,确保系统在处理请求时不仅性能达标,而且功能正确。例如,在登录操作的脚本中设置检查点,检查服务器返回的页面中是否包含 “登录成功” 的提示信息,以确认登录功能正常。
  4. 并发执行与负载生成:脚本准备就绪后,Loadrunner 的控制器(Controller)会根据测试场景的设置,调度多个虚拟用户并发执行脚本。每个虚拟用户都会按照脚本中定义的操作流程,向被测系统发送请求。Loadrunner 通过负载生成器(Load Generator)产生大量的并发请求,模拟真实的用户负载。在执行过程中,Loadrunner 会实时监控虚拟用户的状态、系统的各项性能指标(如 CPU 使用率、内存占用、网络带宽等),并将这些数据记录到测试结果中。
  5. 结果分析与报告生成:测试执行完成后,Loadrunner 的分析器(Analyzer)会对收集到的性能数据进行处理和分析,生成详细的性能测试报告。报告中包含事务响应时间分布、吞吐量曲线、系统资源利用率趋势等图表和数据,测试人员可以通过这些报告判断系统是否满足性能需求,找出系统的性能瓶颈(如数据库响应缓慢、服务器内存不足、网络带宽受限等)。

三、Loadrunner 压测脚本的核心组件

  1. Vuser 脚本主体:这是压测脚本的核心部分,由一系列函数和代码语句组成,用于描述虚拟用户的操作流程。不同类型的 Vuser 脚本(如 Web Vuser 脚本、Java Vuser 脚本)会使用相应的函数库。例如,Web Vuser 脚本主要使用 Web 函数库中的函数,如web_url()用于模拟浏览器发送 GET 请求访问指定 URL,web_submit_data()用于模拟表单提交(POST 请求),web_reg_save_param()用于从服务器响应中提取特定数据并保存到参数中。
  2. 参数化设置:包括参数定义、参数类型、参数取值方式等。参数定义用于指定参数的名称和作用范围;参数类型有多种,如 “文件”(从外部文件中读取参数值)、“用户定义的列表”(手动输入多个参数值)、“随机数”(通过随机函数生成参数值)、“唯一数”(生成不重复的参数值)等;参数取值方式包括 “按顺序”(每个虚拟用户按顺序从参数列表中取值)、“随机”(每个虚拟用户随机从参数列表中取值)、“每个迭代一次”(每次脚本迭代时取一个新值)等。合理的参数化设置能够使脚本更真实地模拟不同用户的操作。
  3. 事务(Transactions):通过lr_start_transaction()和lr_end_transaction()函数来定义事务的开始和结束。lr_start_transaction()函数用于标记事务的开始,其参数为事务名称;lr_end_transaction()函数用于标记事务的结束,其参数包括事务名称和事务状态(如 LR_AUTO、LR_PASS、LR_FAIL 等,LR_AUTO 表示由系统自动判断事务状态,根据检查点的结果或是否发生错误来确定事务成功或失败)。事务是衡量系统性能的重要指标,通过分析事务响应时间可以了解系统处理不同业务的效率。
  4. 检查点(Checkpoints):在 Web 应用的测试脚本中,常用的检查点函数有web_reg_find()(用于在服务器响应中查找指定的文本字符串)、web_image_check()(用于检查指定的图片是否存在)等。web_reg_find()函数需要设置查找的文本字符串、查找范围(如响应头、响应体)等参数,当在响应中找到指定文本时,检查点通过,否则失败。检查点确保了在性能测试过程中,系统不仅能处理大量请求,而且处理结果是正确的,避免出现 “性能达标但功能错误” 的情况。
  5. 思考时间(Think Time):真实用户在进行操作时,会有一定的停顿时间(如浏览页面时的思考时间、输入信息时的间隔时间)。为了更真实地模拟用户行为,需要在脚本中设置思考时间,通过lr_think_time()函数实现,该函数的参数为思考时间的秒数。例如,在用户登录后浏览商品列表的操作之间,设置lr_think_time(5),表示虚拟用户会在此处停顿 5 秒,模拟用户浏览商品的思考过程。合理设置思考时间可以使性能测试结果更接近真实情况。
  6. 初始化与结束部分:Loadrunner 脚本通常分为三个部分:vuser_init(初始化部分)、Action(主要操作部分)、vuser_end(结束部分)。vuser_init 部分用于执行虚拟用户开始测试前的初始化操作,如连接数据库、加载配置文件等,该部分代码只在虚拟用户启动时执行一次;Action 部分是脚本的核心,包含虚拟用户要重复执行的主要业务流程,其执行次数可以在测试场景中设置;vuser_end 部分用于执行虚拟用户测试结束后的清理操作,如断开数据库连接、释放资源等,该部分代码只在虚拟用户结束测试时执行一次。

四、Loadrunner 压测脚本的创建步骤

  1. 确定测试目标与业务流程:在创建压测脚本前,需要明确性能测试的目标,如测试系统在多少并发用户下的响应时间不超过规定值、系统的最大吞吐量是多少等。同时,梳理出需要测试的关键业务流程,如对于在线银行系统,可能需要测试用户登录、查询余额、转账汇款等业务流程。明确这些内容后,才能有针对性地创建脚本,确保脚本能够覆盖关键的测试场景。
  2. 选择协议与录制设置:根据被测系统的类型和所采用的通信协议,在 Loadrunner 中选择合适的协议。Loadrunner 支持多种协议,常见的有 Web(HTTP/HTML)协议用于 Web 应用测试,Database(如 ODBC、JDBC)协议用于数据库性能测试,Socket 协议用于基于 TCP/IP 的自定义协议应用测试等。选择协议后,进行录制设置,包括设置录制的应用程序(如浏览器路径、客户端程序路径)、录制模式(如 HTML 模式、URL 模式,HTML 模式更贴近浏览器的解析方式,URL 模式则记录所有的 HTTP 请求)、录制的输出路径等。
  3. 录制业务操作流程:启动 Loadrunner 的虚拟用户生成器(Virtual User Generator,VUGen),点击录制按钮,按照梳理好的业务流程在被测系统上进行操作。在录制过程中,VUGen 会实时显示录制的操作步骤和捕获的通信数据。例如,录制 Web 应用的登录流程时,在浏览器中输入网址、输入用户名和密码、点击登录按钮,VUGen 会记录这些操作对应的 HTTP 请求和响应数据。录制完成后,停止录制,VUGen 会自动生成基础脚本。
  4. 脚本增强与优化
  • 参数化处理:找出脚本中需要动态变化的参数(如用户名、订单号等),通过 VUGen 的参数化功能将其替换为参数变量,并设置参数的取值方式和数据。例如,在登录脚本中,选中固定的用户名 “testuser1”,右键选择 “替换为参数”,创建参数 “user_param”,然后在参数属性中设置从包含多个用户名的文本文件中读取参数值。
  • 设置事务:在脚本中关键业务流程的开始和结束位置插入事务函数。例如,在登录操作开始前插入lr_start_transaction(“login_transaction”);,在登录操作完成后插入lr_end_transaction(“login_transaction”, LR_AUTO);,以标记 “login_transaction” 事务。
  • 添加检查点:在需要验证响应正确性的位置添加检查点。例如,在登录操作后,添加web_reg_find(“Text=登录成功”, LAST);检查点,用于检查服务器响应中是否包含 “登录成功” 文本。
  • 设置思考时间:根据真实用户的操作习惯,在脚本的适当位置添加思考时间函数。例如,在浏览商品页面后、点击加入购物车按钮前,添加lr_think_time(3);,模拟用户的思考过程。
  • 修改脚本代码(必要时):对于自动生成的脚本中不合理或错误的代码,进行手动修改。例如,删除录制过程中产生的冗余代码,调整函数的参数设置,添加错误处理代码(如使用if语句判断请求是否成功,若失败则进行相应的处理)等。
  1. 脚本调试与验证:脚本优化完成后,需要进行调试,确保脚本能够正确执行。在 VUGen 中,可以通过 “运行” 功能执行脚本,观察脚本的执行过程和输出日志。检查脚本是否能够按照预期完成业务流程,参数化是否生效(每个迭代是否使用不同的参数值),事务是否正确记录,检查点是否能够准确判断响应的正确性,是否有错误提示等。如果发现问题,返回上一步对脚本进行修改和优化,直至脚本能够稳定、正确地执行。
  2. 关联处理(针对动态数据):在很多应用中,服务器返回的响应中包含一些动态生成的数据(如会话 ID、令牌、验证码等),这些数据会在每次请求时发生变化,并且会被后续的请求所使用。例如,用户登录后,服务器会生成一个会话 ID 并返回给客户端,客户端在后续的请求中需要携带该会话 ID 才能继续操作。对于这种情况,初始录制的脚本中会包含固定的动态数据,导致后续请求失败。因此,需要进行关联处理:使用关联函数(如web_reg_save_param())从服务器的响应中提取这些动态数据,并将其保存到参数中,然后在后续需要使用该数据的请求中引用该参数。例如,通过web_reg_save_param(“SessionID”, “LB=sessionid=”, “RB=&”, LAST);从响应中提取会话 ID 并保存到参数 “SessionID” 中,在后续的请求 URL 中使用 “{SessionID}” 引用该参数。
  3. 保存与版本控制:脚本调试通过后,将其保存到指定的目录。为了便于管理和追溯,建议对脚本进行版本控制,记录每次修改的内容、修改人、修改时间等信息。当测试场景或被测系统发生变化时,可以快速找到对应的脚本版本进行修改和复用。

五、Loadrunner 压测脚本的优化技巧

  1. 精简脚本代码:录制生成的初始脚本往往包含大量冗余代码(如不必要的注释、重复的函数调用、无关的请求记录等),这些冗余代码会增加脚本的复杂性,影响脚本的执行效率。因此,需要对脚本进行精简,删除无用的代码和注释,合并重复的操作,使脚本结构更清晰、简洁。例如,删除录制过程中浏览器自动发送的一些无关的图片请求、广告请求等代码,只保留与业务流程相关的核心请求。
  2. 合理设置参数化策略:参数化时,要根据测试场景的需求选择合适的参数类型和取值方式。对于需要唯一值的参数(如订单号、用户 ID),可以选择 “唯一数” 参数类型;对于需要从固定列表中取值的参数(如用户名、商品类别),可以选择 “文件” 或 “用户定义的列表” 参数类型。同时,要注意参数的数量,确保参数数量足够满足虚拟用户的并发需求,避免出现参数值重复使用导致的测试错误。此外,可以设置参数的循环方式(如顺序循环、随机循环),使参数的使用更符合真实的业务场景。
  3. 优化事务与检查点:只对关键的业务流程设置事务,避免过多的事务增加系统的开销和测试数据的复杂性。事务的粒度要适中,既不能过大(如将整个业务流程设置为一个事务,无法区分各环节的性能),也不能过小(如每个请求都设置为一个事务,导致事务数量过多)。对于检查点,要选择关键的验证点进行设置,避免在每个请求后都设置检查点,以免影响脚本的执行效率。同时,检查点的判断条件要准确、简洁,避免使用过于复杂的正则表达式或模糊的判断条件,提高检查点的执行效率和准确性。
  4. 调整思考时间分布:思考时间的设置要符合真实用户的操作习惯,可以通过分析真实用户的操作日志,统计不同操作之间的平均停顿时间,作为设置思考时间的依据。在负载测试中,可以根据测试场景的需求调整思考时间的比例(如在高负载测试时,适当缩短思考时间,模拟用户操作速度加快的情况)。此外,可以使用随机思考时间(如lr_think_time(rand() % 5 + 2);表示 2-6 秒的随机停顿),使虚拟用户的操作更具随机性,更贴近真实的用户行为。
  5. 采用关联函数的最佳实践:在进行关联处理时,要选择合适的左边界(LB)和右边界(RB)来准确提取动态数据,确保提取的参数值正确无误。左边界和右边界应选择动态数据前后固定不变的字符串,避免因边界变化导致关联失败。对于可能出现多个匹配结果的情况,可以通过设置 “ORD” 参数指定提取第几个匹配项(如 “ORD=1” 表示提取第一个匹配项)。同时,要在关联函数后添加错误处理代码,判断关联是否成功,若关联失败则进行提示或采取相应的补救措施。
  6. 脚本模块化设计:对于复杂的业务流程,可以将脚本拆分为多个模块(如登录模块、浏览商品模块、下单模块等),每个模块实现特定的功能,并通过函数调用的方式在主脚本中组合这些模块。模块化设计可以提高脚本的可读性、可维护性和可复用性,当某个业务环节发生变化时,只需修改对应的模块即可,无需修改整个脚本。例如,创建一个login()函数实现登录功能,在需要登录的地方调用该函数。

六、Loadrunner 压测脚本使用的注意事项

  1. 协议选择的准确性:协议选择是脚本创建的基础,选择错误的协议会导致录制的脚本无法正确模拟用户操作,甚至无法录制。因此,在选择协议前,需要深入了解被测系统的架构和通信方式,必要时可以通过网络抓包工具(如 Wireshark)分析系统使用的协议类型。例如,对于基于 WebSocket 的实时通信应用,需要选择 WebSocket 协议,而不是普通的 HTTP 协议。
  2. 录制环境的一致性:录制脚本时的环境应与实际的生产环境或测试环境保持一致,包括浏览器版本、操作系统、网络环境、应用程序版本等。环境不一致可能导致录制的脚本在执行时出现兼容性问题,如脚本中包含特定浏览器版本才支持的请求头,在其他浏览器版本下执行时会出现错误。
  3. 避免过度录制:在录制过程中,只录制与测试目标相关的业务操作,避免录制不必要的操作(如浏览无关页面、刷新页面、错误操作等),以免生成冗余的脚本代码,增加脚本优化的难度。同时,录制时要保持操作的连贯性和规范性,避免频繁的回退、重复操作,确保录制的脚本流程清晰。
  4. 参数化与关联的全面性:在脚本优化过程中,要全面排查需要参数化和关联的内容,确保所有的动态数据都得到正确处理。遗漏参数化可能导致多个虚拟用户使用相同的参数值,引发业务冲突(如多个用户同时购买同一商品导致库存异常);遗漏关联则可能导致后续请求失败,影响测试的正常进行。
  5. 脚本的可移植性:创建的脚本应具有一定的可移植性,能够在不同的 Loadrunner 版本、不同的负载生成器环境中正常执行。避免在脚本中使用与特定环境相关的硬编码(如绝对路径、特定的注册表项等),尽量使用相对路径和环境变量。同时,在脚本中添加必要的注释,说明脚本的功能、参数的含义、关键步骤的作用等,便于其他测试人员理解和使用脚本。
  6. 测试数据的准备与管理:参数化使用的测试数据(如用户列表、商品信息等)需要提前准备,并确保数据的有效性和完整性。数据量应满足测试场景的需求,避免因数据不足导致测试中断。同时,要对测试数据进行管理,包括数据的生成、存储、更新和保密(对于敏感数据如密码,应进行加密处理)。
  7. 执行前的脚本检查清单:在将脚本用于正式的性能测试前,应进行全面的检查,包括:脚本是否能够正确执行所有业务流程;参数化是否生效,参数值是否符合预期;事务和检查点是否设置正确,能否准确记录性能数据和验证响应正确性;关联是否成功,动态数据是否被正确提取和使用;思考时间是否合理设置;脚本中是否存在错误处理机制等。通过执行检查清单,可以最大限度地减少脚本问题对测试结果的影响。

七、星界云手机的优势

脚本运行更稳定。本地设备运行脚本时,常因系统后台程序抢占资源、内存不足等导致脚本卡顿或崩溃。而星界云手机专注于运行指定应用,能为脚本提供纯净的运行环境,减少干扰,让脚本持续稳定执行挂机操作,避免中途中断影响金币获取。​
无需担心设备负载。长时间挂机刷金币,本地手机或电脑会因持续高负载出现发热严重、耗电飞快的问题,甚至影响设备寿命。星界云手机承担了所有运行压力,本地设备仅需远程查看,彻底摆脱这些困扰,可全天候挂机无忧。​
适配性更强。很多脚本对设备系统版本、分辨率等有严格要求,本地调试需耗费大量时间。星界云手机预设了多种适配环境,能兼容市面上多数雷霆战机挂机脚本,省去繁琐的调试步骤,下载脚本后可快速启动使用。​
这些优势直接针对挂机刷金币的核心需求,让脚本运行更顺畅、更省心,助力玩家高效积累金币。欢迎测试!

Loadrunner 压测脚本:从原理到实践的全面解析插图1
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享