接口测试 【pytest 接口自动化】token 问题

Kirakuin · 2024年07月08日 · 最后由 Kirakuin 回复于 2024年07月09日 · 3437 次阅读
  1. 用例:1、2、3 都是登录接口的 4 是新增人员接口的
  2. token 时效:后台设置的是 720 天
  3. token 设置了全局,每次登录成功(1)都会把之前的 token 在 yaml 文件中替换掉

问题:每次跑用例时,请求 4 的时候返回都是提示 ‘token 已过期,请重新登陆!’

看了这些用例最终请求的参数 token 都是一致的,所以很疑惑问题到底在哪里,刚刚接触,请大佬们指点迷津。

谢谢各位提供的思路,已经解决了,是 conftest.py 文件中获取并 token 的时候登录过一次,用例 1 又登录了一遍导致 token 失效了

最佳回复

分两种情况去看:

  1. 使用 fixture 去初始化登录,设置好 scope,不要重复登录了
  2. 如果是用 pytest xdist 取并发执行,每个线程都可能会单独登录初始化一个新的 token。 这时候可以考虑用 锁的方式去保证只需要登录一次。
共收到 6 条回复 时间 点赞

试试每次执行用例时,只跑 1 和 4,2 和 3 先别跑

1.token 用户权限不够
2.用户与运行环境根本就不是同一套
3.720 天的时效!应该就不会出现过期问题,但既然报错了,你可以拿登录响应的 token 手动调用接口 4 试试,也拿运行前存储的 token 试一试,确定下非 yaml 文件替换顺序问题

应该是你跑接口 4 时拿到的 token 不是最新的,而是上一次的,那为啥是上一次的呢,检查下你取 token 的逻辑,和 123 用例存储 token 的逻辑是不是又漏洞。猜测是这样。😂

会不会是这四个接口都是单独实例化的,每个用例的 headers 不互通。建议创建一个 BaseApi 类,定义类属性 headers 和实例方法 set_headers 来修改每个不同接口的 header 值,所有接口都继承这个类,1 接口登录之后调用 set_headers 修改类属性 headers 的 token 键,4 接口实例化时就可以直接用这个 headers

分两种情况去看:

  1. 使用 fixture 去初始化登录,设置好 scope,不要重复登录了
  2. 如果是用 pytest xdist 取并发执行,每个线程都可能会单独登录初始化一个新的 token。 这时候可以考虑用 锁的方式去保证只需要登录一次。
Jerry li 回复

是的早上看了各位佬发的各种角度来排查问题,然后想了想可能是我在前置的时候已经登录获取过了一次,然后用例 1 又获取了一次导致失效了!

Kirakuin 关闭了讨论 07月10日 09:46
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册