软件测试常见并发问题有哪些?

1、前言

经常有人问,性能测试是不是就是并发测试?答案是否,性能测试和并发测试是两个概念,且并发测试不等同于性能测试。

今天我们就来详细讲讲什么是并发测试,以及解析实际的项目中常见的并发问题。

2、并发测试的定义

并发测试的定义中,最主要的有两点:

点层面

同一时间做某件事。例如:周一早上7:30,小学生要统一到操场升国旗。

线层面

一个时间段做不同的事。例如:中午11:30-13:00,小学生有的跳皮筋,有的踢足球,但同时对服务器产生压力。

 

并发测试不等于性能测试

这个问题,我面试的时候,问过多个求职者,大部分求职者的第一反应都是说并发测试就是性能测试。

性能测试中把并发又分为负载和压力测试。虽然并发测试与性能测试有交集,但是,并发测试并不仅仅应用于性能测试,并发测试更多被运用于其他领域。

 

3、并发测试的分类

并发测试不仅仅是性能测试,它存在各个测试阶段,并且测试目的各不相同。

功能并发测试

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

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

性能并发测试

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

性能并发测试的目的为验证系统性能指标是否符合需求规格说明书的要求

稳定性的并发测试

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

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

异常性并发测试

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

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

4、常见并发问题

当下流行一种时尚的软件设计理念,叫"微服务"。把复杂功能组合拆分成若干个独立的服务进行开发,然后有选择性的组合执行各服务。

微服务开发框架有利于并发测试设计,每个服务都是测试的切入口,可以单独执行。换句话说,测试切入口越多,越有利于测试场景的设计,有效执行并发用例。

并发切入口从以下三个方面查找统计:

  • 客户端操作

使用工具捕获提交到服务器的请求,分析链接、参数进行测试。

  • 系统接口

    查阅相关的接口文档,开发并模拟其他系统功能进行测试。

  • 定时任务

定时任务是开发框架,可能需要二次开发,以接口形式进行测试。

并发测出的问题,是一种综合症,往往有多种错误交织在一起的,所以不能乱用"药"。解决这类问题,通常分以下5个步骤(比把大象放冰箱多了2步):

①通过并发测试找到故障点;

②以故障点的现象分析问题原因;

③确定产生原因后讨论解决方案;

④根据解决方案实施修复;

⑤同并发测试验证修复情况。

5、事务并发的问题

由于事务处理而导致的并发问题,我们需要先了解什么是事务。

事务的定义

是数据库操作的最小单元,是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么执行,要么不执行,事务是一组不可再分割的操作集合(工作逻辑单元)。

系统内部事务控制

事务的控制好坏往往取决于码农们的开发技术、业务理解能力、专注程度,由于这类错误而导致的bug是非常低级别且严重的(必须出示黄牌 进行警告)!

我们举例来说明:使用APP订电影票。首先打开某团,找到某电影,选择位置,并点击"确定选择",然后进入到支付页面,提交订单,选择支付宝去支付,支付成功收到短信。

在前半段,用手机打开某团,找到想看的电影,选择座位,提交订单到支付页面,"选座"与"提交订单"都是某团内部接口。如果将这两个作为一个事务,有以下四个特性:

  • 原子性:要么都整,要么都不整。

  • 一致性:锁定座位提交订单后必须生成订单号,取消订单则解锁座位。

  • 隔离性:座位被别人选中,没有网络,操作日志记录失败等。

  • 持续性:事务提交后永久存在,不会受到任何故障影响。

而作为测试人员,需要考虑的测试点有:

  • 一个座位被多个账号锁定,生成了订单;

  • 座位锁定成功,但没有生成订单;

  • 取消订单,座位未解锁;

  • 生成重复订单号;

  • 操作日志没有完整记录所有行为。

我们再来分析订电影票场景的下半部分:在支付页面,使用了支付宝进行支付,支付成功后收到平台短信。

"支付成功"是外部接口,对于外部接口的事务控制,需要考虑两个系统的设计。对支付接口进行并发接口测试,要考虑的事务问题:

  • 同一笔订单,不能同时选择多种方式,不能进行多次支付;

  • 重复通知上传支付结果(支付成功,支付超时),只能处理一次订单;

  • 日志记录完整记录发送、接受的支付信息,与测试用例内容相匹配。

6、极限值并发的问题

由极限值而导致的并发问题,那么什么又是极限值呢?

极限值:标准要求的数值范围的界限,“极限值"也被称为"极限数值”、“临界值”、“界限数值”。

我们举例来说明,某个party上要搞一个抽奖环节,具体安排为:当天23:00 ~ 23:59还在场的朋友,每人一个礼物;每个人另外有3次抽奖机会;发朋友圈的,还能再获得1次抽奖机会;已经抽到一等奖的,不能再获得二等奖和三等奖;中奖概率按照预估概率进行计算;如果已中奖数量达到上限,必须停止抽奖。

根据这些设计的并发测试场景:

①当天时间23:00 ~ 23:59,给在场每个人一份礼物;

②在场每个人有3次抽奖机会;

③高调发朋友圈,可以再来一次抽奖机会;

