Table of Contents
מה זה Docker?
Docker הוא פלטפורמת קוד פתוח שנועדה להכשיר את הפריסה, הגדלה וניהול של יישומים בתוך קל משקל, מיכלים ניידים.בניגוד מכונות וירטואליות מסורתיות, Docker מכולות לשתף את מערכת ההפעלה המארחת הקרנל תוך הפעלת מקרים בודדים של משתמשים.כל אחד חבילות כל קוד הכרחי, ריצה, כלי מערכת, וקבצים הדרושים ליישום כדי להפעיל.זה מבטיח כי התוכנה מתנהגת זהה ללא קשר ל-או שרת, או מערכת ההפעלה של פיתוח, או תכנות.
Containers בנויים מתמונות Docker, אשר הן תבניות קורא בלבד המגדירות את ערימה היישום.תמונות ניתן גרסה, מאוחסנים ברשומות (כמו Docker Hub או שרידים פרטיים), ומושך על הביקוש.חוסר יכולת זו היא אבן הפינה לבדיקה יעילה: כל מבחן מתחיל מאותה מדינה ידועה, ביטול הסביבה והפתעות תצורה.
מדוע חשוב לבצע בדיקות ו- QA
צוותי אבטחת איכות נאבקים עם סביבות לא עקביות, חוסר התאמה תלותיות, ותסמונת "העבודה על המכונה שלי" דוק מטפלות בנקודות הכאב האלה בראש סדר העדיפויות.על ידי מיכלת היישום תחת בדיקה, מהנדסי QA מקבלים את היכולת לשחזר תנאים דמויי ייצור מבלי צורך בחומרה פיזית או וירטואלית תזמורת.כאן הם היתרונות העיקריים:
יציבות סביבות
מיכלי Docker מבטיחים כי אותה לוח זמנים, ספריות ותצורה משמשים בכל שלב של צינור התוכנה.מפתח עובד על תכונה יכול לבנות מיכל מקומית, לדחוף את התמונה למרשם, ויש צוות QA למשוך ולבדוק כי תמונה מדויקת.לא יותר גרסה לא מתאימה או נשכחים. עקביות זו מפחיתה באופן דרסטי את החיוביים הנגרמים על ידי הבדלים סביבתיים ומזרזת ניתוח שורש כאשר הוא נמצא באגים.
⁇ ללא חתימה
כל מיכל פועל במרחב המשתמש המבודד שלו.מבחנים שעלולים להפריע זה לזה - כגון אלה הדורשים מצבי מסד נתונים שונים או מספרי נמל התנגשות - ניתן לבצע בבטחה במקביל, מכולות מתחילות תוך שניות וצורכים הרבה פחות משאבים מאשר מכונות וירטואליות, ומאפשרות לצוותים QA לסובב עשרות סביבות מבחן על מארח יחיד ללא פגיעה בביצועים.
מהירות ויציבות
מחזורי חיים המכילים הם אמפיריים.A חבילת מבחן יכול ליצור מיכל, להפעיל טיעונים, ולקרוע אותו באותו תפקיד CI. כי מכולות הן משקל, צוותים יכולים להפעיל בדיקות אינטגרציה, בדיקות קצה עד הסוף, ואפילו בדיקות ביצועים במקביל, חיתוך זמן ביצוע בדיקה הכולל באופן דרמטי.
יכולת והתאמה
תמונה דוקר שנבנתה כיום ניתן להשתמש חודשים מאוחר יותר, כל עוד תגי התמונה הבסיס מוצמדים.זה חידוש אומר כי כשלים במבחן היסטורי ניתן לשחזר על ידי פשוט למשוך את הגרסה התמונה שהייתה בשימוש באותו זמן.זה גם מאפשר ניתוק חלקה בין קבוצות - אותה תמונה העובר QA יכול להיות מקודם באמצעות עוקץ והפקה, צמצום הסיכון.
יישום Docker בבדיקת זרימת עבודה
אימוץ Docker לבדיקה דורש שינוי איך אתה מגדיר ולנהל סביבות.הצעדים הבאים מכנים גישה מעשית להכלכת היישום שלך ולשלב בדיקות מקוטבות לתוך זרימת העבודה הקיימת שלך.
1. צור קשר עבור הבקשה שלך
(הופנה מהדף Dockerfile הוא מדפסת כחולה עבור תמונת המכולה שלך.זה מתחיל עם תמונה בסיסית (למשל, ההרחבה:0 עבור אפליקציית Node.js, FLT:1 עבור שירות Python) ולאחר מכן שכבות קוד היישום שלך, תלותיות, ופקודות ההפעלה.עבור בדיקות, תוכל ליצור דוקרטה נפרדת הכוללת רציפות, שירותים לעג, שירותים ועוד חבילות נוספות הנדרשות רק במהלך הבדיקה).
FROM node:18-alpine AS base
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM base AS test
RUN npm ci
COPY . .
CMD ["npm", "test"]
בניין רב-שלבי זה שומר על תמונת הייצור רזה בעוד שלב המבחן כולל את כל הדרוש לאימות.שלב הבדיקה ניתן להפעיל ישירות CI מבלי להשפיע על חפץ הייצור.
2. בנה ו-Ta Test-Specific Images
ברגע שהדוקרפטה מוכנה, לבנות את התמונה ותגיש אותה בבירור:
docker build --target test -t myapp:test-$(git rev-parse --short HEAD) .
משיכת עם מספר היש או בניית מספרים מבטיחה מעקב.ניתן לדחוף את התמונה המתקבלת למרשם ולהשתמש בו על ידי כל חבר צוות או צינור.
3.המשתמשים בבדיקות
כדי להפעיל בדיקות בסביבה מקוטבת, פשוט לבצע את המכולה עם הפקודה המתאימה:
docker run --rm myapp:test-abcd123
דגל ה-FLT:5 מסיר באופן אוטומטי את המכולה לאחר סיום הבדיקה, שמירה על המארח נקי.
4. השתמש ב-Docker Compose for Multi-Service Architectures
יישומים מודרניים לעתים קרובות להסתמך על מסדי נתונים, תורי הודעות, שכבות מטמון, ו API חיצוניים. Docker Compose מאפשר לך להגדיר ולהפעיל סביבות המכילות מרובות עם קובץ תצורה יחיד. A טיפוסי FLT 7 עשוי להיראות:
version: '3.8'
services:
app:
build:
context: .
target: test
depends_on:
- db
- redis
environment:
- DATABASE_URL=postgres://user:pass@db:5432/testdb
- REDIS_URL=redis://redis:6379
db:
image: postgres:15-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: testdb
redis:
image: redis:7-alpine
התחל את סביבת הבדיקה עם (FLT:9 Compose יוצר את הרשת הנדרשת, מבטיח שירותים הם בריאים, ודמעות כל דבר למטה לאחר הריצה.תבנית זו היא חזקה במיוחד עבור אינטגרציה ובדיקות מקצה לקצה הדורשות רכיבים מרובים.
5.אינטלט דוקר לתוך קווי צינור CI /CD
בדיקות המכילות באופן טבעי מתאים לזרימות עבודה אינטגרציה רצופות.כאן איך לשלב עם פלטפורמות CI פופולריות:
- (ב) ויקרא י"א: "ה', ב', ב'אל-ת' (ב) ב'אל-ת' (ב"ב) ב[[1924]], [[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]]]]]]
- (ב) [17].10.10.10.10.10.10.10.10.10.10.17: ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
test:
image: docker:20.10.16
services:
- docker:dind
script:
- docker build --target test -t myapp:test .
- docker run myapp:test
- (ב) ,0) פעולות: FLT:1 השתמש בפעולה הרשמית של Docker או הפעלת פקודות ישירות.הפקדה FLT:15 ניתן להפעיל לאחר הקמת רץ.
ללא קשר לפלטפורמה, העיקרון הבסיסי נשאר זהה: לבנות תמונה של מבחן פעם, ואז להפעיל אותו במיכל מבודד עבור כל ביצוע או בקשה.זה מבטיח כי כל הבדיקות מתבצעות בסביבה צפויה, ניתנת לחיזוי.
שיטות טובות לבדיקות מבוססות Docker
כדי למקסם את היתרונות של בדיקות מקוטבות, הצוותים צריכים לאמץ את הפעולות הבאות:
דמיין את התמונות הבסיס שלך
תמיד לציין תגי תמונה מדויקים (למשל, FLT:16) ולא באמצעות שימוש ב-FLT:17 זה מונע שינויים במעלה הזרם משבר את הבדיקות שלך באופן בלתי צפוי.
עקבו אחרי Containers Ephemeral
לטפל בכל מיכל כפרטים לא לאחסן נתונים מתמשכים בתוך מיכל; במקום זאת, כרכים הר או שימוש בשירותים חיצוניים עבור המדינה. phemeral מכולות להפחית את הניקיון מעל הראש ולהבטיח מצב טרי לכל מבחן לרוץ.
בנייה ושלבי מבחן
כפי שמוצג בדוגמה רב-שלבית Dockerfile, מפריד את הייצור נבנה משלב הבדיקה.זה מפחית את הסיכון של כולל תלות במבחן בתמונות ייצור ומהירויות את CI על ידי מתן מקבילה בונה.
המונחים: test Execution
מיכלי Docker הם קלים מספיק כדי להפעיל מספר מקרים בו זמנית.שימוש בכלים כמו נדר (FLT 18) או רציפות מבחן התומכים בביצוע במקביל על פני מכולות.לדוגמה, חבילת מבחן שבדרך כלל לוקח 45 דקות יכול להיות מופחת ל 10 דקות על ידי פיצול קבצים בדיקה לקבוצות נפרדות של מיכל.
Cache Docker Layers
הזמנה דוקרפטה פקודה מלפחות עד לרוב השתנתה.המערכת ההתקנים והעתקה (FLT:19 מוקדם יותר כך שניתן להשתמש בשכבות שכבה.ב- CI, למשוך את התמונה הקודמת כמקור מטמון כדי להאיץ את הבנייה:
docker build --cache-from myapp:test-latest -t myapp:test .
השתמש ב-Docker Networks for Service Discovery
בעת שימוש ב-Docker Compose, להסתמך על שמות שירות (למשל, סימולציות רשתיות של LT:21), ולא על כתובות IP קודמות.
אתגרים ופתרונות
גם עם שיטות טובות, הצוותים עשויים להיתקל מכשולים בעת אימוץ דוקר לבדיקה.כאן הם נושאים טיפוסיים וכיצד לטפל בהם:
המונחים: Container time Zone
תמונות רבות של Docker משתמשות ב- UTC כברירת מחדל, אם לוגיקה היישום שלך תלויה באזור הזמן המקומי, בדיקות עלולות לייצר תוצאות בלתי צפויות (FLT:0Solution:FLT:1) להגדיר את הסביבה של FLT:23 המשתנה במיכל או להניף את ה-FLT:24 כנפח לקריאה בלבד.
אתגר: התנגשות הנמל על המארח
בעת הפעלת מיכלי בדיקה מרובים בו זמנית על יחיד מארח, מיפוי נמל יכול להתנגשות. (FLT:0Solution: FLT:1 השתמש בבידוד רשת בנוי של Docker - כלולים בתוך אותה רשת יכולים לתקשר ללא חשיפת נמלים לנמלי המפה בלבד כאשר אתה צריך לגשת לשירות מבחוץ (למשל, דפדפן לבדיקות מקצה לקצה).
אתגר: משאבים Constraints
(ב) הפעלת מיכלים רבים יכולה ליישב את CPU, זיכרון או דיסק I/O.FLT:0Solution:0 solution: FLT:1 Set Limits in Dockerose (ראה פרק 25) או להשתמש ב- Docker's (FLT:26 ו-FLT:27), כמו כן, לשקול שימוש בשירות Docker-in-Docker (Din-R) עבור רצים כדי למנוע את המשאבכוח על מנת למנוע את השימוש במשאבי-S.
אתגר: רשת Latency לעומת שירותים אמיתיים
מכילות הסימולות API החיצוניות עשויות לא לשקף במדויק את השקיפות של רשת הייצור (FLT:0Solution: FLT:1 שימוש בכלים כמו FLT:28 (שליטה פיזית) בתוך מיכלי בדיקה כדי להוסיף שקיפות מלאכותית, או להפעיל בדיקות ביצועים נגד סביבה מלחיצה ייעודית ולא שירותים מלוטשים.
אתגר: ניהול נתוני Test
תצפיות ותיקוןים צריכים להיות טעון לתוך מסדי נתונים לפני תחילת הבדיקות.FLT:0Solution: FLT:1 לכתוב Docker Compose תצורה כי החלת מסדי נתונים באמצעות תסריטי כניסה מותאמים אישית או להפעיל מיכל הגירה כתלוי. לחלופין, השתמש כרכים Docker כדי לקבוע מראש נתונים שניתן להשתמש בהם מחדש על פני פרוצדורות בדיקה.
דוגמה אמיתית לעולם: בדיקה סופית עם Docker
שקול אדריכלות מיקרו-שירותים עם ממשק API של Node.js, מסד נתונים Postgres, כאב אדום, ותשובה תגובה לפני הסוף יכול לדמות אינטראקציות משתמשים דרך החזית.עם דוקר, את הערימה כולה ניתן להגדיר בקובץ FLT:29:
version: '3.8'
services:
api:
build: ./api
environment:
- DATABASE_URL=postgres://user:pass@db:5432/testdb
- REDIS_URL=redis://redis:6379
depends_on:
- db
- redis
frontend:
build: ./frontend
ports:
- "3000:3000"
depends_on:
- api
db:
image: postgres:15-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: testdb
redis:
image: redis:7-alpine
test-runner:
build: ./e2e-tests
depends_on:
- frontend
environment:
- BASE_URL=http://frontend:3000
command: ["cypress", "run"]
השירות של ההרחבה (FLT:31) משתמש ב- Cypress כדי לבצע בדיקות מבוססות דפדפן נגד החזית, כי כל השירותים נמצאים באותה רשת Docker, רץ המבחן יכול לגשת לחזית באמצעות שם השירות.הסביבה כולה ניתן לעטוף עם FLT:32, ולאחר יציאת המבחן (scess or כשל), להשלים את כל הדמעות למטה.
מסקנה
Docker משנה את הדרך שבה צוותים ניגשים לבדיקות יישום ולאבטחת איכות על ידי מתן סביבה עקבית, מבודדת וניידת שאותה מחקה את הייצור באופן הדוק.היכולת להגדיר את כל תשתיות הבדיקה בקוד, גרסה זו לצד היישום שלך, ולבצע אותו בכל מקום - ממכונה של מפתח ועד רץ רשת ענן - מסלקת את יכולת ה- QA היסטורית.
על ידי אימוץ שיטות המפורטות לעיל - אכילת בדיקות מבוססות תכלית Dockerfiles,מינוף Docker Compose עבור ארכיטקטורות רב-שירות, שילוב בדיקות מקוטבות צינורות CI /CD, ודבקות שיטות הטובות ביותר סביב אי-יכולת תמונה ואפסמרידות - צוותים יכולים להפחית באופן משמעותי פגמים הקשורים לסביבה, להאיץ מחזורי משוב, להגדיל את האמון בכל שחרור.
לקריאה נוספת, עיין בתיעוד ה-FLT:0 (Docker Development Best PracticesFLT) 1 ו- The FLT:2Docker Compose SculoseFLT 3: 3 ; צוותים רבים מוצאים ערך בחקר ה-FLT:4Test ContainerssFLT:5 עבור ניהול מכולות תוכנה בסוויטות מבחן, במיוחד עבור Java ו- .NET.