Сайн уу. Өнөөдөр бид нийтлэлийнхээ эцсийн хэсгийг та бүхэнтэй хуваалцаж байна.
Байршуулах туршилт
Энэхүү туршилтын хэв маяг нь хүчирхэг арга бөгөөд бидэнд дэд бүтцийн кодын дотоод ажиллагааг шалгахын тулд цагаан хайрцагны тест хийх боломжийг олгодог. Гэсэн хэдий ч энэ нь бидний туршиж болох зүйлийг тодорхой хэмжээгээр хязгаарладаг. Туршилтыг Пулумигийн бодит байршуулалтаас өмнө бүтээсэн санах ойд байршуулах төлөвлөгөөнд үндэслэн гүйцэтгэдэг тул байршуулалтыг өөрөө шалгах боломжгүй юм. Ийм тохиолдлын хувьд Пулуми нь интеграцийн тестийн тогтолцоотой байдаг. Мөн эдгээр хоёр арга нь хамтдаа маш сайн ажилладаг!
Пулуми интеграцийн тестийн хүрээ нь Go программ дээр бичигдсэн бөгөөд ингэснээр бид дотоод кодын ихэнх хэсгийг туршиж үздэг. Өмнө нь хэлэлцсэн нэгжийн туршилтын арга нь цагаан хайрцагны тесттэй адил байсан бол интеграцийн тест нь хар хайрцаг юм. (Мөн нарийн дотоод шалгалт хийх сонголтууд байдаг.) Энэхүү хүрээ нь Пулуми программыг бүрэн авч, түүн дээр шинэ стекийг эхнээс нь байршуулах, өөрчлөлтөөр шинэчлэх, хэд хэдэн удаа устгах гэх мэт амьдралын мөчлөгийн янз бүрийн үйлдлүүдийг гүйцэтгэх зорилгоор бүтээгдсэн. . Бид тэдгээрийг тогтмол (жишээлбэл, шөнийн цагаар) болон стресс тест болгон ажиллуулдаг.
(Бид
Энэ хүрээг ашиглан програмыг ажиллуулснаар та дараахь зүйлийг шалгаж болно.
- Таны төслийн код синтаксийн хувьд зөв бөгөөд алдаагүй ажилладаг.
- Стек болон нууцын тохиргооны тохиргоонууд ажиллаж, зөв тайлбарлагддаг.
- Таны төслийг таны сонгосон үүлэн үйлчилгээ үзүүлэгч дээр амжилттай байрлуулж болно.
- Таны төслийг анхны төлөвөөс өөр N муж руу амжилттай сайжруулж болно.
- Таны төслийг амжилттай устгаж, үүлэн үйлчилгээ үзүүлэгчээс устгаж болно.
Бидний удахгүй харах болно, энэ хүрээг мөн ажиллах цагийн баталгаажуулалтыг хийхэд ашиглаж болно.
Энгийн интеграцийн тест
Үүнийг ажил хэрэг болгохын тулд бид агуулахыг харна 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
. Жишээлбэл, та Jaeger төгсгөлийн цэгийг мөрдөхийн тулд тохируулж болно (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 тестийг ажиллуулна. Энэ төлөвт виртуал машины IP хаягууд, URL хаягууд болон үүдэн программууд болон дэд бүтэцтэй бодитоор ажиллахад шаардлагатай бүх зүйл багтана.
Жишээлбэл, манай туршилтын хөтөлбөр нь үл хөдлөх хөрөнгийг экспортолдог webEndpoint
хувин дуудсан websiteUrl
, энэ нь бидний тохируулсан URL-ыг бүрэн дүүрэн авч болно 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 системийг дэмждэг. Тэдгээрийн заримыг энд харуулав.
Дэлгэрэнгүй мэдээллийг баримт бичигт хандана уу
Түр зуурын орчин
Нээлттэй маш хүчтэй боломж бол түр зуурын орчныг зөвхөн хүлээн авах туршилтын зорилгоор ашиглах чадвар юм. Үзэл баримтлал
Хэрэв та GitHub ашигладаг бол Пулуми санал болгодог
Та Пулуми-г үндсэн хүлээн авах шалгалтандаа ашиглах үед багийн бүтээмжийг дээшлүүлж, өөрчлөлтийн чанарт итгэх итгэлийг өгөх автоматжуулалтын шинэ чадавхийг олж авах болно.
Үр дүн
Энэ нийтлэлд бид ерөнхий зориулалтын програмчлалын хэлийг ашигласнаар программ хангамжийг хөгжүүлэхэд хэрэг болохуйц олон программ хангамж хөгжүүлэх арга техникийг ашиглах боломжтой болохыг олж харлаа. Эдгээрт нэгжийн туршилт, интеграцийн туршилт, өргөн хүрээтэй ажлын цагийг шалгахын тулд хэрхэн хамтран ажилладаг зэрэг орно. Туршилтыг хүсэлтээр эсвэл таны CI системд ажиллуулахад хялбар байдаг.
Пулуми - нээлттэй эхийн программ хангамж, ашиглахад үнэ төлбөргүй бөгөөд таны дуртай програмчлалын хэл, үүлтэй ажиллах боломжтой -
→
Эх сурвалж: www.habr.com