您好, 访客   登录/注册

HTTP接口性能测试脚本开发技术的研究

来源:用户上传      作者:陆俊杰

  摘要:对于接口性能测试,性能测试脚本开发是一个重要的环节,HTTP接口是目前常见的应用软件的后台接口,该文就该类型接口的性能测试脚本开发技术进行了讨论,着重阐述了脚本开发过程中各环节需要关注的重点,并结合实际的项目案例,对一些常见的问题以及解决方法进行了描述。
  关键词:HTTP接口;接口性能测试;脚本开发;LoadRunner;性能问题定位
  中图分类号:TP391 文献标识码:A
  文章编号:1009-3044(2020)13-0095-02
  1引言
  随着大数据、云计算等技术的不断发展,软件规模越来越大,软件系统的复杂度也越来越高,软件的用户数量也越来越庞大,越来越多的应用软件采用服务化的方式进行设计,通过接口作为各个系统间通信的桥梁,接口的质量对于软件的整体质量起到了重要的作用,接口性能测试是保障接口质量的重要手段,而在接口性能测试中,性能测试脚本开发是一个重要的环节,目前大部分应用软件的后台接口数据传输是基于HTTP协议的,本文将结合笔者的实际经验,针对HTTP接口性能测试脚本开发技术进行探讨。
  2概述
  本文选取了某移动应用软件测试项目作为研究案例,本项目中,需要对被测软件的后台HTTP接口进行性能测试,并对性能测试中发现的问题进行分析和定位,结合本项目的实际情况,笔者采用了HP LoadRunner具,作为本次项目的性能测试工具。
  3初步脚本开发
  对于HTYP接口的数据传输,遵循一个完整的HTTP请求过程,包含建立连接、发送请求、回送响应、关闭连接4个阶段,初步脚本开发就为了实现这一过程,通过编写发送请求的代码,使得测试脚本能够成功向被测接口发送请求,并完成此过程的数据交互。因此在代码中需要定义完成这个过程所需要的相关请求参数,例如:请求地址、请求方式、请求人参、请求头域等。
  接口的请求方式一般分为GET和POST方式,针对简单的接口请求,例如本项目中无需人参直接以GET方式请求的接口,由于HPLoadRunner工具内置了默认的请求头,所以一般仅需要在发送请求的代码中定义请求地址、请求端口号、请求方式三个参数,即可实现请求的发送;對于一些复杂的接口请求,例如本项目中,以POST方式传递JSON格式参数的接口,在发送请求的代码时,就还需要额外定义符合JSON格式的请求人参以及"application/json"请求头域等参数。
  完成发送请求的代码的编写,只是做到了脚本开发的第一步,即测试脚本实现了成功向接口发送请求和接收接口返回信息的功能,但这并不意味着脚本开发过程结束了,例如可能会发生接口未返回期望的响应、没有能够真实地模拟实际使用场景等,因此通常还需要对测试脚本进行诸多完善,才能使测试脚本达到最终测试目的。
  4完善脚本开发
  4.1动态参数的处理
  HTTP接口请求中的一些参数经常是动态的,它们遵循一定的业务规则或技术规则,同时一些接口的后台数据库是存在缓存的,若是在测试中使用固定的参数重复请求,就可能触发数据库的缓存机制,因此不足以检测出实际接口的性能嘲;针对一些安全性更高的接口,例如对参数加密的接口,若是用固定的参数发送请求,则可能导致请求发送失败,因此在测试脚本中需要对这些动态参数进行合理的处理。
  针对一些非加密的参数,可以通过在测试工具中建立参数池,根据业务的规则建立参数迭代的机制,并考虑参数的充足性。例如本项目中的某一业务数据查询接口,考虑到数据库缓存对性能测试结果的影响,脚本需要实现向被测接口每次查询不同的数据,该项测试的并发要求为5,000个并发用户,需要进行10次循环迭代的测试,因此在测试脚本中建立了50,000个不同数据的参数池,并设置了参数的唯一迭代。
  针对一些加密参数,参数化的处理方式会相对复杂。经过笔者研究,一般有以下几种解决方法:
  1)若加密的参数可以通过某一接口动态获取,则可以在测试脚本中先请求该接口,通过测试工具提取该接口返回信息中的加密参数。
  2)由系统的开发方将加、解密方法封装成组件,提供给测试方,供测试方在测试脚本中调用组件进行加解密操作。
  3)测试方在了解加密算法的前提下,在测试脚本中实现加密参数的生成。
  4)减弱或取消加密的限制,例如后台延长密钥的有效期、使用一个固定的万能密钥等,使用该方法将较大程度地减轻参数化工作量,但需要对因加密机制调整而导致的性能测试结果影响进行充分评估。
  以本项目中涉及的一个加密接口为例,开发方通过SHA-256加密算法对接口的某一参数值进行了加密。由于其无法提供组件或提供可以动态获取该加密信息的接口,同时加密机制不宜取消,因此采用了第三种方式进行参数化,即在测试脚本中实现加密参数的生成。笔者通过HPLoadRunner工具自带的函数完成加密前字符串的处理,但工具不支持直接进行SHA-256加密,为了尽量使测试脚本简洁、高效,笔者使用了C-FREE 5工具编译了SHA-256算法的动态链接库文件,利用HP LoadRunner工具的动态链接库文件的调用机制,在测试脚本中调用该动态链接库文件中封装的SHA-256加密函数,从而在测试脚本中成功实现了该参数值的加密。
  4.2检查点的设计
  在性能测试过程中,操作执行的成功率是一项重要的指标,尤其是对于接口,若是接口在性能测试中返回了未预期的响应,就意味着接口可能存在性能的缺陷,为了准确地衡量接口是否正确地处理了客户端的请求,就需要我们在测试工具中设置合理的判断。HP LoadRunner工具中可以通过设计检查点m来判断接口服务端的返回信息中是否包含了预期的结果,对于HTTP接口,在返回信息中,通常会有特定的状态码来表明接口请求的处理状态,例如“code:0”经常是一个接口请求成功的响应标志。不同接口的成功响应标志取决于接口的设计,因此关于接口处理成功的标准需要与开发方确认并达成一致,若是用了不合理的检查方式,将可能会影响性能缺陷的检出率。   4.3集合点设置
  通常在测试脚本中可以设置集合点,用以同步虚拟用户以便恰好在同一时刻执行任务,对于接口测试来说,添加集合点,使虚拟用户在同一时刻集中请求接口,可以检测接口承受瞬时并发的能力,有助于快速发现接口在并发请求处理上的性能瓶颈。在本次测试中,对于接口的并发处理能力要求较高,因此在测试脚本中设置了集合点。
  4.4辅助性能问题定位
  对于一个成功的HTFP接口性能测试,不仅要能够准确检测接口实际性能情况,同时还应有利于协助开发方成功定位性能问题,测试脚本的开发对性能问题定位可以起到重要的作用,通过在脚本中有针对性地进行一些辅助问题定位的定制化开发,可以为性能问题的定位提供重要的支撑。一个接口如果发生问题,通常会向客户端返回相关错误信息,而这个信息对于开发方定位性能问题起到了重要的作用,在分析性能問题时,报错信息和报错数量是一个重要的指标,在事务失败时,HP LoadRunner工具可以输出一些基本的报错,例如检查点不通过、非正常的HTrP响应代码等错误类型,但不会将接口自身反馈的错误信息记录到报错中,若需要查看具体的返回,就需要在日志中查看。对于一些并发量大、报错信息较多的测试,将会给错误信息的查找、统计、分析带来较大的工作量。
  在本次接口性能测试中,为了解决这一问题,在测试脚本中,编写了自定义的字符串关联函数,有选择性地将接口返回的关键报错信息关联出来,并在检查点未通过的情况下,将接口返回的错误信息定义为工具级别的报错。性能测试执行完毕后,可以直接通过HP LoadRunner工具的结果分析模块,将接口返回的错误和数量进行分类导出。由于本次测试的接口数量较多,测试迭代较为频繁,通过这样的方式有效地节省了测试数据分析的时间,使开发方能够快速准确地定位到接口问题。
  5结束语
  本文结合了笔者对HTYP接口性能测试脚本开发技术的研究以及实际的项目案例,介绍了HTFP接口性能测试脚本开发过程中各个主要环节的技术要点,并对开发过程中遇到的问题和解决方法进行了描述。对于HTFP接口性能测试,测试脚本开发是一个重要的环节,测试脚本不仅要能够有效地模拟实际使用场景,同时也应能够尽可能地为性能问题分析和定位提供帮助,而在开发过程中,也需要根据实际情况,进行合理的设计和开发,使测试脚本能够最大化地满足最终测试目的。
转载注明来源:https://www.xzbu.com/8/view-15267135.htm