接口测试|线程安全测试

线程安全测试

一、线程安全原理

 什么是线程安全?通俗的讲,就是保证多个线程同时对某一对象进行操作时不会出错。比如两个客户端,同时对某个课程进行报名操作并记录总数,如果不加以并发控制,那么就会出现对当前报名总数脏读的情况。

案例分析

企业微信部门创建

 总结:线程安全问题出现的三个必要条件:

1、多线程环境下

2、多个线程共享一个资源

3、对资源进行非原子操作

二、分布式线程安全问题原理

 当服务器分布式集群形式时,会产生一个问题,当多个订课请求打到不同的服务器上,而多个服务器对已定课程总数的读取课程中产生脏读的问题,就叫分布式锁问题

案例分析

 总结:当多个线程同时对某一对象进行读写操作时,比如读减库存,排重写入逻辑主要注意线程安全和分布式锁问题,需要对读写操作进行一个分布式的并发场景测试

三、数据库锁原理

1、表锁定:更新/删除操作会添加排他锁。此类操作的where条件如果未添加索引会升级为表级别锁定,导致其他逻辑对该表的操作失败。

2、事务中死锁:两个事务都持有对方需要的锁,并且在等待对方释放,并且双方都不会释放自己的锁。

 案例分析

当我们在进行混合场景测试时,发现当分发任务执行时,会有大量的线索操作大量超时报错,最后排查是因为更新分发结果逻辑包含未加索引的检索条件升级为表锁,导致新线索的插入操作超时报错

总结:当多个逻辑同时处理某个表的数据时,需要考虑这些逻辑并行处理的场景

知道、想到、做到、得到
原文地址:https://www.cnblogs.com/Durant0420/p/15002645.html