测试技术专题

测试那些事儿(四)- 并发

2020-02-08  本文已影响0人  唐T唐X
什么是并发?

并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机运行,但任一个时刻点上只有一个程序在处理机上运行。

嗯,不是很明白。。。抛去晦涩的定义,换种方式,我们先看看什么是并发用户数量。

并发用户数量:在同一时刻与服务器进行了交互的在线用户数量。

这个定义就非常好理解了,同一时刻与服务器进行了交互的在线用户数量只要大于1,其实就构成了并发行为。而本次要讨论的内容其实还可以再加一个定义,就是同一时刻与服务器进行了交互的、且对资源产生了影响的在线用户数量

并发是开发测试过程中很容易忽视的点,不处理它而产生的问题有的时候是致命的,比如在做跟钱相关的业务时。

举个栗子:

假设我们有个数据是代表金库总额的,现在它的数值现在为0元。如果要想完成存钱的操作,系统需要先取金库总额的值到内存,对这个值进行+1,最后再回存到金库总额中。如果这时A和B两个人同时往里面存钱,每个人存1元钱,有可能出现什么问题呢?假设就是这么巧,A和B在同一时间拿到了金库总额数据,都是0,然后各自进行了+1操作,再回存。。。是不是最终的结果不对了?预期是2,实际是1。

对于并发工作,你需要某种方式来防止两个任务在同一时刻访问相同的资源(其实就是共享资源竞争)。 防止这种冲突的方法就是当资源被一个任务使用时,在其上加锁。第一个访问某项资源的任务必须锁定这项资源,使其他任务在其被解锁之前,就无法访问它了,而在其被解锁之时,另一个任务就可以锁定并使用它了。具体关于锁的内容可以参考我之前的分享:java中的实例锁(Synchronized)和类锁(Static Synchronized)

其实,锁的实现方式有很多的,大家感兴趣都可以去了解。比如乐观锁、悲观锁、分布式锁等等等等,各自有各自的特点,也有各自的特点(性能、准确性等),根据大家不同的业务去进行选择就好。

我们能够发现并发问题的方式有以下这些:

  1. 代码走查:通过分析业务,我们可以发现有哪些资源是有可能存在并发问题的,也就是同时会进行多次操作的,比如交易系统中的余额。所以,在进行代码走查的时候,就要重点看下这块数据的处理逻辑,有没有加锁的功能。
  2. 并发测试:通过设置并发用户数,编写接口测试用例,实现并发测试(比如Jmeter),来发现最终的实际数值是否和预期数值相同。这种测试可以多做几次,逐步提高并发用户数,就可以发现问题。在提高并发用户数的情况下,还可以对服务的性能达到检验的目的,得到在合理的超时时间的设定下我们可以承受住多大的并发量。
测试人需关注

对于测试来说,资源在并发条件下产生变更是不是准确的、性能是不是符合要求的,都是我们需要关注的,通过并发测试和合理的超时时间设定,能够帮助我们发现并发问题,保证系统稳定且准确。

上一篇下一篇

猜你喜欢

热点阅读