ሰላም ሁላችሁም። ዛሬ የጽሁፉን የመጨረሻ ክፍል እናካፍላችኋለን። በተለይ ለኮርስ ተማሪዎች የተዘጋጀው ትርጉም .

የማሰማራት ሙከራ
ይህ የፈተና ስልት ኃይለኛ አቀራረብ ሲሆን የመሠረተ ልማት ህጋችንን ውስጣዊ አሠራር ለመፈተሽ የነጭ ሳጥን ሙከራን እንድናደርግ ያስችለናል. ነገር ግን፣ ልንፈትነው የምንችለውን በመጠኑ ይገድባል። ፈተናዎቹ የሚከናወኑት ከትክክለኛው ስራ በፊት በፑሉሚ በተፈጠረው የማህደረ ትውስታ ማሰማራት እቅድ መሰረት ነው እና ስለዚህ ማሰማራቱ በራሱ መሞከር አይቻልም። ለእንደዚህ አይነት ጉዳዮች ፑሉሚ የውህደት ሙከራ ማዕቀፍ አለው። እና እነዚህ ሁለት አቀራረቦች አብረው በጣም ጥሩ ይሰራሉ!
የፑሉሚ ውህደት ሙከራ ማዕቀፍ በ Go ውስጥ ተጽፏል፣ ይህም አብዛኛውን የውስጥ ኮድችንን የምንፈትሽበት መንገድ ነው። ቀደም ሲል የተወያየው የአሃድ ሙከራ አካሄድ ልክ እንደ ነጭ ሳጥን ሙከራ ቢሆንም፣ የውህደት ሙከራ ጥቁር ሳጥን ነው። (ለጠንካራ የውስጥ ሙከራ አማራጮችም አሉ።) ይህ ማዕቀፍ የተፈጠረው ሙሉ የፑሉሚ ፕሮግራምን ለመውሰድ እና የተለያዩ የህይወት ኡደት ስራዎችን ለመስራት ነው ለምሳሌ አዲስ ቁልል ከባዶ ማሰማራት፣ በልዩነቶች ማዘመን እና መሰረዝ፣ ምናልባትም ብዙ ጊዜ። . በመደበኛነት (ለምሳሌ በምሽት) እና እንደ ጭንቀት ፈተናዎች እናካሂዳቸዋለን።
(እኛ ተመሳሳይ የውህደት ሙከራ ችሎታዎች በቋንቋዎች ቤተኛ ኤስዲኬ ይገኛሉ። የፑሉሚ ፕሮግራምዎ የተጻፈበት ቋንቋ ምንም ይሁን ምን የ Go ውህደት ሙከራ ማዕቀፍን መጠቀም ይችላሉ።
ይህንን ማዕቀፍ በመጠቀም ፕሮግራሙን በማሄድ የሚከተሉትን ማረጋገጥ ይችላሉ-
- የእርስዎ የፕሮጀክት ኮድ በአገባብ ትክክል ነው እና ያለ ስህተቶች ይሰራል።
- ቁልል እና ሚስጥሮች የውቅር ቅንጅቶች ይሰራሉ እና በትክክል ይተረጎማሉ።
- የእርስዎ ፕሮጀክት በተሳካ ሁኔታ በመረጡት የደመና አቅራቢ ውስጥ ሊሰማራ ይችላል።
- ፕሮጀክትዎ በተሳካ ሁኔታ ከመጀመሪያው ሁኔታ ወደ ኤን ሌሎች ግዛቶች ሊሻሻል ይችላል።
- ፕሮጀክትዎ በተሳካ ሁኔታ ከደመና አቅራቢዎ ሊጠፋ እና ሊወገድ ይችላል።
በቅርቡ እንደምንመለከተው፣ ይህ ማዕቀፍ የሩጫ ጊዜ ማረጋገጫን ለማከናወንም ጥቅም ላይ ሊውል ይችላል።
ቀላል ውህደት ሙከራ
ይህንን በተግባር ለማየት፣ ማከማቻውን እንመለከታለን pulumi/examplesቡድናችን እና የፑሉሚ ማህበረሰብ የራሳችንን የመሳብ ጥያቄዎችን፣ ቁርጠኞችን እና የማታ ግንባታዎችን ለመፈተሽ እንደሚጠቀሙበት።
ከዚህ በታች ቀለል ያለ የኛ ፈተና አለ። :
example_test.go፡
package test
import (
"os"
"path"
"testing"
"github.com/pulumi/pulumi/pkg/testing/integration"
)
func TestExamples(t *testing.T) {
awsRegion := os.Getenv("AWS_REGION")
if awsRegion == "" {
awsRegion = "us-west-1"
}
cwd, _ := os.Getwd()
integration.ProgramTest(t, &integration.ProgramTestOptions{
Quick: true,
SkipRefresh: true,
Dir: path.Join(cwd, "..", "..", "aws-js-s3-folder"),
Config: map[string]string{
"aws:region": awsRegion,
},
})
} ይህ ፈተና የአቃፊ ቁልል በመፍጠር፣ በማሻሻል እና በማጥፋት መሰረታዊ የህይወት ኡደት ውስጥ ያልፋል aws-js-s3-folder. ያለፈውን ፈተና ሪፖርት ለማድረግ አንድ ደቂቃ ያህል ይወስዳል፡-
$ go test .
PASS
ok ... 43.993s የእነዚህን ሙከራዎች ባህሪ ለማበጀት ብዙ አማራጮች አሉ። ሙሉ የአማራጮች ዝርዝር ይመልከቱ። ProgramTestOptions. ለምሳሌ፣ ለመከታተል የጃገርን የመጨረሻ ነጥብ ማዋቀር ይችላሉ (Tracingፈተናው አሉታዊ ከሆነ ፈተናው ይወድቃል ብለው እንደሚጠብቁ ያመልክቱ (ExpectFailure)፣ ተከታታይ የግዛቶች ሽግግር ለማድረግ ተከታታይ “አርትዖቶችን” በፕሮግራሙ ላይ ይተግብሩ (EditDirs) እና ብዙ ተጨማሪ. የማመልከቻዎን ዝርጋታ ለመፈተሽ እንዴት እንደሚጠቀሙባቸው እንይ።
የንብረት ንብረቶችን በመፈተሽ ላይ
ከላይ የተብራራው ውህደት ፕሮግራማችን "እንደሚሰራ" ያረጋግጣል - አይበላሽም. ነገር ግን የተገኘውን ቁልል ባህሪያት መፈተሽ ብንፈልግስ? ለምሳሌ፣ አንዳንድ የሀብቶች ዓይነቶች ተሰጥተው (ወይም ያልተገኙ) እና የተወሰኑ ባህሪዎች አሏቸው።
መለኪያ ExtraRuntimeValidation ለ ProgramTestOptions ተጨማሪ ቼኮች ማድረግ እንድንችል በፑሉሚ የተቀዳውን የድህረ-ስምሪት ሁኔታ እንድንመለከት ያስችለናል። ይህ ውቅረትን፣ ወደ ውጭ የሚላኩ የውጤት እሴቶችን፣ ሁሉንም ሀብቶች እና የንብረት እሴቶቻቸውን እና በንብረቶች መካከል ያሉ ጥገኞችን ጨምሮ የውጤቱ ቁልል ሁኔታ ሙሉ ቅጽበታዊ እይታን ያካትታል።
የዚህን መሰረታዊ ምሳሌ ለማየት ፕሮግራማችን አንድ መፈጠሩን እንፈትሽ S3 ባልዲ:
integration.ProgramTest(t, &integration.ProgramTestOptions{
// as before...
ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) {
var foundBuckets int
for _, res := range stack.Deployment.Resources {
if res.Type == "aws:s3/bucket:Bucket" {
foundBuckets++
}
}
assert.Equal(t, 1, foundBuckets, "Expected to find a single AWS S3 Bucket")
},
})አሁን፣ go test ን ስናካሂድ የህይወት ዑደት ሙከራዎችን በባትሪ ማለፍ ብቻ ሳይሆን፣ ቁልል በተሳካ ሁኔታ ካሰማራ በኋላ በተፈጠረው ሁኔታ ላይ ተጨማሪ ፍተሻ ያደርጋል።
የሩጫ ጊዜ ሙከራዎች
እስካሁን ድረስ ሁሉም ሙከራዎች ስለ ማሰማራት ባህሪ እና የፑሉሚ ምንጭ ሞዴል ብቻ ናቸው። የእርስዎ አቅርቦት መሠረተ ልማት በትክክል እንደሚሰራ ማረጋገጥ ከፈለጉስ? ለምሳሌ, ቨርቹዋል ማሽኑ እየሰራ ነው, S3 ባልዲው የምንጠብቀውን እና የመሳሰሉትን ይዟል.
ይህንን እንዴት እንደሚያደርጉ አስቀድመው ገምተው ይሆናል፡ አማራጭ ExtraRuntimeValidation ለ ProgramTestOptions - ይህ ለዚህ ትልቅ እድል ነው. በዚህ ጊዜ፣ የፕሮግራምህን ሀብቶች ሙሉ ሁኔታ በመዳረስ ብጁ የGo ሙከራን ታካሂዳለህ። ይህ ሁኔታ እንደ ቨርቹዋል ማሽን አይፒ አድራሻዎች፣ ዩአርኤሎች እና ከተፈጠረው የደመና አፕሊኬሽኖች እና መሠረተ ልማት ጋር ለመግባባት የሚያስፈልጉትን ነገሮች ሁሉ ያካትታል።
ለምሳሌ የኛ የሙከራ ፕሮግራም ንብረቱን ወደ ውጭ ይልካል። webEndpoint ባልዲ ተጠርቷል websiteUrlየተዋቀረውን የምናገኝበት ሙሉ ዩአርኤል ነው። index document. ለማግኘት የግዛቱን ፋይል ብንቆፍርም። bucket እና ያንን ንብረት በቀጥታ አንብብ፣ ነገር ግን በብዙ አጋጣሚዎች ቁልሎቻችን እንደዚህ ያሉ ጠቃሚ ንብረቶችን ወደ ውጭ መላክ እና ለመፈተሽ ለመጠቀም ምቹ ሆኖ አግኝተናል፡-
integration.ProgramTest(t, &integration.ProgramTestOptions{
// as before ...
ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) {
url := "http://" + stack.Outputs["websiteUrl"].(string)
resp, err := http.Get(url)
if !assert.NoError(t, err) {
return
}
if !assert.Equal(t, 200, resp.StatusCode) {
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if !assert.NoError(t, err) {
return
}
assert.Contains(t, string(body), "Hello, Pulumi!")
},
}) ልክ እንደቀደምት የሩጫ ጊዜ ቼኮች፣ ይህ ቼክ ቁልል ከተነሳ በኋላ ወዲያውኑ ይፈጸማል፣ ሁሉም ለቀላል ጥሪ ምላሽ ነው። go test. እና ያ የበረዶ ግግር ጫፍ ብቻ ነው - እያንዳንዱ የ Go ሙከራ ባህሪ በኮድ ውስጥ ሊጽፉ ይችላሉ።
ቀጣይነት ያለው የመሠረተ ልማት ውህደት
ለኮድ ግምገማ ከማቅረቡ በፊት ለመፈተሽ ብዙ የመሠረተ ልማት ለውጦች ሲደረጉ በላፕቶፕ ላይ ሙከራዎችን ማካሄድ ጥሩ ነው። ግን እኛ እና ብዙ ደንበኞቻችን በተለያዩ የእድገት የህይወት ኡደት ደረጃዎች መሠረተ ልማትን እንሞክራለን።
- ከመዋሃድዎ በፊት በእያንዳንዱ ክፍት ለሙከራ ጥያቄ።
- ለእያንዳንዱ ቃል ምላሽ፣ ውህደቱ በትክክል መፈጸሙን በድጋሚ ለማረጋገጥ።
- በየጊዜው፣ ለምሳሌ በምሽት ወይም በየሳምንቱ ለተጨማሪ ምርመራ።
- እንደ የአፈጻጸም ወይም የጭንቀት ሙከራ አካል፣በተለምዶ ረዘም ላለ ጊዜ የሚሄድ እና በትይዩ ሙከራዎችን የሚያደርግ እና/ወይም ተመሳሳይ ፕሮግራም ብዙ ጊዜ ያሰማራል።
ለእያንዳንዳቸው ፑሉሚ ከሚወዱት ተከታታይ የውህደት ስርዓት ጋር መቀላቀልን ይደግፋል። በተከታታይ ውህደት፣ ይህ ለመሰረተ ልማትዎ ልክ እንደ መተግበሪያዎ ሶፍትዌር ተመሳሳይ የሙከራ ሽፋን ይሰጥዎታል።
ፑሉሚ ለጋራ CI ስርዓቶች ድጋፍ አለው. ከእነዚህ ውስጥ ጥቂቶቹ እነሆ፡-
ለበለጠ ዝርዝር መረጃ፣ እባክዎን ለ ሰነዶቹን ይመልከቱ .
Ephemeral አካባቢ
የሚከፈተው በጣም ኃይለኛ እድል ጊዜያዊ አካባቢዎችን ለተቀባይነት የሙከራ ዓላማዎች ብቻ ማሰማራት መቻል ነው። ጽንሰ-ሐሳብ ፑሉሚ በቀላሉ የተገለሉ እና ገለልተኛ አካባቢዎችን በቀላሉ ለማሰማራት እና ለማፍረስ የተነደፈ ነው፣ ሁሉም በጥቂት ቀላል የCLI ትዕዛዞች ወይም የውህደት ሙከራ ማዕቀፍን በመጠቀም።
GitHub የሚጠቀሙ ከሆነ፣ ከዚያ Pulumi ያቀርባል በ CI ቧንቧ መስመርዎ ውስጥ ጥያቄዎችን ለመሳብ የመቀበያ ሙከራን ለማገናኘት የሚረዳዎት። መተግበሪያውን በ GitHub ማከማቻ ውስጥ ብቻ ይጫኑ እና ፑሉሚ ስለ መሠረተ ልማት ቅድመ እይታዎች፣ ዝመናዎች እና የፈተና ውጤቶች መረጃን ወደ CI እና የመዋኛ ገንዳ ጥያቄዎች ያክላል፡

Pulumiን ለዋና ተቀባይነት ፈተናዎችዎ ሲጠቀሙ የቡድን ምርታማነትን የሚያሻሽሉ እና በለውጦችዎ ጥራት ላይ እምነት የሚሰጡ አዳዲስ አውቶሜሽን ችሎታዎችን ያገኛሉ።
ውጤቱ
በዚህ ጽሑፍ ውስጥ፣ አጠቃላይ ዓላማ ያላቸውን የፕሮግራም አወጣጥ ቋንቋዎችን በመጠቀም፣ አፕሊኬሽኖቻችንን ለማዘጋጀት ጠቃሚ የሆኑ ብዙ የሶፍትዌር ልማት ቴክኒኮች እንደሚገኙ አይተናል። የክፍል ሙከራን፣ የውህደት ሙከራን እና ሰፊ የሩጫ ጊዜ ሙከራን ለማከናወን እንዴት እንደሚሰሩ ያካትታሉ። ፈተናዎች በፍላጎት ወይም በእርስዎ CI ስርዓት ውስጥ ለመስራት ቀላል ናቸው።
ፑሉሚ - ክፍት ምንጭ ሶፍትዌር ፣ ለመጠቀም ነፃ እና ከሚወዷቸው የፕሮግራም ቋንቋዎች እና ደመናዎች ጋር ይሰራል - !
→
ምንጭ: hab.com
