как обезьянничать ServiceAccount googleapiclient в pytest

#python #pytest #google-api-client #pytest-mock

#python #pytest #google-api-клиент #pytest-макет

Вопрос:

у меня есть некоторый код, который инициализирует iam_service , а затем есть несколько запросов для получения ServiceAccounts и ключей.

инициализация:

 iam_service = googleapiclient.discovery.build('iam', 'v1', credentials=self.credentials
 

затем iam_service передается функциям и выполняется

например, для перечисления ServiceAccounts:

 req = iam_service.projects().serviceAccounts().list(name=name).execute()
 

и для получения ключей:

 req = iam_service.projects().serviceAccounts().keys().list(name=serviceAccountEmail).execute()
 

Это добавление кода в функцию очистки существующего модуля (gce.py ). в целом, как это выглядит на данный момент:

 def cleanup(self):
  ..other clean
  self.cleanup_serviceaccounts()

def cleanup_serviceaccounts(self):                                                                                                                                                                                           
  self.log_info(f"## GCE cleaning - {self.__project} ##")                                                                                                                                                                    
                                                                                                                                                                                                                                             
  service = googleapiclient.discovery.build('iam', 'v1', credentials=self.credentials)    
  # Get service account emails                                                                                                                                                                                                         
  service_accounts_emails = self.parser_service_account_list(service)                                                                                                                                                                  
  # For each email found return the ones with associated old date                                                                                                                                                                      
  service_accounts_emails_filtered = self.filter_email_service_accounts(service, 
                                                                  service_accounts_emails)                                                                                                                              
  self.delete_service_accounts(service, service_accounts_emails_filtered)

def parser_service_account_list(service):
  ...
def self.filter_email_service_accounts(service, service_accounts_emails):
  ...
def delete_service_accounts(service, service_accounts_emails_filtered):
  ...
 

я нашел документацию в модуле googleapiclient для макетов. Но я не понял, как это будет соответствовать моим потребностям. Например, для примера требуется файл auth_creds.json. Документация немного короткая, и я не понимаю, как на самом деле должны быть реализованы шаги от аутентификации до запросов.

Может ли кто-нибудь поделиться тем, как должен быть реализован pytest с помощью monkeypatch модуля, используя HttpMock / HttpMockSequence или как это было бы реализовано без.

я могу поделиться тестовым кодом, как он выглядит из предыдущих реализаций.

Любые дополнительные идеи приветствуются, поскольку я пытаюсь понять, как издевательство над такими случаями работает во благо. В Google есть много вещей, но с очень простыми тестовыми примерами, где они обычно не применяются в реальном мире.