要做接口并发性能测试,总得先学会分析吧!

2023-11-01

引言

这篇是我3月份在公司内部做的技术分享内容,由于我在公司内部分享的内容较多以及一些特殊性,我摘取了接口并发测试从设计思路整理→测试方案设计→设计分析→代码编写这套流程(我不会承认我把40多页PPT的内容都放在这篇博文里)。

不管是在内部技术分享,还是对个人的培训中,都发现:很多人并不清楚接口并发测试的整体流程,或者说,并没有参与过整个流程。

所以,我把这部分内容摘取出来、分享出来,就是为了能让大家在测试开发的道路上越走越远!

接下来,就开始今天的分享,来看看接口并发性能测试是怎样的分析流程。

并发测试定义

目的

是以并发为手段进行接口测试行为,通过测试行为发现接口在并发场景下导致的功能问题。

类型

①点层面上:同一时间做某件事。

例:早上7:30 ,所有的学生都升国旗。

②线层面上:一个时间做不同的事,但同时对服务器产生压力。

例:一个时间点,有的学生跳皮筋、有的玩足球。

敲黑板:并发测试不等同于性能测试,性能测试也只是并发测试的一个小类。

并发测试分类

功能并发测试

解析:要先进行测试单业务功能场景的并发测试,再进行混合业务功能场景的并发测试。

目的:为验证系统功能是否符合需求规格说明书的要求。

性能并发测试

解析:同时满足某些系统性能指标的前提下,让被测对象承担不同的工作量,以评估被测对象的最大处理能力及是否存在缺陷。

目的:为验证系统性能指标是否符合需求规格说明书的要求。

稳定性并发测试

解析:判断测试系统的长期稳定运行的能力。

目的:为验证系统稳定性是否符合需求规格说明书的要求。

异常性并发测试

解析:模拟系统在较差、异常资源配置下运行,以评估被测对象在资源不足的情况下的工作状态。

目的:为验证系统的异常响应机制是否满足需求规格说明书的要求。

设计思路整理

需求分析

①首先找到并发测试对象,了解需求测试的功能有哪些,可以按照业务功能整理,不必深入细节。

②其次描述测试对象的重要性,如要求严格质量的核心功能、高频使用功能、占用系统资源较多的功能等。

③最后进行测试对象拆分,比如购买商品可以拆分成:搜索商品、锁定库存、提交订单、发送支付指令、接受处理支付结果、业务流水、短信及站内信通知、VX推送结果等。

环境需求分析

明确重点测试对象,预先设置基础数据及大量历史数据、模拟真实环境。

性能指标需求分析

分析性能指标是否合理。可以从历史数据的这几个方面考虑:TPS、页面访问量、并发请求数等,从而来判断需求指标是否合理,安排优先级。

测试方案设计

测试策略

并发测试的准备工作:请求顺序、请求之间互相调用关系、数据流向、有没有调用外部系统等后,需要明确重点测试对象,预先设置基础数据及大量历史数据,模拟真实环境等。

测试策略执行,一般涉及以下4个阶段:

①对于功能并发测试:要先进行测试单业务功能场景的并发测试,再进行混合业务功能场景的并发测试;

②对于性能并发测试:同时满足某些系统性能指标的前提下,让被测对象承担不同的工作量,以评估被测对象的最大处理能力及是否存在缺陷;

③对于稳定性并发测试:判断测试系统的长期稳定运行的能力。该策略强度较小,一般趋向于客户现场日常状态下的压力强度;

④对于异常性并发测试:模拟系统在较差、异常资源配置下运行,如人为降低系统工作环境所需要的的资源,网络带宽、系统内存、数据帧等,以评估在资源不足情况下的工作状态。

总结:不同的测试阶段,测试人员关注的测试目的也是不同。所以对测试人员来说,测试思想才是最重要,有了测试思想,才会有好的测试方案。

测试方案

以两轮测试为例:

第一轮测试,以接口文档驱动测试,测试步骤及要点如下:

①编写接口测试代码:核对每个接口传入参数控制:长度限制、格式、必填项限制、正常值范围限制等。同时,确认报错提示信息是否准确、到位;

②异常数据测试:如渠道值设置负数、属性设置不存在、网络断开、数据库锁表等情况,检查数据是否出现异常;

③逐个接口进行并发事务测试:检查账户金额,用户流水、对账流水数据。核对数据的与用例调用结果是否一致;

④复合接口并发测试:将各种充值、交易类型的接口按照一定的顺序进行并发,校验账户收支金额、流水是否与用例调用结果是否一致。

第二轮测试,以业务场景驱动测试,测试步骤及要点如下:

①统一动作并发:相同订单并发支付,并发退款;

②混合交易场景:秒杀抢购,集中退货、到货确认;

③绕过页面操作:通过抓包,抛送异常值进行交易测试。

指标分析

整理并发需求

需求内容:中午和晚上是订餐的高峰期,所以会有很大的并发订单量。为了保证订单成功率、响应速度等因素,我们要对高峰期的订单量进行并发性能测试。

性能指标需求:

① 打开速度<3s,订单提交成功<5s;

②订单成功率达到99.5%以上;

③在100个并发用户的高峰期,订单处理能力至少达到900TPS。

提取性能指标

以100个外卖订单为例,需要提取的并发指标:

①并发订单数

②成功订单数

③成功订单响应时间

④订单成功率

⑤成功订单的总响应时间

⑥成功订单的平均响应时间

⑦Tps

性能指标分析

①并发订单数:即自定义的并发数,把并发100次,设置为10个线程,每个循环10次;

②成功订单数:就是获取响应值为成功的请求,先定义一个success_count ,初始值为0,如果成功的话执行+1;

③订单成功率:成功订单数/总的订单数成功;

④订单总响应时间:每个成功订单的响应时间之和,所以我们定义一个sum_time,初始值为0.00,然后把每次成功的响应时间加起来成功;

⑤订单平均响应时间:成功订单总响应时间/成功订单数;

⑥TPS:成功并发数/成功订单平均响应时间;

⑦订单响应时间:在请求之前,获取一次时间,在断言成功之后,再次获取一次时间,这样二者之差,就是订单的响应时间。

代码实战

咱们还是老规矩,直接上代码,在代码中做分析:

# -*- coding: utf-8 -*-"""@ auth : carl_DJ@ time : 2021-3-6"""
import hashlibimport threadingfrom time import *from datetime import datetime,timedeltaimport requestsimport json

'''初始化全局变量'''
#自定义全局变量需要的线程数,10thread_num = 10#自定义全局变量每个线程需要循环的数量,10one_worker_num = 10#设定最开始的总时间sum_time = 0.00#设定最开始的成功连接数success_count = 0
''' 后台登录常规操作'''
username = 'carldj'password = hashlib.md5(b'123456').hexdigest()  #设置密码,且是md5加密方式url = "http://www.xxx.com/energy/user/login/"form_data = {"username":username,"password":password}login_response = requests.post(url,data=form_data)c = login_response.cookies
 '''订单发送请求'''
def order():    #引用全局变量    global c    global sum_time    global success_count    #获取执行发送订单请求前时间    t1 = time()    #设定url、form_data进行创建订单    url1 = "http://www.xxx.com/energy/create_order/"    from_data1 = {"restaurant_id":1136,                  "menu_item_total":'12.00',                  "menu_item_data": [{'id':2667868,'p':22,'q':3}]                  }    make_responst = requests.post(url1,data=from_data1,cookies = c)    #获取请求结果    res = make_responst.text    #结果转换成字典赋值给变量id    id = json.loads(res)['order_id']    #断言判断是否提交成功    assert  id != " "    su_time =datetime.now()+ timedelta(hours=1)        #设定url、form_data进行生成订单    url2 = "http://www.xxx.com/energy/place_order/"    from_data2 = {"restaurant_id": id,                  "customer_name": 'carl_dj',                  "mobile_number":username,                  "delivery_address":"address message",                  "pay_type":'cash',                  "preorder":su_time                  }    place_responst = requests.post(url2, data=from_data2, cookies=c)    res = place_responst.text    #追加断言,判断结果是否有"success",有的话,说明订餐成功    assert res == " success"    print("订餐成功")    #订单成功后,再次获取一下时间    t2 = time()    #获取订单的响应时间    res_time = t2-t1    #把响应时间写入txt文件    result = open("E:\Private Folder\res.txt","a")  #路径直接写死,也可用os.path 来写路径    result.write("成功订单响应时间:" + str(res_time)+ '\n')    result.close()
    #也可以使用with打开文件,好处是不用关心文件是否关闭    # with open ("E:\Private Folder\res.txt","a") as result1:        # print(result1.read())
    #把每次成功订单数累加到全局变量sum_time中    sum_time  = sum_time + res_time    #把每次获取的成功订单数做累加,添加到全局变量success_count中    success_count = success_count +1
'''嵌套指定循环次数的order()函数'''
def working()    global one_worker_num    for i in range(0,one_worker_num):        order()
 '''自定义main()函数,来执行多线程'''def main():    global thread_num    #自定义一个空的数组,用来存放线程组    threads = []    #设置循环次数    for i in range(thread_num):        #将working()函数存放到线程中        t = threading.Thread(target=working,name="T"+ str(i))        #设定守护线程        t.setDaemon(True)        threads.append(t)    #启动循环执行    for t in threads:        t.start()    ##设置阻塞线程    for t in threads:        t.join()
if __name__ == "__main__":    main()    total_order = thread_num*one_worker_num    avg_time = sum_time/success_count    '''执行完之后,需要把数据写入到txt文件中'''    #订单并发总数    result.write("并发订单数:"+ str(total_order)+ "\n")    #成功并发数    result.write("成功并发数:"+ str(success_count) + "\n")    #订单成功率    result.write("订单成功率:"+ str(success_count/total_order*100)+ "%" + "\n")    #成功订单响应时间    result.write("成功订单总响应时间:"+ str(sum_time)+"\n")    #成功订单平均响应时间    result.write("成功平均响应时间:"+str(sum_time/success_count)+"\n")    #TPS事务数/秒    result.write("TPS:"+str(success_count/avg_time) + "\n")  #tps = 并发成功数/平均响应时间    result.close()

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走

​这些资料,对于在从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

要做接口并发性能测试,总得先学会分析吧! 的相关文章

  • 软件测试|sqlalchemy relationship

    简介 SQLAlchemy是一个流行的Python ORM 对象关系映射 库 它允许我们以面向对象的方式管理数据库 在SQLAlchemy中 relationship 是一个重要的功能 用于建立表之间的关系 在本文中 我们将详细探讨 rel
  • 软件测试|web自动化测试神器playwright教程(三十八)

    简介 在我们使用selenium时 我们可以获取元素的属性 元素的文本值 以及输入框的内容等 作为比selenium更为强大的web自动化测试神器 playwright也可以实现对元素属性 文本值和输入框内容的抓取 并且实现比seleniu
  • 软件测试|pycharm关联GitHub的详细步骤

    简介 GitHub 是全球最大的开源代码托管平台之一 而 PyCharm 是一款强大的 Python 集成开发环境 将两者结合使用 可以提高团队协作和代码管理的效率 本文将详细介绍如何在 PyCharm 中管理 GitHub 账号 包括如何
  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 软件测试|教你使用Python下载图片

    前言 我一直觉得Windows系统默认的桌面背景不好看 但是自己又没有好的资源可以进行替换 突然我一个朋友提醒了我 网络上的图片这么多 你甚至可以每天换很多个好看的背景 但是如果让我手动去设置的话 我觉得太麻烦了 我不如使用技术手段将图片下
  • 盲猜你不懂H5架构和原生架构的区别

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 跨平台UI自动化框架:Airtest,游戏开发和应用测试的利器

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 如何写好一个错误报告

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 月薪2W的软件测试工程师,到底是做什么的?

    在生活中 我们常常会遇到以下几种窘迫时刻 准备骑共享单车出行 却发现扫码开锁半天 车子都没有反应 手机导航打车 却发现地图定位偏差很大 司机总是跑错地方 买个水 却遭遇自动售货机吐币 或者不找零钱 好不容易休息打个游戏 却一直出现卡顿 闪退
  • 探索自动化测试断言:提升测试效率与质量的关键!

    前言 断言在自动化测试中起着关键的作用 它是验证测试结果是否符合预期的重要手段 如果在自动化测试过程中忽视了断言 那么这个测试就失去了其本质的意义 因为我们无法得知测试结果是否达到了预期的效果 因此 断言在自动化测试中的重要性不言而喻 那么
  • 2024拒绝行业内卷!八年软件测试20K*16薪行业心得 想入行必看

    目前工作做软件测试工作8年 属于高级测试员那个级别吧 现在看到各行各业的人都在转行学习软件测试 想给大家一些学习建议和忠告 很多粉丝都跟我说今年行情很差 找不到工资 真的找不到工作了吗 我们常在网上看到的 程序员饱和 程序员过剩 其实一般是
  • 程序员找工作难!拿到外包公司的 offer 我应该去么?

    引言 前一阵子有一个帖子引起了非常广泛的讨论 描述的就是一个公司的外包工作人员 加班的时候因为吃了公司给员工准备的零食 被公司的HR当场批评 这个帖子一发出来 让现在测试行业日益新增的外包公司备受关注 那么外包公司和非外包公司有什么样的不一
  • 软件测试/测试开发/全日制/测试管理丨Android WebView 技术原理

    Android WebView是一个内置的组件 允许在Android应用中嵌套显示Web内容 Android WebView的技术原理涉及到使用WebKit引擎来渲染Web内容 并提供一系列API和回调函数 使得开发人员可以控制和定制Web
  • 一文让你快速写出高效的软件测试用例

    前言 编写测试用例的目的就是确保测试过程全面高效 有据可查 但要编写出高效的测试用例 需要搞清楚什么是测试用例 以及如何编写出高效的测试用例 接下来将从以下几个部分来进行展开 1 什么是测试用例 2 如何编写测试用例 3 软件测试学习资源分
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • 外包干了3个月,技术退步明显。。。。。

    先说一下自己的情况 本科生 20年通过校招进入广州某软件公司 干了接近3年的 功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了3年的功能测试 已经让我变得不思进取 谈了2年的女朋
  • Airtest自动化测试工具

    一开始知道Airtest大概是在年初的时候 当时 看了一下官方的文档 大概是类似Sikuli的一个工具 主要用来做游戏自动化的 通过截图的方式用来解决游戏自动化测试的难题 最近 移动端测试的同事尝试用它的poco库来做自动化 看样子还不错
  • 深入解析 YAML 配置文件:从语法到最佳实践

    一 认识YAML YAML YAML Ain t Markup Language 是一种人类可读的数据序列化语言 它的设计目标是使数据在不同编程语言之间交换和共享变得简单 YAML采用了一种简洁 直观的语法 以易于阅读和编写的方式表示数据结
  • 用Python实现高效数据记录!Web自动化技术助你告别重复劳动!

    自动化关键数据记录 简介 关键数据记录是 Web 自动化测试中的关键部分 它们提供了关于系统行为和执行过程的详细信息 有助于验证用例的正确性 排查问题和确保应用程序的质量 行为日志 行为日志是一种用于记录系统或应用程序的操作和事件的技术 它

