136–切割可能遇到的情况
137–新建项目登录态接口的bug
打开新项目的登录态接口的弹层时,各个字段输入框显示undefined
因为项目一开始设置的是没有登录态时返回空字典
修改:
新建项目的登录态接口无法保存,因为一开始设置的保存函数中用的update方法,即默认原来有登录态接口数据
修改:(其中查询字段可以是多个)
数据表.object.update_or_create( 更新用的字典,查询的字段 )
登录态接口请求报错:
因为默认的返回值格式是json,实际上返回值不为json时会“Expecting value”
修改:
补充默认字段:
138–大用例登录态干扰bug–复现设置
139–用例bug复现
重启服务:
解决思路:
1.隔离,用大用例id标记变量,防止其他大用例使用
2.变换当前存放变量和判断思路,从缓存中改到数据库存储
先一后二
140
制定:不允许 同一个大用例 的重叠运行。也就是说,必须等前一次执行完 ,才可以执行下一次
要在项目A结尾的时候,清理掉自己的登陆态。 然后再执行项目A的时候 又会重新生成新的了
141–解决
解决方案:
-
设置一个登陆态存放的列表,删掉自己用例id的登陆态就可以
-
设置一个字段,放在数据库的用例表中,执行开始时候修改为1,执行结束或报错收尾都修改为0,重叠执行的时候先判断 是否为0,如果不为0 则返回说该用例正在运行中,请稍后再启动!
-
不再用一个字典作为登陆态login_res的内容,而是改造成一个列表,所有的大用例的登陆态都在里面存放,靠着用例id区分,互相不再影响。删除自己的也好删除。使用的时候 就直接去这个列表中搜索,搜不到就创建新的。
# 登陆态代码:
api_login = step.api_login # 获取登陆开关
if api_login == 'yes': # 需要判断
Case_id = DB_step.objects.filter(id=step.id)[0].Case_id # 先求出当前执行step所属的case_id
global login_res_list # 新建一个登陆态列表
try:
eval('login_res_list')
except:
login_res_list = [] # 判断是否存在,若不存在,则创建空的,一般只有平台重启后才会触发一次
# 去login_res_list中查找是否已经存在
for i in login_res_list:
if i['Case_id'] == Case_id: # 说明找到了.直接用。
print("找到了")
login_res = i
break
else: # 说明没找到,要创建
print("没有")
from Myapp.views import project_login_send_for_other
login_res = project_login_send_for_other(project_id)
login_res['Case_id'] = Case_id # 给它加入 大用例id 标记
login_res_list.append(login_res)
# 运行到这的时候,可以肯定已经有了这个login res了
print(login_res)
## url插入
if '?' not in url:
url += '?'
if type(login_res) == dict:
for i in login_res.keys():
url += i + '=' + login_res[i] + '&'
else: # 证明已经有参数了
if type(login_res) == dict:
for i in login_res.keys():
url += '&' + i + '=' + login_res[i]
## header插入
if type(login_res) == dict:
header.update(login_res)
else:
login_res = {}
## 输出请求数据
print('\n')
print('【url】:', url)
print('【header】:', json.dumps(header))
print('【method】:', api_method)
print('【body_method】:', api_body_method)
print('【body】:', api_body)
分页
安装分页相关的库,并在views文件中导入