昨天有小伙伴反馈说 他发现了一个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。
不要以为测试很简单哦。我们首先要制定测试方案。