随机推荐

  • tomcat加内存限制和启动多个tomcat和设置连接数

    1 加内存限制 vim opt tomcat bin catalina sh 搜索OS 在cygwin false上加上如图那句代码 JAVA OPTS server Xms4096m Xmx4096m XX MaxPermSize 512
  • 集成学习、boosting、bagging、Adaboost、GBDT、随机森林

    集成学习算法简介 什么是集成学习 集成学习通过建立几个模型来解决单一预测问题 它的工作原理是生成多个分类器 模型 各自独立地学习和作出预测 这些预测最后结合成组合预测 因此优于任何一个单分类的做出预测 机器学习的两个核心任务 如何优化训练任
  • spring 详解三 IOC(spring实例化及后处理器)

    Spring实例化基本流程 Spring在容器初始化的时候 读取XMl配置 将其封装成BeanDefinition Bean定义 对象 描述所有bean的信息 BeanDefinition会注册存储到beanDefinitionMap集合中
  • Linux安装中文字体

    前言 Lunix默认没有中文字库 很容易导致项目开发时出现中文字符乱码的情况 1 查看linux已安装字体 fc list 如出现 bash fc list command not found 说明Linux中没有安装字体库 需要先安装字体
  • Eclipse 安装checkstyle插件

    为什么80 的码农都做不了架构师 gt gt gt CheckStyle是SourceForge下的一个项目 提供了一个帮助JAVA开发人员遵守某些编码规范的工具 它能够自动化代码规范检查过程 从而使得开发人员从这项重要 但是枯燥的任务中解
  • IOS开发 生成app图标

    1 一键生成所有尺寸对应的应用图标 链接如下 图标工场 移动应用图标 启动图生成工具 一键生成所有尺寸的应用图标 启动图 2 在Assets中 将图标放在对应的位置 3 在Build Settings中 给app命名 4 Build即可
  • 【华为OD机试c++】最大化控制资源成本【2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 公司创新实验室正在研究如何最小化资源成本 最大化资源利用率 请你设计算法帮他们解决一个任务混部问题 有taskNum项任务 每个任务有开始时间
  • SetFileCompletionNotificationModes FILE_SKIP_COMPLETION_PORT_ON_SUCCESS

    SetFileCompletionNotificationModes function Sets the notification modes for a file handle allowing you to specify how co
  • [git03] 通过pycharm使用git和github的步骤(图文详解)

    一 在Pycharm工具中配置集成Git和GitHub 1 集成Git 打开Pycharm 点击File gt Settins gt Version Control gt Git 然后在 Path to Git executable中选择本
  • Django根据数据库表反向生成models

    1 创建Django项目 创建工程 django admin py startproject movie 创建app python manage py startapp App 在settings py里面添加App INSTALLED A
  • Vue3.0入门 + Vant3.0移动端实践(三)使用Cordova打包Android App

    接着上面两节 把做成的h5小应用打包成android的app放置在手机上看看效果 如何把一个h5应用打包成android的app 使用Cordova就是一种简单不错的办法 当然也有其他的一些办法如使用HBuilderX这一强大的IDE工具
  • VS Code开发常用插件

    VS Code开发常用插件 Chinese Simplified Language 英文菜鸟必备的汉化插件 One Dark Pro个人比较喜欢的一个主题 色调看起来很舒服 Bracket Pair Colerizer加深括号的光标 高亮显
  • Linux服务字符集--locale命令

    在查看Tomcat日志中 会发现中文乱码 乱码的原因就是字符集问题 在 Linux 中 可以使用 locale 命令查看当前系统的字符集 该命令输出当前系统所使用的语言环境信息 包括地域 编码等 执行以下命令 locale 输出结果可能类似
  • 使用Spring Initializer快速创建Spring Boot项目

    默认生成的Spring Boot项目 主程序已经生成好了 resources文件夹中目录结构 static 保存所有的静态资源 templates 保存所有的模板页面 默认不支持JSP页面 可以使用模板引擎 freemarker等 appl
  • github上的文档结构学习

    开源项目目录规范 此为前端开发团队遵循和约定的开源项目目录规范 意在实现开源项目目录结构的一致性 说明 文档中使用的关键字 MUST MUST NOT REQUIRED SHALL SHALL NOT SHOULD SHOULD NOT R
  • RocketMQ发送接收项目实战+对cos或者oss服务上的pdf文件和图片加水印

    使用mq的原因 因为项目中文件上传比较多 需要使用mq分担当前系统线程压力 所以单独使用一个服务来处理文件上传 加快文件上传速度的同时也缓解了当前服务的处理压力 核心服务1 一个项目 发送mq GeneralFileEvent 需要发送给m
  • Qt+gsoap调用WebService

    版权声明 本文为原创作品 请尊重作者的劳动成果 转载必须保持文章完整性 并以超链接形式注明原始作者 tingsking18 和主站点地址 方便其他朋友提问和指正 Qt gsoap调用WebService 1 前言 Qt本身给我们提供了调用W
  • C#系列之ref与out

    目录 1 学习ref与out的原因 2 ref与out的使用 ref的使用 out的使用 3 ref和out的区别 1 学习ref与out的原因 为了解决里面改变外面也改变的问题 使用它们 在函数内部传入的内容里面一旦改变 外面也会跟着改变
  • 连接服务器失败请检查配置文件,连接服务器失败请检查网络

    连接服务器失败请检查网络 内容精选 换一换 当连接目的端服务器失败时 提示 sms 1807 sms 2802 无法连接目的虚拟机 请检查目的虚拟机IP是否可达 或者8899 8900端口是否开放 如下图所示 windows系统迁移时 目的
  • 要做接口并发性能测试,总得先学会分析吧!

    引言 这篇是我3月份在公司内部做的技术分享内容 由于我在公司内部分享的内容较多以及一些特殊性 我摘取了接口并发测试从设计思路整理 测试方案设计 设计分析 代码编写这套流程 我不会承认我把40多页PPT的内容都放在这篇博文里 不管是在内部技术