④已获得一等奖的,不能再获得二等奖和三等奖;

⑤中奖概率按预估概率进行设定;

⑥已中奖数量达到奖品数量上限,该奖项停止。

在这个场景中,先分析测试对象分别有:活动时间、抽奖次数、中奖概率、奖品数量上限、中奖规则。

那么设计的并发测试用例覆盖点为:

①测试活动:不在活动时间范围内,也能参与抽奖;

②抽奖次数:未分享朋友圈炫耀的,抽奖次数超过3次;

③抽奖次数:朋友圈高调炫耀的,抽奖次数超过1次;

④中奖概率:设置中奖概率有效的小数位数;

⑤简化数量上限:奖项数量上限控制;

⑥中奖规则:已中一等奖,是否还能中二等奖、三等奖。

7、压力并发的问题

由压力负载而导致的并发问题,可以归类于性能问题,今天我要说一些数据库事务的隔离级别。

隔离级别有4个,由低到高依次如下:

Read uncommitted

未授权读取、读未提交,即事务B读取到了事务A未提交的数据。

如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过"排他写锁"实现。

该隔离级别避免了更新丢失,却可能出现脏读。

Read comitted

授权读取,读提交,即事务A先读取了数据,事务B紧接着更新了数据,并提及了事务,而事务A再次读取该数据时,数据已经发生了改变。

读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。该隔离级别避免了脏读,但是却可能出现不可重复读。

Repeatable read

可重复读取,读取数据的事务将会禁止写事务,写事务则禁止任何其他事务。

该隔离级别避免了不可重复读取和脏读,但是有时可能出现幻读。这可以通过"共享读锁"和"排他写锁"实现。

Serializable

序列化,提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个执行,但不能并发执行。

如果仅仅通过"行级锁"是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚刚执行查询操作的事务访问到。

序列表是最高的事务隔离级别,同时代价也花费最高,性能最低,一般很少使用。在该级别下,事务都会乖乖的顺序执行,不仅避免脏读、不可重复读,还避免了幻读。

那么,什么是脏读、不可重复读、幻读呢?

8、脏读

一个事物读取到了另一个事务未提交的数据操作结果。

更新丢失

更新丢失包含以下两种情况:

  • 回滚丢失,当2个事务更新相同的数据源时,如果第一个事务被提交,而另外一个事务却被撤销,那么会连同第一个事务所做的更新也被撤销,即第一个事务做的更新丢失了。
  • 覆盖丢失,当2个或多个事务查询同样的记录然后各自会以最初的查询结果更新该行时,会造成覆盖丢失,因为每个事务都不知道其他事务的存在,最后一个事务对记录做的修改将会覆盖其他事务对该记录做的已提交的更新。

 

不可重复读

Non-repeatable Reads,一个事务对同一行数据重复读取2次,但是却得到不同的结果,包括以下情况。

  • 虚读:事务R1读取某一数据后,事务R2对其做了修改,当事务R1再次读取该数据时得到不同的值。
  • 幻读:事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据或者取消了第一次查询中出现的数据(不要求两次查询的sql语句相同)。这是由在两次查询过程中由另外一个事务插入数据造成的。

通常的数据库设置默认隔离级别为Read committed(授权读取、读提交)。

9、异常数据干扰并发的问题

对于这类情况的异常数据测试也可以称之为系统健壮性测试。

测试重点是,要根据业务逻辑或系统相关的配置情况构建能够造成异常的测试数据,要求这些数据不能被当做正常数据处理,也不能影响其他正常数据。

例如:测试人员构建测试场景为不断触发定时批处理任务,如果码农在代码中忽视对异常数据逻辑处理,就会造成数据库连接池饱满、内存溢出、遇到异常数据直接报错中断(待执行任务队列越来越多)等问题。

此类并发测试关注点不是同步并发,而是逐步加压的并发数量。

这个难点相对于前几个问题,提升了一个level,因为这要求对测试人员了解系统架构配置及数据流逻辑,所以,这就需要测试的大佬们多多努力。争取全都是全栈~

 感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/216339.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot集成i18n(多语言)

配置文件 spring: messages: basename: il8n/messages # 配置国际化资源文件路径 fallback-to-system-locale: true # 是否使用系统默认的语言环境作为备选项 国际化配置 import org.springframework.context.annotation.Bean; import org.spr…

赛事回顾 | 首届“智航杯“全国无人机智能算法竞赛落幕

11月28日,首届“智航杯”全国无人机智能算法竞赛实物赛在海南省三亚市成功落下帷幕。此次竞赛自2023年4月启动以来,共有来自全国145所高等院校和50多所企事业单位的1253支团队、3655人报名参赛,最终有6支队伍脱颖而出,入围了实物赛…

赴日程序员高年薪过上“躺平”生活?

日本的IT行业想要达到的高薪,也是需要很多资历和经验的,不过即使你是新卒,也能拿到相比国内来说让你满意的薪资。 刚入职的起薪是20-23万日元/月,情报信息业出身,技术掌握不错,起薪是25万-30万日元。之后经…

强化学习——简单解释

