理解反射:

1.创建属性或者方法对象

2.然后再将属性或者方法赋予某一个类的对象

区别:

在python自动化脚本设计中,往往通过反射getattr(obj,name_str)(**kwargs)去调用工具类中的get/post方法,obj为工具类实例化对象,name_str为所需要动态调用的方法

因为python已经封装好了,所以直接调用比较简单,就不介绍了,测试人员的基础技能。

java中:Class.forName("类的全路径名")。

用法:

1.如何获取构造方法对象
            public Constructor<T> getConstructor(Class<?>... parameterTypes):获取公共的构造方法
            public Constructor<?>[] getConstructors():获取所有的公共的构造方法
            
            public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes):获取构造方法
            public Constructor<?>[] getDeclaredConstructors():获取所有的构造方法
            
            Constructor类中的方法?
                public T newInstance(Object... initargs):创建对象
                public void setAccessible(boolean flag):
                    反射的对象在使用时应该取消 Java 语言访问检查
                    一般我们传递的参数都是true

                    暴力反射:使用反射获取私有成员的时候,使用普通的对象是获取不到的,必须使用
                    带declared的方法,而且需要设置setAccessible,值true可以获取到
    
        
        2.如何获取字段(成员变量,属性)对象
            public Field getField(String name):获取公共的成员变量
            public Field[] getFields():获取所有的公共的成员变量

            public Field getDeclaredField(String name):获取成员变量
            public Field[] getDeclaredFields():获取所有的成员变量

            Field类中的方法?
                public void set(Object obj,Object value):给具体的哪个对象赋什么值
                public void setAccessible(boolean flag):
                    反射的对象在使用时应该取消 Java 语言访问检查
                    一般我们传递的参数都是true

      3.如何获取普通的成员方法对象
            public Method getMethod(String name,Class<?>... parameterTypes):获取公共的方法对象
            public Method[] getMethods():获取所有的公共的方法对象
            public Method getDeclaredMethod(String name,Class<?>... parameterTypes):获取方法对象
            public Method[] getDeclaredMethods():获取所有的方法对象

            Method类中的方法?
                public Object invoke(Object obj,Object... args)
                    返回值:就是调用方法之后的返回值