2

我有一個nodejs基於expressjs的應用程序,我正在使用gruntjs作爲任務運行程序和mochajs作爲測試框架進行測試。因此,我編寫了組件,集成和單元測試,這些測試通過grunt test執行,或者直接通過mocha test/component/v1/apiX在本地開發時執行,並在部署過程中作爲CI過程的一部分部署在測試VM上。無服務器AWS Lambda Express應用程序中的摩卡測試

現在,當考慮將此應用程序移動到AWS Lambda時,會想到以下有關我的測試和CI過程的問題(請注意,我將使用aws-serverless-express,因此不必明確寫入lambda函數):

1)如何實現通過HTTP API請求完成的組件/ e2e測試?

2)如何實現集成&單元測試,只有加載&測試應用程序的一部分?

3)如何將兩者都與新的CI流程集成,如果任何測試失敗,拒絕部署?

我認爲問題1)主要解決了:有許多方法可以從外部測試AWS Lambda。您可以執行lambda-to-lambda測試,從測試lambda直接調用您的lambda-to-test,也可以使用來自test-lambda的HTTP通過AWS API Gateway調用lambda-to-test,如here所述。您也可以使用serverless-mocha-plugin進行本地lambda測試(如果使用serverless)。

它是2)它變得有趣:一旦你的lambda部署它是一個黑匣子。你不能執行任何沒有明確聲明爲lambda接口的東西。我如何保存或重新實施我現有的摩卡咖啡單元&集成測試?

與3相同):如何使您的CI運行全部如果部署和拒絕部署失敗,則測試如何?

這裏是我自己的方法:只有在測試環境中,我才能使我的節點應用程序無服務器。簡單地讓它作爲經典節點HTTP服務工作,通過使所有無服務器更改有條件取決於環境。由於幾乎沒有變化,所以這應該是可能的和可維護的。現在,我可以像往常一樣在當地運行測試,並使用grunt和mocha進行部署。然後,如果我想確認無服務器版本也可以,我仍然可以進行最終的lambda-to-lambda測試。

+1

之前我已經使用過[lambCI](https://medium.com/@hichaelmart/lambci-4c3e29d6599b#.r08k0vlnh)這種事情。我認爲閱讀那篇文章可以幫助你理解作者的所有想法(非常接近你)以及他發現的限制 - 例如,lambda 300秒生命週期,沒有碼頭支持等等...... – MarcoL

+0

謝謝我會看一看! –

回答

1

你的方法聽起來不錯。至於3你可以有你的CI運行在本地測試,部署到「開發」或「測試」環境和運行lambdaTests

grunt # run grunt commands including local mocha tests 
serverless deploy --stage test # deploy to test environment (serverless#1.0 syntax) 
grunt lambdaTest 

你需要確保lambdaTest命令處理失敗拋出錯誤時,一個lambda請求失敗或返回意外的值。

+0

感謝您的反饋,這對我來說也是有效的 –