之前所有关于准确性测试部分的分享讲的都是 去查询,好似去数据库执行Select语句;这次想说的是 去增加、去修改某些记录,好似去执行Update和Insert语句;
情景一 新增表记录、删除表记录
下图是 在前端页面对于充值明细进行补充(实为新增表记录);
【增加一条表记录,某天的充值明细会增加这条记录,当天的充值明细list 前后可做对比;此外汇总页 当天这条记录的部分字段值也会改变】
【接口 实现】
代码思路:先查询汇总页当天记录的某字段,在查询当天的充值list;增加充值记录;第二次查询当天的充值list,对比多的元素是否和增加的一致;第二次查询汇总页当天记录的某字段,对比前后字段值的改变;
def Comparison(self, vendor_id, vendor_name, recharge_time):
# 增加
be_report = self.report(vendor_id, vendor_name, recharge_time)
be_list = self.detail(vendor_id, recharge_time)
up = self.upload(vendor_id, vendor_name, recharge_time)
af_list = self.detail(vendor_id, recharge_time)
diff_list = [i for i in af_list if i not in be_list]
assert up[0] == diff_list[0]['某字段']
assert up[1] == diff_list[0]['某字段']
print('增加记录成功')
af_report = self.report(vendor_id, vendor_name, recharge_time)
assert af_report == be_report + up[1]
print('汇总页 字段值-add-更改成功')
# 删除
d = self.Delete(vendor_id, recharge_time)
after_report = self.report(vendor_id, vendor_name, recharge_time)
after_list = self.detail(vendor_id, recharge_time)
assert after_report == af_report - d['某字段']
print('汇总页 字段值-delete-更改成功')
different_list = [d for d in af_list if d not in after_list]
assert different_list[0] == d
print('删除记录成功')
通过接口去实现这些操作,实际会有后台在重新梳理当天的记录,如果是直接在表里insert记录,没办法去触发,有个修复数据的接口可以实现重新计算,故而下面代码 有2处调到数据修复的接口;
【连接数据库 实现】
代码思路:未插入新纪录前,调取接口查某字段值;数据库筛选出符合条件的记录,计算某字段值;插入新纪录,数据库表里重新筛选计算某字段值;接口修复数据后,看接口返回某字段 新值;断言 前后字段值的改变 ;【删除操作 类似】
def Comparison2(self, vendor_id, vendor_name, recharge_time):
old_CIP = self.report(vendor_id, vendor_name, recharge_time)
print(old_CIP, '未插入新纪录前 接口返回的 某字段值')
db = self.db_value(vendor_id, vendor_name, recharge_time)
print(db[0], '未插入新纪录前 数据库计算出来的 某字段值')
insert = self.db_insert(vendor_id, vendor_name, recharge_time)
assert db[0] + insert[1] == insert[0]
print(insert[0], db[0], insert[1], '数据库计算-新、旧、此次充值')
# 数据修复
self.s.get(self.fix_url(self.url_fix, 1, vendor_id, recharge_time, recharge_time))
new_CIP = self.report(vendor_id, vendor_name, recharge_time)
assert new_CIP == old_CIP + insert[1]
print('接口返回值-新、老、此次充值', new_CIP, old_CIP, insert[1])
delete = self.db_delete()
print('数据库计算-新、老、此次删除的', delete[0], insert[0], delete[1])
assert db[1] + 1 == insert[2]
assert insert[2] - 1 == delete[2]
# 数据修复
self.s.get(self.fix_url(self.url_fix, 1, vendor_id, recharge_time, recharge_time))
new_P = self.report(vendor_id, vendor_name, recharge_time)
assert new_P == new_CIP - delete[1]
print('接口返回-新、老、此次删除的', new_P, new_CIP, delete[1])
结果图也显示接口返回值和数据库计算值相符;
不过 我在Delete删除某记录,是物理删除,完全查不到此条记录;后台同事在这一部分是逻辑删除,记录变成“被删除状态”;
情景二 修改表记录
1.前端页面上传某些Excel,系统会在解析后往表里增加某些记录;
2.对某些记录进行编辑、确定、作废之类的操作,会更改状态或某些字段值,故而对汇总页面的部分字段值做了新改变;
三个操作这儿拿 确定Confirm 来做例子:
def Uploading_Supplier_Orders(self, vendor_id, vendor_name, xlsx):
Log.info('*********************************')
# 上传前
ex = self.Excel_read(xlsx)
summary_1 = self.summary_report(vendor_id)
# 上传
self.upload(vendor_id, xlsx)
# TODO 只有对磁盘上的数据进行更新时,才会调用 commit()
# self.db.commit()
batch_report_1 = self.batch_report(vendor_id, ex[0], vendor_name)
assert batch_report_1[1] == int(ex[1])
assert batch_report_1[1] == batch_report_1[2] + batch_report_1[3]
summary_2 = self.summary_report(vendor_id)
if batch_report_1[0] is None:
assert summary_2[0] == summary_1[0]
else:
assert summary_2[0] == summary_1[0] + batch_report_1[0]
assert summary_2[1] == summary_1[1] + batch_report_1[1]
assert summary_2[2] == summary_1[2] + batch_report_1[2]
assert summary_2[3] == summary_1[3] + batch_report_1[3]
Invalid = self.Status(vendor_id, vendor_name, ex[0], 3)
Confirmed = self.Status(vendor_id, vendor_name, ex[0], 2)
assert Invalid[0] == 0
assert Invalid[1] == 0
assert len(Invalid[2]) == 0
assert Confirmed[0] == 0
assert Confirmed[1] == 0
assert len(Confirmed[2]) == 0
Unconfirmed = self.Status(vendor_id, vendor_name, ex[0], 1)
assert Unconfirmed[0] == int(ex[1])
assert len(Unconfirmed[2]) == len(ex[2])
return ex, batch_report_1, summary_1
def calibration_Confirm(self, vendor_id, vendor_name, ex, batch_report_1, summary_1):
"""确定操作"""
self.confirm(ex[0])
time.sleep(1)
qd_Invalid = self.Status(vendor_id, vendor_name, ex[0], 3)
assert qd_Invalid[0] == 0
assert qd_Invalid[1] == 0
assert len(qd_Invalid[2]) == 0
qd_Confirmed = self.Status(vendor_id, vendor_name, ex[0], 2)
assert qd_Confirmed[0] == ex[3]
assert len(qd_Confirmed[2]) == 1
qd_Unconfirmed = self.Status(vendor_id, vendor_name, ex[0], 1)
assert qd_Unconfirmed[0] == ex[1] - ex[3]
assert len(qd_Unconfirmed[2]) == len(ex[2]) - 1
batch_report_2 = self.batch_report(vendor_id, ex[0], vendor_name)
assert batch_report_2[2] == qd_Confirmed[0]
assert batch_report_2[3] == qd_Unconfirmed[0]
assert batch_report_2[1] == batch_report_2[2] + batch_report_2[3]
assert batch_report_2[1] == batch_report_1[1]
assert (batch_report_2[0] if batch_report_2[0] is not None else 0) == qd_Unconfirmed[1] + qd_Confirmed[1]
assert batch_report_2[1] == qd_Confirmed[0] + qd_Unconfirmed[0]
summary_3 = self.summary_report(vendor_id)
assert summary_3[1] == summary_1[1] + batch_report_2[1]
assert summary_3[0] == summary_1[0] + (batch_report_2[0] if batch_report_2[0] is not None else 0)
assert summary_3[2] == summary_1[2] + batch_report_2[2]
assert summary_3[3] == summary_1[3] + batch_report_2[3]
Log.critical('-------当前操作、校验通过-------')
self.Clear_History(vendor_id, ex[0])
实在没办法,考虑到公司的隐私安全,我把原本的日志删除了,就连我自己 乍一看都看不懂;
说下基本的思路:
1.Uploading_Supplier_Orders() 上传前 请求拿到汇总页的各字段值 summary_1 ;上传Excel文件;上传后,详情页多了一条记录 batch_report_1 【其状态list 有3个: Invalid、Confirmed、Unconfirmed 】,再次请求汇总页的接口summary_2 ,断言 汇总页字段值的改变;断言此记录字段值的改变;
2.calibration_Confirm() 对某条order执行确定操作,其状态值改变【状态list 的长度、元素有改变,故变为qd_Confirmed 、qd_Unconfirmed 、qd_Invalid 】,此记录变为 batch_report_2 ,断言此记录字段值的改变;汇总页的数据变成summary_3 ,断言 汇总页字段值的改变;
这2个例子 其实都是模拟实际我在测试时候的操作,顺便把校验的部分也自动完成了,即对表记录的新增、修改后,再自动把其他相关字段值校验一遍;
交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie