Say I want to mock the following: session = boto3.Session(profile_name=profile) resource = session.resource('iam') iam_users = resource.users.all() policies = resource.policies.filter(Scope='AWS', OnlyAttached=True, PolicyUsageFilter='PermissionsPolicy') How do I go about starting to mock this with in pytest? I could create mocked objects by creating a dummy class and the necessary attributes, but I suspect that's the wrong approach. Some additional details, here's what I'm trying to test out: def test_check_aws_profile(self, mocker): mocked_boto3 = mocker.patch('myapp.services.utils.boto3.Session') mocker.patch(mocked_boto3.client.get_caller_identity.get, return_value='foo-account-id') assert 'foo-account-id' == my_func('foo') #in myapp.services.utils.py def my_func(profile): session = boto3.Session(profile_name=profile) client = session.client('sts') aws_account_number = client.get_caller_identity().get('Account') return aws_account_number But I can't quite seem to be able to get this patched correctly. I'm trying to make it so that I can patch session and the function calls in that method I tried using moto and got this: @mock_sts def test_check_aws_profile(self): session = boto3.Session(profile_name='foo') client = session.client('sts') client.get_caller_identity().get('Account') But I'm running into > raise ProfileNotFound(profile=profile_name) E botocore.exceptions.ProfileNotFound: The config profile (foo) could not be found So it seems like it's not mocking anything :| Edit: Turns out you need to have the mocked credentials in a config and credentials file for this to work. Continue reading...