پلومي سان ڪوڊ جي طور تي انفراسٽرڪچر جي جانچ. حصو 2

هيلو سڀ. اڄ اسان توهان سان آرٽيڪل جو آخري حصو حصيداري ڪريون ٿا. "ٽيسٽنگ انفراسٹرڪچر جيئن پلومي سان ڪوڊ"، جنهن جو ترجمو خاص طور تي ڪورس جي شاگردن لاءِ تيار ڪيو ويو هو "DevOps طريقا ۽ اوزار".

پلومي سان ڪوڊ جي طور تي انفراسٽرڪچر جي جانچ. حصو 2

لڳائڻ جي جاچ

ٽيسٽنگ جو هي انداز هڪ طاقتور طريقو آهي ۽ اسان کي اجازت ڏئي ٿو ته وائيٽ باڪس ٽيسٽنگ کي جانچڻ لاءِ اسان جي انفراسٽرڪچر ڪوڊ جي اندروني ڪم کي جانچڻ لاءِ. بهرحال، اهو ڪجهه حد تائين محدود ڪري ٿو جيڪو اسان جانچ ڪري سگهون ٿا. ٽيسٽ اصل ڊيپلائيمينٽ کان اڳ پلومي پاران ٺاهيل ان-ميموري ڊيپلائيمينٽ پلان جي بنياد تي ڪيا ويندا آهن ۽ ان ڪري ڊيپلائيمينٽ پاڻ ٽيسٽ نه ٿي ڪري سگھجي. اهڙين حالتن لاء، پلومي هڪ انضمام ٽيسٽ فريم ورڪ آهي. ۽ اهي ٻه طريقا گڏجي ڪم ڪري رهيا آهن!

پلومي انٽيگريشن ٽيسٽنگ فريم ورڪ Go ۾ لکيو ويو آهي، جنهن کي اسين پنهنجي اندروني ڪوڊ جي اڪثر جانچ ڪندا آهيون. جڏهن ته اڳ ۾ بحث ٿيل يونٽ جي جاچ جو طريقو وڌيڪ وائٹ باڪس جي جاچ وانگر هو، انضمام جي جاچ هڪ بليڪ باڪس آهي. (سخت اندروني جاچ لاءِ اختيار پڻ آهن.) هي فريم ورڪ مڪمل پلومي پروگرام وٺڻ ۽ ان تي مختلف لائف سائيڪل آپريشن ڪرڻ لاءِ ٺاهيو ويو آهي، جيئن شروع کان نئين اسٽيڪ کي ترتيب ڏيڻ، ان کي مختلف تبديلين سان تازه ڪاري ڪرڻ، ۽ ان کي حذف ڪرڻ، ممڪن طور تي ڪيترائي ڀيرا. . اسان انهن کي باقاعده هلائيندا آهيون (مثال طور، رات جو) ۽ دٻاء جا امتحان طور.

(اسان اسان ان تي ڪم ڪري رهيا آهيون, ته جيئن هڪجهڙا انضمام جي جاچ جون صلاحيتون ٻولين جي SDK ۾ موجود آهن. توھان استعمال ڪري سگھوٿا گو انٽيگريشن ٽيسٽنگ فريم ورڪ بغير ڪنھن ٻولي جي جنھن ۾ توھان جو پليمي پروگرام لکيل آھي).

هن فريم ورڪ کي استعمال ڪندي پروگرام هلائڻ سان توهان هيٺ ڏنل چيڪ ڪري سگهو ٿا:

  • توھان جو پروجيڪٽ ڪوڊ نحوي طور تي صحيح آھي ۽ ھلندو آھي بغير نقصن جي.
  • اسٽيڪ ۽ رازن جي جوڙجڪ سيٽنگون ڪم ڪن ٿيون ۽ صحيح طور تي تشريح ٿيل آهن.
  • توھان جو منصوبو ڪاميابي سان توھان جي پسند جي بادل فراهم ڪندڙ ۾ ترتيب ڏئي سگھجي ٿو.
  • توھان جو پروجيڪٽ ڪاميابيءَ سان شروعاتي رياست کان N ٻين رياستن تائين اپ گريڊ ڪري سگھجي ٿو.
  • توھان جو پروجيڪٽ ڪاميابيءَ سان تباھ ٿي سگھي ٿو ۽ توھان جي بادل فراهم ڪندڙ کان هٽايو وڃي.

