接口自动化过程中会创建很多测试数据,时间长了以后,这部分测试数据量就变得很大,因此考虑在测试用例跑完后就删除创建的测试数据。
想法是,创建一个DBConn类,在sdk中增加数据库链接,这样就能在继承NewSdk的实例中直接通过直接调用该类实例。
代码如下:
class NewSdk(SdkBase):
def __init__(self, cookie=None, country=None, env=None, api_base=None):
super().__init__(cookie, country, env, api_base)
self.demo_principal_id = DEMO_PRINCIPAL_ID[env]
if not hasattr(global_data, 'conn'):
flobal_data.conn = DBConn(self.env)
self.conn = conn
但是执行的时候报错了,出现错误提示:TypeError:can't pickle _thread._local objects
image.png在这里 找到一个解释,原因是在多线程中,(db)conn是无法复制的对象。
解决方法:
用@property将将(db)conn作为类的属性(在实例中调用conn的方法与在_init_()中定义的self.conn相同)
class NewSdk(SdkBase):
def __init__(self, cookie=None, country=None, env=None, api_base=None):
super().__init__(cookie, country, env, api_base)
self.demo_principal_id = DEMO_PRINCIPAL_ID[env]
@property
def conn(self):
if not hasattr(global_data, 'conn'):
global_data.conn = DBConn(self.env)
return global_data.conn
网友评论