2014-02-10 3 views
0

나는 robotframework 용 파이썬에서 하이브리드 라이브러리를 구축했습니다. 이 API의 메소드 중 하나는 테스트에서 robotframework 변수에 지정하려는 문자열을 반환합니다.robotframework 하이브리드 라이브러리 키워드가 값을 반환하지 않습니다.

${sms_1_2}= encrypt_sms_return_ciphered  [email protected]  [email protected]  sms1to2 

나는 encrypt_sms_return_ciphered의 파이썬 코드가 문자열을 반환했음을 확인했습니다. 그러나 문제는 robotframework 변수가 없음에 할당된다는 것입니다.

다음
@InstanceIndex.check_short_name 
def encrypt_sms__return_ciphered(self, sender, receiver, clearsms): 
    self.encrypt_sms(sender, receiver, clearsms) 
    ClientIndex.success_if(sender, "isSmsSent", receiver, clearsms) 
    cipheredsms = self.smsSent[receiver, clearsms] 
    del self.smsSent[receiver, clearsms] 
    return cipheredsms 

이 check_short_name 데코레이터의 코드입니다 :

@staticmethod 
def check_short_name(method): 
    def wrapper(self, short_name, *args, **kwargs): 
     if short_name != self.short_name: 
      try: 
       getattr(self.collection.iterate(), method.__name__)(short_name, *args, **kwargs) 
      except StopIteration: 
       raise Exception("item \"%s\" is not a member of %s, or method \"%s\" is not defined for any member of %s" % (short_name, self.collection.name, method.__name__, self.collection.name)) 
     else: 
      self.collection.rewind() 
      return method(self, short_name, *args, **kwargs) 
    return wrapper 

답변

0

나는 문제가 무엇인지 발견 : 여기

는 방법 코드 반환 값 체인은 처음부터 부서졌다. getattr 전에는 반환이 없었습니다.

@staticmethod 
def check_short_name(method): 
    def wrapper(self, short_name, *args, **kwargs): 
     if short_name != self.short_name: 
      try: 
       **return** getattr(self.collection.iterate(), method.__name__)(short_name, *args, **kwargs) 
      except StopIteration: 
       raise Exception("item \"%s\" is not a member of %s, or method \"%s\" is not defined for any member of %s" % (short_name, self.collection.name, method.__name__, self.collection.name)) 
     else: 
      self.collection.rewind() 
      return method(self, short_name, *args, **kwargs) 
    return wrapper