Python pytest + allure 接口自动化测试场景,遇到 “数据新增后立刻查询,经常查不到” 的问题。

Sunsome · May 21, 2025 · Last by YLM replied at May 21, 2025 · 1343 hits

【问题描述】

pytest + allure 接口自动化测试场景,遇到 “数据新增后立刻查询,经常查不到” 的问题。

  • 用例步骤:
  1. 调用 “新增” 接口,插入一条数据(如结构体、空间、用户等,字段为随机生成的名称,确保唯一)。
  2. 随后调用 “查询” 接口,带新增时的唯一字段查询这条数据。
  3. 发现有概率查不到(data 返回空列表),但后端日志/数据库其实数据已插入成功。
    • 为了保险,查询步骤用了重试机制(sleep 1 秒,最多 30 次),但偶尔还是查不到。失败 case 复现概率较低,大部分时候没问题。
    • 同样的流程在 Postman 跑集合从没遇到这种情况。

@allure.feature("")
def test_add_and_query():
name = gen_name()
# Step1: 新增
add_api({"name": name})

# Step2: 查询(带重试)
for retry in range(30):
res = query_api({"name": name})
data_list = res.json().get("data", [])
if isinstance(data_list, list) and data_list:
break # 查到了
print(f"第{retry+1}次未查到,1 秒后重试")
time.sleep(1)
else:
assert False, f"新增后查不到,重试 30 次依然无数据,name={name}"


---

### 【补充背景】

* 查询接口权限没问题,单独调用都能查出来;
* 数据库/后端日志确认**新增已成功**;
* 问题只在自动化批量跑用例时偶发,手动测接口没有问题;
* 用了较高的重试次数和等待时间,依然可能失败;
* 用例完全串行无并发,不涉及多线程;
* Postman 跑同样集合不会遇到这种问题。

---

### 【想请教大家】

* 这种情况可能是什么原因?是写法问题、环境延迟,还是接口本身设计问题?
* 有没有更稳妥的自动化写法?如何优化“新增后立刻查”的自动化测试场景?

---

### 【额外说明】

* 接口/用例均已排查 token、缓存、权限等常规问题;


大佬们怎么解决这个问题
共收到 7 条回复 时间 点赞

分布式数据库,不同节点数据有延迟不一致?

新增之后轮询去查 db,db 里有了再直接调接口断言。db 里没有就说明还没创建成功。

新建一个数据库连接进行查询

Sunsome #4 · May 21, 2025 Author
YLM 回复

项目接口太多了,表还不是很熟悉,轮询去查 db 会增加工作量

Sunsome #5 · May 21, 2025 Author
dubda 回复

好像不是分布式的

是不是写的 es 马上去查,这种会有 1 秒左右的延迟。或者是 mysql 读写分离的,binlog 会有延迟。不然就是 python 的数据库框架开了缓存啥的

Sunsome 回复

轮询查数据库比轮询调查询接口更快
查数据库是为了找出究竟是写入的慢 ;还是数据已经写入数据库了,接口获取还是获取不到
查 db 不是增加的工作量,是接口自动化的必须验证的。

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up