2017-01-10 19 views
1

をboto3使用してS3にファイルを、私はこの機能を持っているが、アップロード機能のためのユニットテストを作ります私がこれまでに書くことができるもの:はS3バケットにアーカイブファイルをアップロード

class TestUploadFilesToS3(unittest.TestCase): 
    """ Tests unitaires upload_file_to_s3_bucket""" 


    def setUp(self): 
     conf.LOG_FILE = "/tmp/test.log" 
     conf.BUCKET_OUTPUT="name.of.the.bucket" 
     conf.Conf.get_level_log() 
     self.log = logger(conf.LOG_FILE, conf.LEVEL_LOG).logger 
     tools.create_workdir(self.log) 
     conf.WORKDIR = os.path.join(conf.LOCAL_DIR, "files/output") 
     archive = "file_archive.tar.gz" 
     archivePath = "/tmp/clients/file_archive.tar.gz" 
     _aws = None 

    def tearDown(self): 
     tools.delete_workdir(self.log) 
     os.remove(conf.LOG_FILE) 


    def test_upload_file_to_s3_bucket_success(self): 
     self._aws.upload_file_to_s3_bucket(conf.BUCKET_OUTPUT, archivePath, archive, self._log) 

は、ユニットテストを行うために、私はアサートが、私がテスト機能test_upload_file_to_s3_bucket_successに使用すべき機能しているかわからないと私は正確に何を比較する必要があります。 たとえば、ファイルのURLが存在するかどうかをテストできますか?何か案は? はありがとう

答えて

0

は、あなたが見ることができるように、私はS3のアップロード機能

self.ti.uploadTemplate(contentsOfFile) # this is what is being tested 
    # also supplied from elsewhere "contentsOfFile" and "nameOfFile" 
    # bucket is assumed to be called "cloud-test-cf" 

    s3 = boto3.resource('s3') 
    mytname = nameOfFile 
    obj = s3.Object(bucket_name='cloud-test-cf', key=mytname) 
    response = obj.get() 
    self.assertEqual(response['ContentLength'], len(contentsOfFile)) 
    remoteData = response['Body'].read() 
    self.assertEqual(remoteData, contentsOfFile) 

のために書いたテストからのクリップです"uploadTemplate"が使用された直後にファイルを取得します。あなたが同じ領域/ AZ設定を使用している場合、それは正常に動作する必要があり、このテストのためのhttp://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel

unittestの方法は、この

@unittest.skipIf(
     not(boto3.session.Config().region_name), 
     "aws creds not loaded") 
def testuploadTemplate(self): 
    #....test code here 

のようなデコレータを使用しています。このデコレータは、ユニットテストスイートが実行されている場合ことを意味見ますAWSキーは使用できません。この特定のテストはスキップされます。

+0

ありがとうございます@Vorsprung非常に助けている。 '== エラー:test_upload_file_to_s3_bucket_success(__main __。TestUploadFilesToS3) ClientError:GetObject操作を呼び出すときにエラー(NoSuchKey)が発生しました:指定されたキーが存在しません。 ' – JavaQueen

+0

実際、私はこのエラーを解決しましたが、アップロードコールの下にresponse = obj.get()を入れました。今度は、ファイルとS3からのオブジェクトの長さが同じでないため、テストが失敗したというエラーが表示されます: 'self.assertEqual(response ['ContentLength']、len(self.archive)) AssertionError:141! = 34 ' – JavaQueen

+0

解決済み。私はlen(contentsOfFile)をos.path.getsize(contentsOfFile)に変更しました。 – JavaQueen

1

botocore stubberの使用をお勧めします。そのドキュメントページにはいくつかの例があります。

関連する問題