【AI图像识别二】JMeter轻松实现大数据量AI图像识别接口测试

时间:2024-02-18 16:37:58

******************************************************************************

本文主要介绍利用Jmeter进行AI图像识别接口测试

  1.测试需求关键点分析

  2.测试准备工作

  3.测试过程与测试结果统计

******************************************************************************

一、测试需求关键点分析

1)AI图片稽查算法模型优化功能需求:

 *  人像稽查API接口的模型优化效果测试,包含功能与性能测试

2)转化为测试需求:

 *  测试AI图片稽查接口功能是否满足接口API设计需求

 *  测试升级版本较基础版本算法模型准确率提升范围,与研发提供的指标数据进行对比

 *  测试升级版本较基础版本算法模型性能提升范围,结合现网测试结果进行扩展对比

二、测试准备工作(摘自测试计划关键步骤)

1)测试数据:图片正常、非免冠、占比不合理、遮挡、非人脸

  注意:要与算法工程师讨论测试数据种类、数量与模型评估方法,不同项目测试侧重点不同,灵活运用

2)测试工具:JMeter 或 写python脚本 或 Postman 

3)测试环境:千兆网络带宽 、1个GPU 2个flask进程 、2个CPU(24核数)

4)测试方法:

 *  功能测试:传入不同种类图片数据对接口进行请求,验证返回结果是否符合功能需求  

 *  模型评估:传入不同种类图片数据集对接口进行请求,对返回结果进行统计,计算模型准确率来判定模型的是否符合标准

 *  性能测试:不同并发数对接口进行性能测试,观察服务器内存、硬盘、GPU的使用情况,记录TPS与响应时间

5)JMeter脚本设计关键点:
      问题一:接口参数为图片流,如何解决几百个图片流文件的参数化?

  解决办法:

    A、Beanshell 读取图片流存放文件的目录,设置参数引用Beanshell图片流变量   --- 不可行
    B、利用CSV参数化图片流目录  --- 不可行
    C、换个思路,利用Beanshell前置处理器读取图片并进行转流后参数化   --- 解决

  问题二:Response返回值为json嵌套格式,如何取到json嵌套的data列表值并断言多个预期值?

   解决办法:

    A、利用正交法把所有返回值的用响应断言做判断  --- 没有试,比较不灵活且容易遗漏返回值
    B、利用正则表达式提取器+Beanshell断言方式,正则提取json嵌套data列表,beanshell断言遍历列表判断满足条件的值   --- 解决

三、测试过程与测试结果统计:

1)模型功能测试与模型评估测试

 *  利用JMeter工具创建测试计划,根据API文档添加测试请求,消息体数据利用Beanshell参数化


 *  利用while控制器与Beanshell前置处理器结合的方式对每一个图片进行稽查,while控制器控制图片的数量,Beanshell前置处理器负责加载图片、转码图片、以变量的方式对参数进行赋值

 


 *  利用正则表达式提取器与BeanShell断言的方式对返回的json结果进行分类断言,统计聚合报告的成功请求数


 *  利用excel表格统计算法模型的准确率,对比不同版本的测试结果,升级模型准确率与研发指导效果接近,符合上线标准。如图:

注释:第一次升级版本占比与遮挡准确率很低,分析原因得知,占比测试数据与研发验证数据存在差异,替换数据后准确率合理了,遮挡的准确率计算方法与研发计算方法存在差异,研发是去掉no_face情况后做的统计,所以经过沟通重新测试了遮挡与占比,目前已经符合效果要求。

2)性能测试过程参考之前博客:

  Linxu下JMeter进行接口压力测试:https://www.cnblogs.com/xjx767361314/p/11322039.html

  总结:在内存、GPU、网络正常的情况下,TPS变化不大,说明已经到达处理瓶颈了,增加并发造成线程等待,所以响应时间不断增加,如图: