所以我目前正在尝试用Python开发一个测试框架,并且我已经开发了一系列用于此的API方法。这个框架将被许多不同的人使用,他们对“被测系统”有不同的经验和知识,所以已经决定让一个简单的API和一个更“本机”的API可用是有用的。 API方法都使用ip-session连接“被测系统”,并且在整个测试会话期间此会话必须相同。到现在为止还挺好。但是我发现在同一个测试中同时使用“简单API方法”和“本机API方法”可能很有用,并且它们必须以某种方式共享此ip-session。在此之前我做了这样的事情:
nativeAPI(object):
def __init__(self):
self.session = createSession(password, systemip)
def someAPImethod(self):
return dosomeTestStuff(self.session)
simpleAPI(object):
def __init__(self):
self.session = createSession(password, systemip)
def someAPImethod(self):
return dosomeTestStuff(self.session)
#Test code written by a person using the framework could look something like this.
testMethods = nativeAPI()
testMethods.someAPImethod()
但是现在我想更喜欢“测试者”可以使用与此类似的语法:
testMethods = createSession()
testMethods.nativeAPI.someAPIMethod()
我尝试使用“createSession”类中的“NativeAPI”类来执行此操作,但最终出现了以下错误问题:“必须使用实例作为第一个参数调用未绑定方法”。所以我问你:我该怎么办呢? Python中有什么好的设计模式?
答案 0 :(得分:2)
只需在nativeAPI
中创建一个包含简单createSession
实例的简单对象,然后返回:
class Wrapper(object):
def __init__(self, nativeAPI):
self.nativeAPI = nativeAPI
def createSession():
nativeAPI = ...
return Wrapper(nativeAPI)
答案 1 :(得分:0)
我会将simpleAPI
作为nativeAPI
的子类。
这样,即使您拥有nativeAPI
实例,也始终可以使用simpleAPI
方法。更好的是,simpleAPI
方法可以用nativeAPI
来实现,简化了代码:
nativeAPI(object):
def __init__(self):
self.session = createSession(password, systemip)
def someAPImethod(self):
return dosomeTestStuff(self.session)
simpleAPI(nativeAPI):
def someSimpleAPImethod(self):
result = self.someAPImethod()
result.doSomethingToSimplify()
return result