يعد اختبار التكامل أمرًا بالغ الأهمية لضمان عمل تطبيق Go الخاص بك بشكل لا تشوبه شائبة مع التبعيات الخارجية مثل قواعد البيانات. في هذه المدونة، سنستكشف كيفية إعداد وتشغيل اختبارات التكامل لتطبيق Go باستخدام GitHub Actions. سنقوم بتكوين قاعدة بيانات PostgreSQL ضمن مسار CI، وتبسيط عملية الاختبار، والتأكد من أن قاعدة البيانات الخاصة بك موثوقة وجاهزة للإنتاج مع كل دفعة. هيا بنا نتعمق!.
لقد أنشأنا اختبار الوحدة والتكاملات في مقال سابق هنا!. في هذه المقالة، نريد إجراء هذه الاختبارات على جميع الالتزامات في مستودع جيثب الخاص بنا.
إنها عبارة عن نظام أساسي للتكامل المستمر والتسليم المستمر (CI/CD) الذي يسمح لك بأتمتة عملية البناء والاختبار والنشر.
تتيح لك Github Actions تشغيل مهام سير العمل عند حدوث أحداث أخرى في مستودعك
سير العمل هو عملية تلقائية قابلة للتكوين ستقوم بتشغيل مهمة واحدة أو أكثر. يتم تعريف سير العمل من خلال ملف YAML الذي تم إيداعه في مستودعك وسيتم تشغيله عند تشغيله بواسطة حدث في مستودعك. يتم تعريف سير العمل في .github/workfows.
name: ci-test on: push: branches: [main] pull_request: branches: [main] env: POSTGRES_USER: postgres POSTGRES_PASSWORD: Password123 POSTGRES_DB: crud_db jobs: build: name: tests runs-on: ubuntu-latest services: postgres: image: postgres env: POSTGRES_USER: ${{ env.POSTGRES_USER }} POSTGRES_PASSWORD: ${{ env.POSTGRES_PASSWORD }} POSTGRES_DB: ${{ env.POSTGRES_DB }} ports: - 5432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v4 with: go-version: "1.22" - name: Install dbmate for golang migrations run: | sudo curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/latest/download/dbmate-linux-amd64 sudo chmod x /usr/local/bin/dbmate which dbmate - name: Construct DB URL id: construct_url run: echo "DB_URL=postgres://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@localhost:5432/${{ env.POSTGRES_DB }}?sslmode=disable" >> $GITHUB_ENV - run: env - name: Make Migrations run: make migrations URL=${{ env.DB_URL }} - name: Seed test DB run: go run db/seed.go - name: Test run: make test
تدعم سير عمل Github متغيرات البيئة العالمية والمحددة للوظيفة. تصف هذه المتغيرات بيانات اعتماد postgres التي سنستخدمها لاحقًا في ملف yaml الخاص بنا.
jobs: build: name: tests runs-on: ubuntu-latest
لقد قمنا هنا بتعيين اسم للوظيفة التي ستؤدي المهام الأساسية، والتي هي بناء واختبار التعليمات البرمجية الخاصة بنا.
Runner - يصف المكان الذي سيتم فيه تشغيل سير العمل وهو جهاز Ubuntu الظاهري.
تتيح لك مسارات عمل Github Actions تحديد الخدمات. في هذه الحالة نحتاج إلى قاعدة بيانات postgres لإجراء اختباراتنا عليها.
- uses: actions/checkout@v4
يجلب هذا السطر أحدث إصدار من المستودع، مما يوفر الوصول إلى جميع الملفات المصدر.
- name: Set up Go uses: actions/setup-go@v4 with: go-version: "1.22"
- name: Install dbmate for golang migrations run: | sudo curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/latest/download/dbmate-linux-amd64 sudo chmod x /usr/local/bin/dbmate which dbmate
- name: Construct DB URL id: construct_url run: echo "DB_URL=postgres://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@localhost:5432/${{ env.POSTGRES_DB }}?sslmode=disable" >> $GITHUB_ENV
- name: Make Migrations run: make migrations URL=${{ env.DB_URL }}
- name: Seed test DB run: go run db/seed.go
يقوم ملف Seed.go بزراعة البيانات مع بيانات الاختبار. تهيئة بيئة اختبار واقعية. لفحص هذا الملف بشكل أكبر، قم بزيارة هنا
المرحلة النهائية هي تنفيذ اختبار الانتقال باستخدام ملف الصنع
- name: Test run: make test
سيتم الآن تشغيل سير العمل هذا في كل مرة نقوم فيها بتقديم طلب سحب أو إرسال رمز إلى فرعنا الرئيسي
كما رأينا إجراء github يسمح لك بالقيام بـ
من خلال الاستفادة من إجراءات GitHub، يعمل سير العمل هذا على تبسيط الاختبار وإعداد قاعدة البيانات، مما يضمن تطوير برامج قوية وموثوقة.
قم بزيارة مستودع جيثب لعرض الكود الذي يتم اختباره من خلال الإجراء الموضح أعلاه.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3