python接口测试用例框架(3)- Entity

    entity,实体,前面已经介绍过实体类了,这个模块的作用是数据层的获取,简而言之,从数据库获取数据组装进入前面介绍的数据库的实体类。

    这个我给一个查询是一条记录的实例,如果是list,依样循环处理就行了,比较简单。

    首先导入moudle模块

    

import moudle

class Entity:
    def get_info_by_keyID(self, keyID):
        #底层查询实现,sql_exec是我自己封装的使用pymysql的fetchall()
        data = Component.Common.sql_exec(
            sqls="SELECT * FROM {0} where keyID='%s'".format("表名")
                 % keyID, dbname="库名").execute()
        # 通过object_InDo把数据库的格式装换成关键字参数格式
        parm = self.object_InDo(data, "表名", "库名")[0]
        # to object
        return moudle.MInfo(**parm)

    @staticmethod
    def object_InDo(data, table_name, dbname):
        """
        :param data: 查询的底层数据
        :param table_name: 查询的表名
        :param dbname: 查询的库名
        :return: 实例化model入参list
        """
        if data is None:
            data = ((),)
        head = Common().sql_exec(
            sqls="SELECT COLUMN_NAME from COLUMNS where table_name = '%s' and table_schema = '%s';" % (table_name, dbname)
                 , dbname="information_schema").execute()
        #数据转换
        info = {}
        info_list = []
        for item in data:
            data_list = list(item)
            #数据库格式处理
            for i in range(len(head)):
                if isinstance(data_list[i], datetime.datetime):
                    data_list[i] = data_list[i].strftime('%Y-%m-%d %H:%M:%S')
                if isinstance(data_list[i], Decimal):
                    data_list[i] = float(data_list[i])
                info[head[i][0]] = data_list[i]
            info_list.append(info)
        return info_list
其实实现不重要,主要是用例搭建模块化的思想,对于用例中所有会获取数据的地方都被集中到这里统一管理,即使获取一个字段,不需要装入实体类也是一样的。用例要提高效率必须提高可复用性。

你可能感兴趣的:(Python,自动化测试)