数据准确性测试之【四】表记录新增、修改、删除,对其他字段值的影响

之前所有关于准确性测试部分的分享讲的都是 去查询,好似去数据库执行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

发布了78 篇原创文章 · 获赞 24 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zyooooxie/article/details/101599565