'람바다 파스타 만들어요?'
15238 단어 awsprogramminglambdatesting
람바다 스파게티 문제.
지나치게 삶은 스파게티는 너의 스파게티를 끈적끈적하게 만들 것이다.Lambda 함수를 전체로 실행하면 전체가 됩니다.
작성된 Lambda 코드의 길이가 약 세 개의 논리 단계를 초과하면 한 함수에서 인코딩해서는 안 됩니다!이것은 코드급의 단일 프로그래밍이므로 각 부분은 분리해야 한다.왜 그런지 알려줄게.
이 작은 바위의 설명도를 보세요.
모든 함수를 동시에 테스트할 수 있기 때문에 긴밀하게 결합됩니다.전체 블록 (lambda 프로세서) 을 테스트하고 오류를 얻으면, 프로그램의 어느 부분에서 오류가 발생했는지 알 수 없습니다.또한 Lambda 컴퓨팅 리소스를 시뮬레이션해야 합니다.lambci 또는 sam-cli를 사용하여 로컬에서 이 자원을 시뮬레이션할 수 있습니다.그러나 이것은 보통 로컬에서 docker 용기를 실행하는 것과 관련이 있으며, 이것은 시간을 증가시키고 추가 로컬 계산 자원을 소모할 수 있다.
솔루션의 첫 번째 섹션은 Lambda 리소스 없이 Lambda 함수를 실행하는 것입니다.
빠르고 간단한 테스트를 위해 Lambda 리소스/환경 없이 코드를 직접 호출할 수 있습니다.
구렁이
작은 Lambda python 함수가 있습니다.
import json
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
그것을 호출하고 되돌아오는 값을 얻으려면 작은 스크립트 "call.py"만 필요합니다.import index
ret = index.lambda_handler("","")
print(ret)
그것을 실행하면 다음과 같은 결과를 얻을 수 있습니다.python call.py
{'statusCode': 200, 'body': '"Hello from Lambda!"'}
그뿐이야, 용기는 필요 없어!이는 serverless invoke local의 서버 프레임워크 없음과 같습니다.
새끼양 없는 자바스크립트
exports.handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(event.key1),
};
console.log(extract.extract(event))
return response;
};
Lambda 프로세서입니다.'use strict';
const fs = require('fs');
const lambda = require('./lambda')
let rawdata = fs.readFileSync('event.json');
let event= JSON.parse(rawdata);
lambda.handler(event);
이 코드를 사용하여 프로세서를 호출할 수 있습니다.수신 이벤트를 로컬 파일로 저장하면 직접 매개 변수로 사용할 수 있습니다.나중에 자세히 설명할게요.해결 방안의 두 번째 부분은 독립 테스트 함수 중의 방법이다
만약 우리가 Lambda 함수를 가지고 계산한다면Body Mass Index.Lambda 분식을 사용하면 계산을 프로세서에 직접 쓸 수 있습니다.
더 좋은 방법은 별도로 테스트할 수 있는 작은 모듈을 작성하는 것입니다.
function bmi(age, weight, height) {
height_m = height/100;
bmi = weight / (height_m * height_m);
bmi = Math.round(bmi);
return bmi;
}
module.exports = bmi;
bmi.js
lambda 프로세서에서 다음 메서드를 호출할 수 있습니다.const bmi=require('./bmi');
// Handler
exports.handler = async function(event, context) {
age = event.age;
weight= event.weight;
height= event.height;
return bmi(age, weight, height);
}
index.js
현재, 이 bmi 함수를 독립적으로 호출하고 테스트하거나, 단원 테스트를 더 잘 작성할 수 있습니다.const bmi = require('./bmi');
test("Bmi Übergewicht", () => {
expect(bmi(42,113,188)).toBe(32);
});
이 예는 jest 테스트 프레임워크를 사용하여 완성합니다.파이썬 테스트
samecan은python으로 실현할 수 있습니다. 예를 들어 pytest
테스트하러 가다
자세한 내용은 go-on-aws
어떻게 실제 테스트 데이터를 얻습니까?
방법을 테스트하려면 함수에 테스트 매개 변수를 제공해야 합니다.AWS의 Lambda 함수는 JSON 이벤트를 통해 호출됩니다.어떻게 이 데이터를 얻습니까?
json 이벤트 가져오기
비결은 덤프 함수를 먼저 쓴 다음 이렇게 데이터를 저장하는 것이다.
exports.handler = async (event) => {
console.log(JSON.stringify(event))
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda '),
};
return response;
};
AWS API 호출에서 테스트 데이터 가져오기
AWS 호출의 경우 AWS CLI를 사용하여 API를 호출하고 JSON을 파일로 저장할 수 있습니다.
예를 들어, 설명 인스턴스 API를 호출하려면 다음과 같이 하십시오.
aws ec2 describe-instances >event.json
테스트 수준
너의 테스트 개념은 부작용이 없는 특정한 기능을 테스트하는 것을 확보해야 한다.당신은 실제 생산 환경에 가까운 곳에서 테스트를 진행할 수 있습니다.
워크스테이션에서 로컬로 Lambda 함수를 실행하면 이러한 작업은 전체적으로 수행되지 않습니다.
특정 기능 테스트
이것은 단지 그것이 효과가 있는지 없는지를 시험하기 위해서이다.
Lambda를 하나로 테스트합니다.
'모든 것이 협동하여 일할 수 있다'와'그것이 실제 환경에서 일하는가'를 시험하기 위해서다.
/tmp
공간 요약
비전체식이나 비이태리 국수식 프로그래밍을 시작하려면 학습 곡선을 피하려면 단원 테스트와 테스트 프레임워크부터 시작할 필요가 없다.lambda 프로세서에서 방법을 재구성하고 하나씩 호출하기만 하면 됩니다.이렇게 하면, 당신은 더욱 좋은 코드를 작성할 것입니다.
나는 네가 일부 식욕을 돋우는 요리를 가지고 단원 테스트를 하기를 바란다. 로컬에서 전체 lambda를 실행하는 것이 아니라!그러니 트위터에서 저를 팔로우하고 GO-on-AWS 사이트를 방문해 주십시오. 아직 그렇게 하지 않으셨다면:).
피드백 및 토론
토론이 필요하시면 트위터에 연락 주세요.
더 알아보기
AWS에서 GOLANG을 사용하는 것에 대해 더 알고 싶으세요? -AWS에서 학습: here
Reference
이 문제에 관하여('람바다 파스타 만들어요?'), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-builders/do-you-do-lambda-spaghetti-4ofl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)