Ich habe AWS-Batch mit moto verspottet und konnte den Job registrieren, sodass ich ihn als Memorandum belassen werde.
test_aws_batch.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest
import boto3
from moto import mock_batch, mock_iam
class MyTestCase(unittest.TestCase):
@mock_iam
@mock_batch
def test_aws_batch(self):
client = boto3.client('batch')
iam = boto3.client('iam')
#Schein iam Rolle
iams = iam.create_role(
RoleName='test_matsu_iam',
AssumeRolePolicyDocument='string',
)
iam_arn = iams.get('Role').get('Arn')
print("iamRoleArn: " + iam_arn)
# aws-Batch Compute-Umgebungsmodell
batch = client.create_compute_environment(
computeEnvironmentName='test_matsu_batch',
type='UNMANAGED',
serviceRole=iam_arn
)
compute_environment_arn = batch.get('computeEnvironmentArn')
print("computeEnvironmentArn: " + compute_environment_arn)
# aws-Batch Job Queue Mock
job_qs = client.create_job_queue(
jobQueueName='test_matsu_job_q',
state='ENABLED',
priority=1,
computeEnvironmentOrder=[
{
'order': 1,
'computeEnvironment': compute_environment_arn
},
]
)
job_q_arn = job_qs.get('jobQueueArn')
print("jobQueueArn: " + job_q_arn)
# aws-Batch Job Definition Mock
job_definition = client.register_job_definition(
jobDefinitionName='test_matsu_job_definition',
type='container',
containerProperties={
'image': 'string',
'vcpus': 123,
'memory': 123
},
)
job_definition_arn = job_definition.get('jobDefinitionArn')
print("jobDefinitionArn: " + job_definition_arn)
#Job hinzufügen
client.submit_job(
jobName='string',
jobQueue=job_q_arn,
jobDefinition=job_definition_arn
)
#Jobliste abrufen
jobs = client.list_jobs(
jobQueue=job_q_arn
)
#Jobliste ausgeben
print("jobSummaryList: " + str(jobs.get('jobSummaryList')))
if __name__ == '__main__':
unittest.main()
$ python -m unittest test.test_aws_batch -v
test_aws_batch (test.test_aws_batch.MyTestCase) ... iamRoleArn: arn:aws:iam::123456789012:role/test_matsu_iam
computeEnvironmentArn: arn:aws:batch:ap-northeast-1:123456789012:compute-environment/test_matsu_batch
jobQueueArn: arn:aws:batch:ap-northeast-1:123456789012:job-queue/test_matsu_job_q
jobDefinitionArn: arn:aws:batch:ap-northeast-1:123456789012:job-definition/test_matsu_job_definition:1
jobSummaryList: [{'jobId': 'ee3a3206-fdfe-404f-a1c1-9c444b41b546', 'jobName': 'string'}]
ok
----------------------------------------------------------------------
Ran 1 test in 0.167s
OK
Verschiedene Ressourcen wurden verspottet und der Job wurde erfolgreich eingereicht.
Mit diesem Modell können Sie die Übermittlung von Jobs an AWS-Batch testen, ohne die tatsächlichen AWS-Ressourcen zu verwenden. Leider ist der Inhalt des übergebenen Jobs nur "jobId" und "jobName". Es ist unwahrscheinlich, dass Tests für die Erstellung oder den Status von Arbeitsplätzen verfügbar sind. Die Schlussfolgerung ist, dass es besser erscheint, für den Test, der den übergebenen Job verwendet, "Mock" des "Unit Test" zu verwenden.
Recommended Posts