简单记录一下数据共享问题
在我们用main文件执行所有用例时,配置文件中的配置是所有用例都会用到的数据,我们将配置文件中的配置信息作为Environment这个类的类属性,而每个执行用例的类中,我们引入一个实例对象,将每个执行用例类所产生的属性赋值给实例属性,这样每个用例类的实例属性都是不一样的。配置文件属性共享,用例属性不共享(类属性与实例属性)
配置文件conf.py部分配置示例:
#=============================================================服务器配置相关======================================================================================
REPORT_HTTP_URL = 'http:/*******'
# BITBUCKET ENVIRONMENT VARIABLE
BB_PROJECT_NAME=os.environ.get('TRIGGER_PROJECT_NAME') if os.environ.get('TRIGGER_PROJECT_NAME') else os.environ.get('BITBUCKET_REPO_SLUG')
BB_BUILD_NUMBER=os.environ.get('BITBUCKET_BUILD_NUMBER')
BB_TRIGGER_BUILD_NUMBER=os.environ.get('TRIGGER_BUILD_NAME')
BB_BRANCH=os.environ.get('TRIGGER_BRANCH_NAME') if os.environ.get('TRIGGER_BRANCH_NAME') else os.environ.get('BITBUCKET_BRANCH')
ENVIRONMENT=os.environ.get('TRIGGER_ENVIRONMENT') if os.environ.get('TRIGGER_ENVIRONMENT') else os.environ.get('ENVIRONMENT')
#==============================================================SFTP上传测试报告连接信息=============================================================================
# SFTP
SFTP_HOST=os.environ.get('SFTP_HOST')
SFTP_USER=os.environ.get('SFTP_USER')
SFTP_PWD=os.environ.get('SFTP_PWD')
#==============================================================Teams通知频道========================================================================================
# MSTEAMS WEBHOOK
MSTEAMS_WEBHOOK=os.environ.get('MSTEAMS_WEBHOOK')
#反射所有环境变量并赋值给对象的属性
class Environment(object):
def __new__(cls) -> any:
for item in dir(conf):
if not item.startswith("__") and not item.endswith("__") and not type(item).__name__ == 'module':
setattr(cls,item,getattr(conf,item))
return super().__new__(cls)
SystemEnv=Environment()
定义一个类Environment,通过魔术方法__new__将配置conf.py中的所有配置设置为类属性。再将这个类实例化,每个执行用例的模块导入这个实例对象,即每个用例类都有一个初始化的实例对象(拥有配置文件中的所有配置信息)
- 如果上一个如果上一个测试模块的数据不需要流向下一个测试模块,且不能影响下一个测试模块的运行,数据隔离,那么就导入实例对象,每一个测试模块(excle中的每一个表单)对应一个实例对象SystemEnv。from *** import SystemEnv;在赋值属性时,给实例对象赋值属性:setattr(SystemEnv,**,**)
- 如果上一个测试模块的数据要流向下一个测试模块,那么就需要在这两个(多个)模块中导入Environment类,将两个(多个)单独的测试模块.py文件串联起来,数据共享。所有的这些模块公用一个Environment类。from *** import Environment;在赋值属性时,给类对象赋值属性:setattr(Environment,**,**)