本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
指定用于合约测试的输入数据
默认情况下,使用根据您在 Hook 架构中定义的模式生成的输入属性来 CloudFormation 执行合约测试。但是,大多数 Hook 都非常复杂,以至于用于预创建或预更新配置堆栈的输入属性需要了解所配置的资源。为了解决这个问题,你可以指定在执行合约测试时 CloudFormation 使用的输入。
CloudFormation 提供了两种方法供您指定在执行合约测试时使用的输入数据:
-
覆盖文件
使用
overrides文件提供了一种轻量级的方法来指定某些特定属性的输入数据preCreate, CloudFormation 以便在操作测试preUpdate和preDelete操作测试期间使用。 -
输入文件
在以下情况下,您也可以使用多个
input文件来指定合约测试输入数据:-
您想要或需要为创建、更新和删除操作指定不同的输入数据,或者为测试指定无效数据。
-
您想要指定多个不同的输入数据集。
-
使用替代文件指定输入数据
以下是 Amazon S3 Hook 使用该overrides文件输入数据的示例。
{ "CREATE_PRE_PROVISION": { "AWS::S3::Bucket": { "resourceProperties": { "/BucketName": "encryptedbucket-us-west-2-contractor", "/BucketEncryption/ServerSideEncryptionConfiguration": [ { "BucketKeyEnabled": true, "ServerSideEncryptionByDefault": { "KMSMasterKeyID": "KMS-KEY-ARN", "SSEAlgorithm": "aws:kms" } } ] } }, "AWS::SQS::Queue": { "resourceProperties": { "/QueueName": "MyQueueContract", "/KmsMasterKeyId": "hellocontract" } } }, "UPDATE_PRE_PROVISION": { "AWS::S3::Bucket": { "resourceProperties": { "/BucketName": "encryptedbucket-us-west-2-contractor", "/BucketEncryption/ServerSideEncryptionConfiguration": [ { "BucketKeyEnabled": true, "ServerSideEncryptionByDefault": { "KMSMasterKeyID": "KMS-KEY-ARN", "SSEAlgorithm": "aws:kms" } } ] }, "previousResourceProperties": { "/BucketName": "encryptedbucket-us-west-2-contractor", "/BucketEncryption/ServerSideEncryptionConfiguration": [ { "BucketKeyEnabled": true, "ServerSideEncryptionByDefault": { "KMSMasterKeyID": "KMS-KEY-ARN", "SSEAlgorithm": "aws:kms" } } ] } } }, "INVALID_UPDATE_PRE_PROVISION": { "AWS::S3::Bucket": { "resourceProperties": { "/BucketName": "encryptedbucket-us-west-2-contractor", "/BucketEncryption/ServerSideEncryptionConfiguration": [ { "BucketKeyEnabled": true, "ServerSideEncryptionByDefault": { "KMSMasterKeyID": "KMS-KEY-ARN", "SSEAlgorithm": "AES256" } } ] }, "previousResourceProperties": { "/BucketName": "encryptedbucket-us-west-2-contractor", "/BucketEncryption/ServerSideEncryptionConfiguration": [ { "BucketKeyEnabled": true, "ServerSideEncryptionByDefault": { "KMSMasterKeyID": "KMS-KEY-ARN", "SSEAlgorithm": "aws:kms" } } ] } } }, "INVALID": { "AWS::SQS::Queue": { "resourceProperties": { "/QueueName": "MyQueueContract", "/KmsMasterKeyId": "KMS-KEY-ARN" } } } }
使用输入文件指定输入数据
使用input文件来指定要使用的不同类型的输入数据:preCreate输入、preUpdate输入和无效输入。 CloudFormation 每种数据都在单独的文件中指定。您还可以为合约测试指定多组输入数据。
要指定要在合约测试中使用的input文件,请在 Hooks 项目的根目录中添加一个inputs文件夹。 CloudFormation 然后添加您的输入文件。
使用以下命名约定指定文件包含哪种输入数据,其中n为整数:
-
inputs_:使用带有n_pre_create.jsonpreCreate处理程序的文件来指定用于创建资源的输入。 -
inputs_:使用带有n_pre_update.jsonpreUpdate处理程序的文件来指定用于更新资源的输入。 -
inputs_:使用带有n_pre_delete.jsonpreDelete处理程序的文件来指定删除资源的输入。 -
inputs_: 用于指定要测试的无效输入。n_invalid.json
要为合约测试指定多组输入数据,请增加文件名中的整数以对输入数据集进行排序。例如,您的第一组输入文件应命名为inputs_1_pre_create.jsoninputs_1_pre_update.json、和inputs_1_pre_invalid.json。您的下一组将命名为inputs_2_pre_create.json、inputs_2_pre_update.jsoninputs_2_pre_invalid.json、和,依此类推。
每个输入文件都是一个 JSON 文件,仅包含用于测试的资源属性。
以下是使用输入文件inputs Amazon S3 指定输入数据的示例目录。
inputs_1_pre_create.json-
以下是
inputs_1_pre_create.json合同测试的示例。{ "AWS::S3::Bucket": { "resourceProperties": { "AccessControl": "BucketOwnerFullControl", "AnalyticsConfigurations": [], "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "BucketKeyEnabled": true, "ServerSideEncryptionByDefault": { "KMSMasterKeyID": "KMS-KEY-ARN", "SSEAlgorithm": "aws:kms" } } ] }, "BucketName": "encryptedbucket-us-west-2" } }, "AWS::SQS::Queue": { "resourceProperties": { "QueueName": "MyQueue", "KmsMasterKeyId": "KMS-KEY-ARN" } } } inputs_1_pre_update.json-
以下是
inputs_1_pre_update.json合同测试的示例。{ "AWS::S3::Bucket": { "resourceProperties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "BucketKeyEnabled": true, "ServerSideEncryptionByDefault": { "KMSMasterKeyID": "KMS-KEY-ARN", "SSEAlgorithm": "aws:kms" } } ] }, "BucketName": "encryptedbucket-us-west-2" }, "previousResourceProperties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "BucketKeyEnabled": true, "ServerSideEncryptionByDefault": { "KMSMasterKeyID": "KMS-KEY-ARN", "SSEAlgorithm": "aws:kms" } } ] }, "BucketName": "encryptedbucket-us-west-2" } } } inputs_1_invalid.json-
以下是
inputs_1_invalid.json合同测试的示例。{ "AWS::S3::Bucket": { "resourceProperties": { "AccessControl": "BucketOwnerFullControl", "AnalyticsConfigurations": [], "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256" } } ] }, "BucketName": "encryptedbucket-us-west-2" } }, "AWS::SQS::Queue": { "resourceProperties": { "NotValid": "The property of this resource is not valid." } } } inputs_1_invalid_pre_update.json-
以下是
inputs_1_invalid_pre_update.json合同测试的示例。{ "AWS::S3::Bucket": { "resourceProperties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "BucketKeyEnabled": true, "ServerSideEncryptionByDefault": { "KMSMasterKeyID": "KMS-KEY-ARN", "SSEAlgorithm": "AES256" } } ] }, "BucketName": "encryptedbucket-us-west-2" }, "previousResourceProperties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "BucketKeyEnabled": true, "ServerSideEncryptionByDefault": { "KMSMasterKeyID": "KMS-KEY-ARN", "SSEAlgorithm": "aws:kms" } } ] }, "BucketName": "encryptedbucket-us-west-2" } } }