جيئن اسان جلد ڏسنداسين، هي فريم ورڪ پڻ استعمال ڪري سگهجي ٿو رن ٽائم جي تصديق ڪرڻ لاءِ.

سادي انضمام ٽيسٽ

ھن کي عمل ۾ ڏسڻ لاءِ، اسين ڏسنداسين مخزن pulumi/examples، جيئن اسان جي ٽيم ۽ پلومي ڪميونٽي ان کي استعمال ڪندي اسان جي پنهنجي پل جي درخواستن، ڪمنٽس، ۽ رات جي تعمير کي جانچڻ لاءِ.

هيٺ اسان جو هڪ آسان امتحان آهي مثال جيڪو S3 بالٽ ۽ ڪجهه ٻيون شيون مهيا ڪري ٿو:

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 end point to trace (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")
        },
    })

هاڻي، جڏهن اسان گو ٽيسٽ هلون ٿا، اهو نه صرف زندگي جي چڪر واري بيٽري جي ٽيسٽن مان گذرندو، پر پڻ، ڪاميابي سان اسٽيڪ کي ترتيب ڏيڻ کان پوء، اهو نتيجو رياست تي اضافي چيڪ ڪندو.

هلندڙ وقت جا امتحان

هينئر تائين، سڀئي تجربا خالص طور تي مقرري جي رويي ۽ پلومي وسيلن جي ماڊل بابت ڪيا ويا آهن. ڇا جيڪڏھن توھان تصديق ڪرڻ چاھيو ٿا ته توھان جو مهيا ڪيل انفراسٽرڪچر اصل ۾ ڪم ڪري ٿو؟ مثال طور، ته مجازي مشين هلائي رهي آهي، S3 بالٽ تي مشتمل آهي جيڪو اسان توقع ڪريون ٿا، وغيره.

توهان شايد اڳ ۾ ئي اندازو لڳايو هوندو ته هي ڪيئن ڪجي: آپشن ExtraRuntimeValidation لاء ProgramTestOptions - هن لاء هڪ بهترين موقعو آهي. هن موقعي تي، توهان هلائيندا آهيو هڪ ڪسٽم گو ٽيسٽ توهان جي پروگرام جي وسيلن جي مڪمل حالت تائين رسائي سان. ھن رياست ۾ معلومات شامل آھي جھڙوڪ ورچوئل مشين IP ايڊريس، URLs، ۽ ھر شيءِ جي ضرورت آھي اصل ۾ نتيجو ڪندڙ بادل ايپليڪيشنن ۽ انفراسٽرڪچر سان رابطو ڪرڻ لاءِ.

مثال طور، اسان جو امتحان پروگرام ملڪيت برآمد ڪري ٿو 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. ۽ اهو صرف آئس برگ جو ٽپ آهي- هر گو ٽيسٽ فيچر جيڪو توهان ڪوڊ ۾ لکي سگهو ٿا دستياب آهي.

مسلسل انفراسٹرڪچر انضمام

اهو سٺو آهي ته هڪ ليپ ٽاپ تي ٽيسٽ هلائڻ جي قابل ٿي وڃي جڏهن انهن کي ڪوڊ جي نظرثاني لاءِ جمع ڪرڻ کان پهريان انهن کي جانچڻ لاءِ تمام گهڻيون بنيادي تبديليون ڪيون وينديون آهن. پر اسان ۽ اسان جا ڪيترائي گراهڪ ترقي جي زندگيءَ جي مختلف مرحلن تي انفراسٽرڪچر کي جانچيندا آهيون:

  • ضم ٿيڻ کان پهريان جاچ لاءِ هر کليل پل جي درخواست ۾.
  • هر ڪم جي جواب ۾، ٻه ڀيرا چيڪ ڪرڻ لاء ته انضمام صحيح طريقي سان ڪيو ويو.
  • وقتي طور تي، جيئن رات جو يا هفتيوار اضافي جاچ لاءِ.
  • ڪارڪردگي يا دٻاءُ جي جاچ جي حصي جي طور تي، جيڪو عام طور تي ڊگهي عرصي تائين هلندو آهي ۽ ٽيسٽ هلندو آهي متوازي ۽/يا ساڳئي پروگرام کي ڪيترائي ڀيرا ترتيب ڏئي ٿو.

انهن مان هر هڪ لاء، پلومي توهان جي پسنديده مسلسل انضمام سسٽم سان انضمام جي حمايت ڪري ٿو. مسلسل انضمام سان، هي توهان کي توهان جي انفراسٽرڪچر لاءِ ساڳيو ٽيسٽ ڪوريج ڏئي ٿو جيئن توهان جي ايپليڪيشن سافٽ ويئر لاءِ.

پلومي کي عام CI سسٽم جي حمايت حاصل آهي. هتي انهن مان ڪجهه آهن:

وڌيڪ تفصيلي معلومات لاء، مهرباني ڪري حوالو ڏيو دستاويز لاء مسلسل پهچائڻ.

عارضي ماحول

هڪ تمام طاقتور موقعو جيڪو کوليندو آهي اهو آهي ته عارضي ماحول کي ترتيب ڏيڻ جي صلاحيت صرف قبوليت جي جاچ جي مقصدن لاءِ. تصور منصوبا ۽ اسٽيڪ پلومي کي مڪمل طور تي الڳ ٿيل ۽ آزاد ماحول کي آساني سان ترتيب ڏيڻ ۽ ٽوڙڻ لاءِ ٺاهيو ويو آهي، سڀ ڪجھ سادي CLI حڪمن ۾ يا انٽيگريشن ٽيسٽنگ فريم ورڪ استعمال ڪندي.

جيڪڏهن توهان استعمال ڪريو GitHub، پوء پلومي پيش ڪري ٿو GitHub ايپ، جيڪو توهان جي CI پائپ لائن اندر درخواستن کي ڇڪڻ لاءِ قبوليت جي جاچ کي ڳنڍڻ ۾ مدد ڪندو. صرف GitHub مخزن ۾ ايپليڪيشن کي انسٽال ڪريو، ۽ پلومي توهان جي سي آءِ ۽ پول جي درخواستن ۾ انفراسٽرڪچر جا ڏيک، تازه ڪاري ۽ جاچ جا نتيجا شامل ڪندو:

پلومي سان ڪوڊ جي طور تي انفراسٽرڪچر جي جانچ. حصو 2

جڏهن توهان پنهنجي بنيادي قبوليت جي ٽيسٽن لاءِ Pulumi استعمال ڪندا آهيو، توهان حاصل ڪندا نيون آٽوميشن صلاحيتون جيڪي ٽيم جي پيداوار کي بهتر بڻائينديون ۽ توهان کي توهان جي تبديلين جي معيار تي اعتماد ڏيارينديون.

نتيجو

هن آرٽيڪل ۾، اسان ڏٺو آهي ته عام مقصد جي پروگرامنگ ٻولين کي استعمال ڪندي، ڪيتريون ئي سافٽ ويئر ڊولپمينٽ ٽيڪنڪ اسان لاءِ دستياب ٿي چڪيون آهن جيڪي اسان جي ايپليڪيشنن کي ترقي ڪرڻ ۾ ڪارآمد ثابت ٿيون آهن. انهن ۾ شامل آهن يونٽ ٽيسٽنگ، انٽيگريشن ٽيسٽنگ، ۽ ڪئين ڪم ڪن ٿا گڏجي ڪم ڪرڻ لاءِ وسيع رن ٽائم ٽيسٽنگ. ٽيسٽ گهربل يا توهان جي CI سسٽم ۾ هلائڻ لاءِ آسان آهن.

پلمي - اوپن سورس سافٽ ويئر، استعمال ڪرڻ لاء مفت ۽ توهان جي پسنديده پروگرامنگ ٻولين ۽ بادل سان ڪم ڪري ٿو - اڄ ڪوشش ڪريو!

پهريون حصو

جو ذريعو: www.habr.com

تبصرو شامل ڪريو