接口测试平台代码实现138: 关于大用例登陆态干扰bug

2022-05-19 10:08:03 浏览数 (1)

昨天有小伙伴反馈说 他发现了一个bug, 就是当俩个项目 不同大用例 运行时,登陆态干扰问题。 按照他的描述,应该是如下场景触发的:

项目A - 有登陆态接口A (此登陆态接口返回一个字段A)- 大用例接口A (此接口需要加登陆态返回的字段A)

执行后,发现可以加入字段A

然后去继续执行:

项目B - 有登陆态接口B (此登陆态接口返回一个字段B) -大用例接口B (此接口需要加登陆态返回的字段B)

结果他说问题出现了,就是 接口B加入的字段是 项目A的 登陆态接口返回的字段A。

他怀疑是run_cases.py中的这段代码引发的:

这段代码的意思是 当发现接口需要使用登陆态变量的时候,先去检查是否已经存在 登陆态变量(login_res) ,如果已存在 则直接用,否则就重新调用登陆态接口去获取。

这里的login_res 正常来说只有当之前接口触发过登陆态,才会生成这个登陆态字典变量。

这个bug的关键就在于,项目A先执行,生成了login_res, 然后项目B再执行,发现已经存在了login_res后就不再继续请求了。

我们现在先来用实际的demo来测试一下,看看能否复现吧~

一:先创建项目A/B

然后分别新建登陆态接口 A/B 。

注意,为了更好的做测试,我决定不再到处找别的接口了,就我们自己的平台我们新建四个接口用来测试,并且新建一个专门存放测试接口的views_test.py

然后去urls.py中导入:

然后增加四个测试用接口,俩个登陆态,俩个普通接口:

代码语言:javascript复制
    # ------------ 测试用接口
    url(r'^test_login_A/$', test_login_A),  # 保存一个全局变量组
    url(r'^test_login_B/$', test_login_B),  # 保存一个全局变量组
    url(r'^test_api_A/$', test_api_A),  # 保存一个全局变量组
    url(r'^test_api_B/$', test_api_B),  # 保存一个全局变量组

然后去views_test.py中新建这四个函数:

到此 我们之后调试的时候,举例子比如只要访问的是 http://127.0.0.1:8000/test_api_A/。那么就会返回 函数test_api_A的内部res字典了。想怎么测怎么测。

所以现在我要给这四个接口添加内容:

两个登陆态接口,就userid吧:

俩个普通接口就 更简单了:

临时这样设置,后续需要我们随时改即可。

然后我们去设置项目A和B的登陆态和普通接口吧~

先来项目A的:

然后设置好提取后,保存。然后再Send

然后是项目A的普通接口:

从图中可看到,加了登陆态后仍然可以请求成功。

然后是项目B:

别忘了切换回none后保存。

调试成功后别忘了保存。

好!接下来,我们给俩个项目都增加 大用例,虽然大用例只有一个普通接口组成。

这里我们顺手删除之前写的 没用的 :新增登陆态接口按钮。

项目A用例:

项目B用例:

好了。现在我们都设置好了。也都添加了登陆态。

篇幅有限,本章到此为止,下一节我们开始正式来测试这个bug。

不要以为测试很简单哦。我们首先要制定测试方案。

0 人点赞