Developer guide for making Integration Tests: Difference between revisions

From Izara Wiki
Jump to navigation Jump to search
(Created page with "= Overview =")
 
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
= Overview =
= Overview =
:How to create folder and file in S3 bucket for prepare integrationTest
:[[Service - Integration Test Config|Integration Test Config]] for config of property in file resources.json, events.json and tests.json
= Setup integrationtest =
== Create folder ==
: Create your folder in bucket '''integrationtest-config-us-east-2/test_config/{<u>your folder name</u>}''' in S3 bucket
:* '''{<u>your folder name</u>}''' maybe is your nickname eg. jamesDev, nicoleDev
:* Can create a subfolder in your folder for each test case or service that you want to test
:: eg. - integrationtest-config-us-east-2/test_config/jamesDev/SellOfferManager
::: - integrationtest-config-us-east-2/test_config/jamesDev/ProcessLogical
::: - integrationtest-config-us-east-2/test_config/jamesDev/SellOfferManager/ProcessLogical
== Create file ==
# Create a file in a folder that is used for testing
#* ''resources.json / events.json / tests.json''
#* '''resources.json''' and '''events.json''' is json object
#* '''tests.json''' is json array of objects
#* Can create these files in a SharedResource folder and share it with another test for collaborative usage
#:: eg. integrationtest-config-us-east-2/test_config/jamesDev/SellOfferManager/SharedResource/resources.json
#* In the main prefix for testing, you don’t need to upload every file. If you have a file in SharedResource, you can skip uploading it 
## '''resources.json'''
##* Syntax; [[Service_-_Integration_Test_Config#resources.js Syntax|resources Syntax]]
## '''events.json'''
##* Syntax; [[Service_-_Integration_Test_Config#events/*.js_Syntax|events Syntax]]
##* Not use <code><s>isObject</s></code>. Use <code>properties</code> instead, if is an object will look for child properties
##* Not use <code><s>isStringSet</s></code>
##* If have many stage, Set <code>initialStage</code> is true only initial stage. Next stage not set this setting
##* If <code>snsSqsTrigger</code> is true but not set snsServiceName or snsTopic --> direct invoke
##* If <code>DirectSqs</code> and <code>BatchSqsMessages</code> is true --> direct invoke
##* If <code>snsSqsTrigger</code> and <code>DirectSqs</code> is false or not set --> direct invoke
##* <code>forStageMatching</code> <u>Use in test important parameter</u>
##* <code>testValueMatches</code> <u>For random parameter eg. timeStamp or uuid</u>
##* If value in array or number or string is <u>random</u>. '''Use testValueMatches: true not set forStageMatching: true''' 
##* Multiple eventTags can be added to a single file
##* Have 6 types of events; Dynamodb, Sns/Sqs, Dsq, Invoke, API and NoRetryError
## '''tests.json'''
##* Syntax; [[Service_-_Integration_Test_Config#tests/*.js_Syntax|tests Syntax]]
##* Not use <code><s>dynamoDbOutput</s></code>. Use <code>dynamodbOutputEventIdentifiers</code> instead
# Upload file to S3 bucket by batchscript or upload to S3 bucket directly
#:<syntaxhighlight lang="JavaScript">
#!/bin/bash
set -u
localPath="/home/dogsrcute/Programming mint/Fixed_Integrationtest/PluemDev/paginate/2stages"
bucketName=s3://integrationtest-config-us-east-2/test_config/mintDev/fixed/PluemDev/2stages/
aws s3 cp "$localPath" "$bucketName" --recursive
</syntaxhighlight>
#* localPath is part to files for upload
#* bucketName is your bucket
== Type of parameter ==
: Parameter type for create property in events.json
<syntaxhighlight lang="JavaScript">
object: {
forStageMatching: true,
properties: {}
},
array: {
forStageMatching: true,
eventValue: []
},
number: {
forStageMatching: true,
value: 1111
},
string: {
forStageMatching: true,
value: "hi"
},
boolean: {
forStageMatching: true,
value: true
}
// Case empty
EmptyString:{
value: ""
},
EmptyArray:{
forStageMatching: true,
eventValue: []
},
EmptyObject:{
forStageMatching: true,
value: {}
}
</syntaxhighlight>
= Test =
# create params for invoke <u>IntTestingTestInitiateIntegrationTestHdrInv</u> function
#:<syntaxhighlight lang="JavaScript">
{
"serviceName": "ComplexFilter", 
"resourceType": "Lambda", 
"resourceName": "ProcessComplexFilterHdrSqs", 
"integrationTestTags": [
"test_S3_ByDev" 
], 
"bucketName": "integrationtest-config-us-east-2", 
"bucketPrefix":[ 
"test_config/mintDev/basicCase/",
"test_config/mintDev/SharedResource/" 
}
</syntaxhighlight>
# Find results in IntTestingTestTestRecord table
= Working documents =
[[:Category:Working_documents - Developer guide for making Integration Tests|Working_documents - Developer guide for making Integration Tests]]

Latest revision as of 08:51, 24 February 2025

Overview

How to create folder and file in S3 bucket for prepare integrationTest
Integration Test Config for config of property in file resources.json, events.json and tests.json

Setup integrationtest

Create folder

Create your folder in bucket integrationtest-config-us-east-2/test_config/{your folder name} in S3 bucket
  • {your folder name} maybe is your nickname eg. jamesDev, nicoleDev
  • Can create a subfolder in your folder for each test case or service that you want to test
eg. - integrationtest-config-us-east-2/test_config/jamesDev/SellOfferManager
- integrationtest-config-us-east-2/test_config/jamesDev/ProcessLogical
- integrationtest-config-us-east-2/test_config/jamesDev/SellOfferManager/ProcessLogical

Create file

  1. Create a file in a folder that is used for testing
    • resources.json / events.json / tests.json
    • resources.json and events.json is json object
    • tests.json is json array of objects
    • Can create these files in a SharedResource folder and share it with another test for collaborative usage
    eg. integrationtest-config-us-east-2/test_config/jamesDev/SellOfferManager/SharedResource/resources.json
    • In the main prefix for testing, you don’t need to upload every file. If you have a file in SharedResource, you can skip uploading it 
    1. resources.json
    2. events.json
      • Syntax; events Syntax
      • Not use isObject. Use properties instead, if is an object will look for child properties
      • Not use isStringSet
      • If have many stage, Set initialStage is true only initial stage. Next stage not set this setting
      • If snsSqsTrigger is true but not set snsServiceName or snsTopic --> direct invoke
      • If DirectSqs and BatchSqsMessages is true --> direct invoke
      • If snsSqsTrigger and DirectSqs is false or not set --> direct invoke
      • forStageMatching Use in test important parameter
      • testValueMatches For random parameter eg. timeStamp or uuid
      • If value in array or number or string is random. Use testValueMatches: true not set forStageMatching: true
      • Multiple eventTags can be added to a single file
      • Have 6 types of events; Dynamodb, Sns/Sqs, Dsq, Invoke, API and NoRetryError
    3. tests.json
      • Syntax; tests Syntax
      • Not use dynamoDbOutput. Use dynamodbOutputEventIdentifiers instead
  2. Upload file to S3 bucket by batchscript or upload to S3 bucket directly
    #!/bin/bash 
    set -u 
    
    localPath="/home/dogsrcute/Programming mint/Fixed_Integrationtest/PluemDev/paginate/2stages" 
    bucketName=s3://integrationtest-config-us-east-2/test_config/mintDev/fixed/PluemDev/2stages/ 
    
    aws s3 cp "$localPath" "$bucketName" --recursive
    
    • localPath is part to files for upload
    • bucketName is your bucket

Type of parameter

Parameter type for create property in events.json
object: { 
	forStageMatching: true, 
	properties: {} 
}, 
array: { 
	forStageMatching: true, 
	eventValue: [] 
}, 
number: { 
	forStageMatching: true, 
	value: 1111 
}, 
string: { 
	forStageMatching: true, 
	value: "hi" 
}, 
boolean: { 
	forStageMatching: true, 
	value: true 
} 

// Case empty 
EmptyString:{ 
	value: "" 
}, 
EmptyArray:{ 
	forStageMatching: true, 
	eventValue: [] 
}, 
EmptyObject:{ 
	forStageMatching: true, 
	value: {} 
}

Test

  1. create params for invoke IntTestingTestInitiateIntegrationTestHdrInv function
    { 
    	"serviceName": "ComplexFilter",  
    	"resourceType": "Lambda",  
    	"resourceName": "ProcessComplexFilterHdrSqs",  
    	"integrationTestTags": [ 
    		"test_S3_ByDev"  
    	],  
    	"bucketName": "integrationtest-config-us-east-2",  
    	"bucketPrefix":[  
    		"test_config/mintDev/basicCase/", 
    		"test_config/mintDev/SharedResource/"  
    	]  
    }
    
  2. Find results in IntTestingTestTestRecord table

Working documents

Working_documents - Developer guide for making Integration Tests