一、说明 最近 OpenAI 上关于 Q-star 的热议激起了我温习强化学习知识的兴趣。这是为强化学习 (RL) 新手提供的复习内容。 二、强化学习的定义 强化学习是人类和其他动物用来学习的学习类型。即,通过阅读房间来学习。(从反馈中学习)。让我解…

根据YOLOv5、v8、v7训练后生成的result文件用matplotlib进行绘图

1. 效果图 2. 认识result内容 2.1 YOLOv7的result.txt 参考链接:YOLOv7结果分析,txt文件内容 0/299 14.7G 0.07522 0.009375 0.02266 0.1073 58 640 0.0002958 0…

数据结构与算法(四)分治算法(Java)

目录 一、简介1.1 背景1.2 定义1.3 步骤1.4 时间复杂度 二、经典示例2.1 二分搜索2.2 快速排序2.3 归并排序(逆序数)2.4 最大子序列和 一、简介 1.1 背景 在学习分治算法之前,我们先来举一个例子。 假如你有一个存钱罐,过年家人…

【C++】开源:Boost进程间通信库InterProcess配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Boost进程间通信库InterProcess配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一…

Java实现简单的王者荣耀游戏

一、创建新项目 首先创建一个新的项目,并命名为wangzherongyao。 其次在飞翔的鸟项目下创建一个名为img的文件夹用来存放游戏相关图片。详细如下图: 二、游戏代码 1、创建怪物类 1.bear: package beast;import wangzherogyao.GameFrame;…

听说这样寄快递会很省钱!速来收藏!便宜寄快递!

哈喽,小伙伴们,今天介绍一个寄快递省钱的小妙招。话不多说,小编直接开整! 在闪侠惠递这个快递折扣平台下单送快递,不仅方便,而且运费更便宜。平台整合了京东、顺丰、圆通、申通、极兔、等快递公司可供选择…

Oracle 中换行chr(10)、回车chr(13)

一、前言 chr(n):返回 ascii 值对应的字符。 ascii(char):返回字符 char对应的ascii 值。 chr(n) 和 ascii(char) 作用刚好是相反的。 SQL> select chr(65) from dual; 控制台显示:ASQL> select ascii(A) from dual; 控制台显示&am…

最受好评的 Android 数据恢复软件工具

在本文中,您将找到适用于 Windows 的最佳 Android 数据恢复软件,以从 Android 恢复丢失或删除的文件。 Android 设备被广泛使用。但数据丢失在 Android 手机中也很常见。生活中,我们经常清理内存较小的安卓手机中的无效垃圾短信,…

Temu拼多多跨境电商,产品合规要求,需要的检测报告证书你了解多少?

Temu拼多多跨境电商,产品合规要求,需要的检测报告证书你了解多少?Temu 拼多多跨境电商 自拼多多Temu登录美国超级碗后,Temu已经超过亚马逊和沃尔玛,成为美国下载量最高的购物应用,Temu已然成为近期美国人民…

Netty网络编程

入门案例 1、服务器端代码 public class HelloServer {public static void main(String[] args) {// 1、启动器,负责装配netty组件,启动服务器new ServerBootstrap()// 2、创建 NioEventLoopGroup,可以简单理解为 线程池 Selector.group(n…

5. Jetson Orin Nano CUDA 配置

5. Jetson Orin Nano CUDA 配置 1:安装Jtop jtop安装主要有以下三个步骤: 安装pip3 我们需要使用pip3来安装jtop,所以先安装pip3 sudo apt install python3-pip安装jtop sudo -H pip3 install -U jetson-stats运行jtop服务 sudo -H pip3 in…

Temu数据面板:Temu商家必备的数据分析工具

在Temu这个电商平台上,越来越多的商家意识到数据分析的重要性。数据分析可以帮助商家更好地了解店铺的运营情况,从而制定更有效的运营策略,提高销售业绩。而在这个过程中,Temu数据面板成为了一个不可或缺的工具。 先给大家推荐一款…

软件测试具体人员分工

最近看了点敏捷测试的东西,看得比较模糊。一方面是因为没有见真实的环境与流程,也许它跟本就没有固定的模式与流程,它就像告诉人们要“勇敢”“努力”。有的人在勇敢的面对生活,有些人在勇敢的挑战自我,有些人在勇敢的…

springboot实现邮箱发送功能

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 邮箱效果图一、pom配置二、页面编写三、配置yml四、邮件工具类五、测试发送 邮箱效果图 1.可以利用在出现问题进行邮箱提醒 2.编写html 用于在邮箱中展示的样式 提示…

使用Java语言判断一个数据类型是奇数还是偶数

判断一个数字类型是奇数,还是偶数,只需要引入Scanner类,然后按照数据类型的定义方式进行定义,比较是按照与2进行整除后的结果;如果余数为零,则代表为偶数,否则为奇数。 import java.util.Scann…

大数据 - MapReduce:从原理到实战的全面指南

本文深入探讨了MapReduce的各个方面,从基础概念和工作原理到编程模型和实际应用场景,最后专注于性能优化的最佳实践。 一、引言 1.1 数据的价值与挑战 在信息爆炸的时代,数据被视为新的石油。每天都有数以百万计的数据被生成、存储和处理&…