遇一山,过一山,处处有风景;只要勇敢向前,一路尽是繁花盛开。 | (点击查看→)【测试干货】python/java自动化、持续集成、性能、测开、简历、笔试面试等

通过元类规范接口自动化测试脚本:类名首字母大写、类及类下的方法必须有非空注释

还在为接口脚本规范烦恼么?

比如:

类名定义不规范!

定义的类缺少注释!

函数名不规范!

定义的函数缺少注释!

而这些,都会大大降低脚本的可读性以及可维护性。

ok,不管是写脚本的人忘了还是什么其它原因,我们可以通过元类来对脚本做出一些规范,代码如下:

import types
class Mymeta(type):  # 继承默认元类的一堆属性
    def __init__(self,class_name,class_bases,class_dic):
        # 类名首字母必须大写
        # if not class_name.istitle():  # 如果是ChinesePeople就不行
        if not (ord(class_name[0]) >=65 and ord(class_name[0])<=90):  # 只需要首字母在A-Z即可
            raise TypeError('类名【%s】的首字母必须大写'%class_name)

        # 类必须要有非空注释
        if '__doc__' not in class_dic or not class_dic['__doc__'].strip():
            raise TypeError('必须有注释,且注释不能为空')

        # 类中方法必须要有非空注释
        # print(class_dic)
        for k,v in class_dic.items():
            # print(k, v)
            if isinstance(v, types.FunctionType):
                # print(v)
                f = getattr(self, k)
                if hasattr(f, '__doc__'):
                    # print(c.__doc__)
                    if not f.__doc__:
                        raise TypeError('方法【%s】必须有注释,且注释不能为空'%k)

        super(Mymeta,self).__init__(class_name,class_bases,class_dic)

    def __call__(self, *args, **kwargs): # 重写type类的__call__方法,obj=Chinese('jack',age=18)
        print(self) #self=Chinese
        print(args) #args=('jack',)
        print(kwargs) #kwargs={'age': 18}

class Chinese(object,metaclass=Mymeta):
    '''
    中文人的类
    '''
    country='China'

    def __init__(self,namem,age):
        '''123'''
        self.name=namem
        self.age=age

    def talk(self):
        """talk方法"""
        print('%s is talking' %self.name)


Chinese('jack',age=18) # Chinese.__call__(Chinese,'jack',18)

  

是不是so easy呢?确实很easy。

 

posted @ 2018-03-21 02:33  全栈测试笔记  阅读(657)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end