Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan integrasi layanan tiruan untuk pengujian di Step Functions Local
Di Step Functions Local, Anda dapat menguji jalur eksekusi mesin status Anda tanpa benar-benar memanggil layanan terintegrasi dengan menggunakan integrasi layanan tiruan. Untuk mengonfigurasi mesin status Anda agar menggunakan integrasi layanan tiruan, Anda membuat file konfigurasi tiruan. Dalam file ini, Anda mendefinisikan output yang diinginkan dari integrasi layanan Anda sebagai respons yang diejek dan eksekusi yang menggunakan respons tiruan Anda untuk mensimulasikan jalur eksekusi sebagai kasus uji.
Dengan menyediakan file konfigurasi tiruan ke Step Functions Local, Anda dapat menguji panggilan integrasi layanan dengan menjalankan state machine yang menggunakan respons tiruan yang ditentukan dalam kasus pengujian alih-alih membuat panggilan integrasi layanan yang sebenarnya.
catatan
Jika Anda tidak menentukan respons integrasi layanan tiruan dalam file konfigurasi tiruan, Step Functions Local akan memanggil integrasi AWS layanan menggunakan titik akhir yang Anda konfigurasikan saat menyiapkan Step Functions Local. Untuk informasi tentang mengonfigurasi titik akhir untuk Step Functions Local, lihat. Mengatur Opsi Konfigurasi untuk Step Functions Lokal
Topik ini menggunakan beberapa konsep yang didefinisikan dalam daftar berikut:
Integrasi Layanan Mocked - Mengacu pada status Tugas yang dikonfigurasi untuk menggunakan respons yang diejek alih-alih melakukan panggilan layanan yang sebenarnya.
Respons Mocked - Mengacu pada data tiruan yang status Tugas dapat dikonfigurasi untuk digunakan.
Kasus Uji - Mengacu pada eksekusi mesin status yang dikonfigurasi untuk menggunakan integrasi layanan tiruan.
File Konfigurasi Mock - Mengacu pada file konfigurasi tiruan yang berisiJSON, yang mendefinisikan integrasi layanan tiruan, respons yang diejek, dan kasus uji.
Mengkonfigurasi integrasi layanan yang diejek
Anda dapat mengejek integrasi layanan apa pun menggunakan Step Functions Local. Namun, Step Functions Local tidak memaksakan tiruan menjadi sama dengan aslinya. APIs Tugas yang diejek tidak akan pernah memanggil titik akhir layanan. Jika Anda tidak menentukan respons yang diejek, Tugas akan mencoba memanggil titik akhir layanan. Selain itu, Step Functions Local akan secara otomatis menghasilkan token tugas saat Anda mengejek Task menggunakan. .waitForTaskToken
Langkah 1: Tentukan Integrasi Layanan Mocked dalam File Konfigurasi Mock
Anda dapat menguji Step Functions AWS SDK dan integrasi layanan yang dioptimalkan menggunakan Step Functions Local. Gambar berikut menunjukkan mesin status yang ditentukan dalam tab Definisi mesin Negara:
![Contoh integrasi layanan yang diejek.](images/msi-graph.png)
Untuk melakukan ini, Anda harus membuat file konfigurasi tiruan yang berisi bagian seperti yang didefinisikan dalamStruktur file konfigurasi tiruan.
-
Buat file bernama
MockConfigFile.json
untuk mengonfigurasi pengujian dengan integrasi layanan tiruan.Contoh berikut menunjukkan file konfigurasi tiruan yang mereferensikan mesin negara dengan dua status yang ditentukan bernama
LambdaState
dan.SQSState
Anda dapat menjalankan definisi mesin
LambdaSQSIntegration
status yang direferensikan dalam file konfigurasi tiruan menggunakan salah satu kasus uji berikut:-
HappyPath
- Tes ini mengolok-olok outputLambdaState
danSQSState
menggunakanMockedLambdaSuccess
danMockedSQSSuccess
masing-masing.-
LambdaState
Akan mengembalikan nilai berikut:"0":{ "Return":{ "StatusCode":200, "Payload":{ "StatusCode":200, "body":"Hello from Lambda!" } } }
-
SQSState
Akan mengembalikan nilai berikut:"0":{ "Return":{ "MD5OfMessageBody":"3bcb6e8e-7h85-4375-b0bc-1a59812c6e51", "MessageId":"3bcb6e8e-8b51-4375-b0bc-1a59812c6e51" } }
-
-
RetryPath
- Tes ini mengolok-olok outputLambdaState
danSQSState
menggunakanMockedLambdaRetry
danMockedSQSSuccess
masing-masing. Selain itu,LambdaState
dikonfigurasi untuk melakukan empat upaya coba lagi. Tanggapan yang diejek untuk upaya ini didefinisikan dan diindeks di negara bagian.MockedLambdaRetry
-
Upaya awal berakhir dengan kegagalan tugas yang berisi pesan penyebab dan kesalahan seperti yang ditunjukkan pada contoh berikut:
"0":{ "Throw": { "Error": "Lambda.ResourceNotReadyException", "Cause": "Lambda resource is not ready." } }
-
Upaya percobaan ulang pertama dan kedua diakhiri dengan kegagalan tugas yang berisi pesan penyebab dan kesalahan seperti yang ditunjukkan pada contoh berikut:
"1-2":{ "Throw": { "Error": "Lambda.TimeoutException", "Cause": "Lambda timed out." } }
-
Upaya coba lagi ketiga diakhiri dengan keberhasilan tugas yang berisi hasil status dari bagian Payload dalam respons Lambda yang diejek.
"3":{ "Return": { "StatusCode": 200, "Payload": { "StatusCode": 200, "body": "Hello from Lambda!" } } }
catatan
Untuk status dengan kebijakan coba lagi, Step Functions Local akan menghabiskan upaya percobaan ulang yang ditetapkan dalam kebijakan hingga menerima respons yang berhasil. Ini berarti bahwa Anda harus menunjukkan ejekan untuk percobaan ulang dengan nomor percobaan berturut-turut dan harus mencakup semua upaya coba lagi sebelum mengembalikan respons yang berhasil.
Jika Anda tidak menentukan respons yang diejek untuk upaya coba lagi tertentu, misalnya, coba lagi “3", eksekusi mesin status akan gagal.
-
-
HybridPath
- Tes ini mengolok-olok output dari.LambdaState
Setelah berhasilLambdaState
berjalan dan menerima data tiruan sebagai respons,SQSState
melakukan panggilan layanan aktual ke sumber daya yang ditentukan dalam produksi.
Untuk informasi tentang cara memulai eksekusi pengujian dengan integrasi layanan tiruan, lihat. Langkah 3: Jalankan Tes Integrasi Layanan Mocked
-
Pastikan bahwa struktur respons yang diejek sesuai dengan struktur respons layanan aktual yang Anda terima saat Anda melakukan panggilan layanan terintegrasi. Untuk informasi tentang persyaratan struktural untuk tanggapan yang diejek, lihatMengkonfigurasi integrasi layanan yang diejek.
Dalam contoh file konfigurasi tiruan sebelumnya, respons tiruan didefinisikan
MockedLambdaSuccess
danMockedLambdaRetry
sesuai dengan struktur respons aktual yang dikembalikan dari panggilan.HelloFromLambda
penting
AWS tanggapan layanan dapat bervariasi dalam struktur antara layanan yang berbeda. Step Functions Local tidak memvalidasi jika struktur respons tiruan sesuai dengan struktur respons layanan yang sebenarnya. Anda harus memastikan bahwa tanggapan ejekan Anda sesuai dengan respons aktual sebelum pengujian. Untuk meninjau struktur respons layanan, Anda dapat melakukan panggilan layanan aktual menggunakan Step Functions atau melihat dokumentasi untuk layanan tersebut.
Langkah 2: Berikan File Konfigurasi Mock ke Step Functions Local
Anda dapat menyediakan file konfigurasi tiruan ke Step Functions Local dengan salah satu cara berikut:
Langkah 3: Jalankan Tes Integrasi Layanan Mocked
Setelah Anda membuat dan menyediakan file konfigurasi tiruan ke Step Functions Local, jalankan state machine yang dikonfigurasi dalam file konfigurasi tiruan menggunakan integrasi layanan tiruan. Kemudian periksa hasil eksekusi menggunakan API tindakan.
-
Buat mesin status berdasarkan definisi yang disebutkan sebelumnya dalam file konfigurasi tiruan.
aws stepfunctions create-state-machine \ --endpoint http://localhost:8083 \ --definition "{\"Comment\":\"Thisstatemachineiscalled:LambdaSQSIntegration\",\"StartAt\":\"LambdaState\",\"States\":{\"LambdaState\":{\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::lambda:invoke\",\"Parameters\":{\"Payload.$\":\"$\",\"FunctionName\":\"arn:aws:lambda:us-east-1:123456789012:function:HelloWorldFunction\"},\"Retry\":[{\"ErrorEquals\":[\"States.ALL\"],\"IntervalSeconds\":2,\"MaxAttempts\":3,\"BackoffRate\":2}],\"Next\":\"SQSState\"},\"SQSState\":{\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::sqs:sendMessage\",\"Parameters\":{\"QueueUrl\":\"https://sqs.us-east-1.amazonaws.com/123456789012/myQueue\",\"MessageBody.$\":\"$\"},\"End\":true}}}" \ --name "LambdaSQSIntegration" --role-arn "arn:aws:iam::123456789012:role/service-role/LambdaSQSIntegration"
-
Jalankan mesin status menggunakan integrasi layanan tiruan.
Untuk menggunakan file konfigurasi tiruan, lakukan
StartExecution
API panggilan pada mesin status yang dikonfigurasi dalam file konfigurasi tiruan. Untuk melakukan ini, tambahkan sufiks,#
, ke mesin negara yang ARN digunakan oleh.test_name
StartExecution
adalah kasus uji, yang dikonfigurasi untuk mesin status dalam file konfigurasi tiruan yang sama.test_name
Perintah berikut adalah contoh yang menggunakan
LambdaSQSIntegration
state machine dan konfigurasi tiruan. Dalam contoh ini, mesinLambdaSQSIntegration
status dijalankan menggunakanHappyPath
pengujian yang didefinisikan dalamLangkah 1: Tentukan Integrasi Layanan Mocked dalam File Konfigurasi Mock.HappyPath
Pengujian berisi konfigurasi untuk eksekusi untuk menangani panggilan integrasi layanan tiruan yang dilakukanLambdaState
danSQSState
status menggunakan respons layanan yang diejekMockedLambdaSuccess
danMockedSQSSuccess
diejek.aws stepfunctions start-execution \ --endpoint http://localhost:8083 \ --name executionWithHappyPathMockedServices \ --state-machine arn:aws:states:us-east-1:123456789012:stateMachine:LambdaSQSIntegration#HappyPath
Lihat respons eksekusi mesin status.
Respons terhadap panggilan
StartExecution
menggunakan uji integrasi layanan tiruan sama dengan respons terhadap panggilanStartExecution
secara normal, yang mengembalikan eksekusi ARN dan tanggal mulai.Berikut ini adalah contoh respons untuk memanggil
StartExecution
menggunakan uji integrasi layanan tiruan:{ "startDate":"2022-01-28T15:03:16.981000-05:00", "executionArn":"arn:aws:states:us-east-1:123456789012:execution:LambdaSQSIntegration:executionWithHappyPathMockedServices" }
Periksa hasil eksekusi dengan membuat
ListExecutions
,DescribeExecution
, atauGetExecutionHistory
API panggilan.aws stepfunctions get-execution-history \ --endpoint http://localhost:8083 \ --execution-arn arn:aws:states:us-east-1:123456789012:execution:LambdaSQSIntegration:executionWithHappyPathMockedServices
Contoh berikut menunjukkan bagian dari respon untuk memanggil
GetExecutionHistory
menggunakan eksekusi ARN dari contoh respon yang ditunjukkan pada langkah 2. Dalam contoh ini, output dariLambdaState
danSQSState
adalah data tiruan yang didefinisikan dalamMockedLambdaSuccess
danMockedSQSSuccess
dalam file konfigurasi tiruan. Selain itu, data tiruan digunakan dengan cara yang sama seperti data yang dikembalikan dengan melakukan panggilan integrasi layanan aktual akan digunakan. Juga, dalam contoh ini, output dariLambdaState
diteruskan keSQSState
sebagai input.{ "events": [ ... { "timestamp": "2021-12-02T19:39:48.988000+00:00", "type": "TaskStateEntered", "id": 2, "previousEventId": 0, "stateEnteredEventDetails": { "name": "LambdaState", "input": "{}", "inputDetails": { "truncated": false } } }, ... { "timestamp": "2021-11-25T23:39:10.587000+00:00", "type": "LambdaFunctionSucceeded", "id": 5, "previousEventId": 4, "lambdaFunctionSucceededEventDetails": { "output": "{\"statusCode\":200,\"body\":\"\\\"Hello from Lambda!\\\"\"}", "outputDetails": { "truncated": false } } }, ... "timestamp": "2021-12-02T19:39:49.464000+00:00", "type": "TaskStateEntered", "id": 7, "previousEventId": 6, "stateEnteredEventDetails": { "name": "SQSState", "input": "{\"statusCode\":200,\"body\":\"\\\"Hello from Lambda!\\\"\"}", "inputDetails": { "truncated": false } } }, ... { "timestamp": "2021-11-25T23:39:10.652000+00:00", "type": "TaskSucceeded", "id": 10, "previousEventId": 9, "taskSucceededEventDetails": { "resourceType": "sqs", "resource": "sendMessage", "output": "{\"MD5OfMessageBody\":\"3bcb6e8e-7h85-4375-b0bc-1a59812c6e51\",\"MessageId\":\"3bcb6e8e-8b51-4375-b0bc-1a59812c6e51\"}", "outputDetails": { "truncated": false } } }, ... ] }