איך כותבים בדיקת E2E ראשונה עם Playwright – מדריך מעשי

בדיקות E2E – End-to-End הפכו בשנים האחרונות לאחד הכלים החשובים ביותר בעולם בדיקות התוכנה. במקום לבדוק פונקציה בודדת או API ספציפי, בדיקת E2E בוחנת תרחיש שלם מנקודת המבט של המשתמש: פתיחת האתר, התחברות, מילוי טופס, ביצוע פעולה וקבלת התוצאה הצפויה.

אחד הכלים המובילים כיום לביצוע בדיקות כאלה הוא Playwright. הוא מאפשר לכתוב בדיקות אוטומטיות לדפדפנים מודרניים, להריץ אותן במהירות ולשלב אותן בתהליכי CI/CD.

במדריך הזה נבנה בדיקת E2E ראשונה עם Playwright, צעד אחר צעד, החל מהתקנת הכלי ועד להרצת הבדיקה וניתוח התוצאות.


מהי בדיקת E2E?

בדיקת E2E בודקת מערכת שלמה מנקודת מבטו של המשתמש.

לדוגמה, באתר מסחר אלקטרוני ניתן להגדיר תרחיש כזה:

  1. המשתמש נכנס לאתר.
  2. מחפש מוצר.
  3. נכנס לעמוד המוצר.
  4. מוסיף את המוצר לעגלה.
  5. עובר לעגלת הקניות.
  6. בודק שהמוצר מופיע בעגלה.
  7. ממשיך לתהליך התשלום.

במקום לבדוק כל פעולה בנפרד, בדיקת E2E יכולה לבדוק את כל שרשרת הפעולות.

היתרון המרכזי הוא שהבדיקה יכולה לזהות בעיה שלא בהכרח נמצאת בקוד של רכיב יחיד, אלא באינטגרציה בין כמה רכיבים.

לדוגמה:

כפתור "הוסף לעגלה" עובד, עמוד העגלה עובד, אבל המוצר לא עובר ביניהם.

בדיקת Unit עשויה שלא לזהות את הבעיה, בעוד שבדיקת E2E יכולה לזהות אותה מיד.


למה דווקא Playwright?

Playwright הוא framework לאוטומציה של דפדפנים שפותח על ידי Microsoft.

הוא מאפשר לבצע פעולות אמיתיות בדפדפן, כגון:

  • פתיחת עמוד.
  • לחיצה על כפתורים.
  • מילוי שדות.
  • בחירת אפשרויות.
  • ניווט בין עמודים.
  • עבודה עם מספר טאבים.
  • העלאת קבצים.
  • בדיקת טקסטים.
  • בדיקת URL.
  • צילום מסך.
  • הקלטת וידאו.
  • בדיקות במצב Headless.
  • בדיקות במספר דפדפנים.

Playwright תומך בין היתר ב-Chromium, Firefox ו-WebKit.

המשמעות עבור אנשי QA היא שניתן לכתוב תרחיש בדיקה אחד ולהריץ אותו בסביבות דפדפן שונות.


מה צריך כדי להתחיל?

כדי ליצור את הבדיקה הראשונה נצטרך:

  • מחשב עם Node.js.
  • עורך קוד, למשל VS Code.
  • פרויקט שאליו נרצה להוסיף בדיקות.
  • Playwright.

אין צורך להיות מפתח Full Stack כדי להתחיל.

עם זאת, היכרות בסיסית עם JavaScript או TypeScript תהיה יתרון משמעותי.


שלב 1: יצירת פרויקט Playwright

נפתח Terminal או Command Prompt ונריץ:

npm init playwright@latest

Playwright ישאל מספר שאלות.

לדוגמה:

Do you want to use TypeScript or JavaScript?

למתחילים אפשר לבחור JavaScript, ואפשר גם לבחור TypeScript אם רוצים לבנות תשתית מקצועית יותר.

לאחר מכן Playwright ישאל היכן לשמור את הבדיקות.

לדוגמה:

tests

לאחר ההתקנה ייווצר מבנה בסיסי של פרויקט.


שלב 2: מבנה הפרויקט

פרויקט Playwright בסיסי יכול להיראות כך:

playwright-project/
├── tests/
│ └── example.spec.js
├── playwright.config.js
├── package.json
└── node_modules/

הקובץ החשוב ביותר עבורנו בשלב הראשון הוא קובץ הבדיקה.

לדוגמה:

tests/login.spec.js

הסיומת .spec.js מקובלת מאוד עבור קבצי בדיקות.


שלב 3: כתיבת בדיקת E2E ראשונה

נניח שיש לנו אתר עם עמוד התחברות.

התרחיש שלנו:

"משתמש יכול להתחבר למערכת באמצעות שם משתמש וסיסמה תקינים."

ניצור:

tests/login.spec.js

ונכתוב:

const { test, expect } = require('@playwright/test');
test('User can login successfully', async ({ page }) => {
await page.goto('https://example.com/login');
await page.getByLabel('Username').fill('testuser');
await page.getByLabel('Password').fill('Password123');
await page.getByRole('button', { name: 'Login' }).click();
await expect(page).toHaveURL(/dashboard/);
});

וזו למעשה בדיקת E2E שלמה.

בואו נבין מה קורה כאן.


שלב 4: הבנת הקוד

ייבוא Playwright

השורה:

const { test, expect } = require('@playwright/test');

מייבאת את שני הכלים המרכזיים שאנחנו צריכים.

test משמש להגדרת הבדיקה.

expect משמש לכתיבת Assertions – כלומר בדיקות שמוודאות שהתוצאה שקיבלנו היא התוצאה הצפויה.


הגדרת הבדיקה

הקוד:

test('User can login successfully', async ({ page }) => {

מגדיר Test חדש.

הטקסט:

User can login successfully

הוא שם הבדיקה.

החלק:

({ page })

נותן לנו אובייקט Page של Playwright.

אפשר לחשוב עליו כעל הדפדפן או העמוד שבו מתבצעת הבדיקה.


פתיחת האתר

הפקודה:

await page.goto('https://example.com/login');

פותחת את כתובת האתר.

ה-await חשוב מאוד.

Playwright מבצע פעולות אסינכרוניות, ולכן אנחנו רוצים להמתין עד שהפעולה הרלוונטית תושלם לפני שנמשיך.


מילוי שדה Username

נשתמש ב:

await page.getByLabel('Username').fill('testuser');

Playwright מחפש אלמנט שמקושר ל-label בשם Username.

לאחר שהוא מוצא אותו, הוא מכניס לתוכו:

testuser

אחת החוזקות של Playwright היא מגוון ה-Locators שלו.


מה זה Locator?

Locator הוא הדרך שבה Playwright מזהה אלמנט בדף.

לדוגמה:

page.getByRole('button')

או:

page.getByText('Login')

או:

page.getByLabel('Password')

או:

page.getByPlaceholder('Enter password')

אפשר גם להשתמש ב-CSS:

page.locator('#username')

אבל בדרך כלל עדיף להתחיל עם Locators שמתארים את האלמנט כפי שהמשתמש רואה אותו.


למה getByRole הוא Locator חשוב?

נניח שיש לנו:

<button>Login</button>

אפשר למצוא אותו באמצעות:

await page.getByRole('button', { name: 'Login' }).click();

זה עדיף בדרך כלל על:

await page.locator('#loginButton').click();

כי אנחנו מתארים את האלמנט לפי התפקיד שלו:

זה Button בשם Login.

גישה כזו הופכת את הבדיקה לקריאה יותר וגם יכולה להיות עמידה יותר לשינויים פנימיים ב-HTML.


שלב 5: ביצוע פעולה

לאחר שמילאנו את שם המשתמש והסיסמה:

await page.getByRole('button', { name: 'Login' }).click();

Playwright לוחץ על כפתור Login.

מבחינת תהליך E2E:

כניסה לאתר
מילוי Username
מילוי Password
לחיצה על Login
מעבר ל-Dashboard

שלב 6: כתיבת Assertion

בדיקת E2E טובה לא מסתיימת בלחיצה.

אנחנו צריכים לבדוק שהפעולה הצליחה.

לדוגמה:

await expect(page).toHaveURL(/dashboard/);

כאן אנחנו אומרים:

אני מצפה שאחרי ההתחברות ה-URL יכיל את המילה dashboard.

זהו ה-Assertion.


למה Assertions כל כך חשובים?

נניח שכתבנו:

await page.getByRole('button', { name: 'Login' }).click();

האם זה אומר שהמשתמש התחבר בהצלחה?

לא.

יכול להיות שהלחיצה בוצעה אבל:

  • השרת החזיר שגיאה.
  • הסיסמה שגויה.
  • המשתמש נחסם.
  • הופיעה הודעת שגיאה.
  • הדף לא נטען.
  • המערכת נשארה בעמוד ההתחברות.

לכן כל בדיקת E2E צריכה להגדיר בצורה ברורה:

מה אני מצפה שיקרה?


בדיקת הודעת הצלחה

במקום לבדוק רק URL, אפשר לבדוק גם אלמנט בעמוד.

לדוגמה:

await expect(
page.getByText('Welcome back')
).toBeVisible();

עכשיו הבדיקה אומרת:

לאחר ההתחברות אני מצפה לראות את הטקסט Welcome back.


שילוב של כמה Assertions

אפשר לבצע מספר בדיקות:

await expect(page).toHaveURL(/dashboard/);
await expect(
page.getByText('Welcome back')
).toBeVisible();
await expect(
page.getByRole('heading', { name: 'Dashboard' })
).toBeVisible();

כך אנחנו בודקים לא רק שהדפדפן עבר לכתובת מסוימת, אלא גם שהמערכת באמת נמצאת במצב שאליו ציפינו.


שלב 7: הרצת הבדיקה

כדי להריץ את הבדיקות נשתמש ב:

npx playwright test

Playwright יריץ את הבדיקות שנמצאות בתיקיית tests.

אם הכל תקין, נקבל תוצאה שמציינת שהבדיקה עברה.


הרצת בדיקה ספציפית

אם יש לנו מספר רב של בדיקות, נוכל להריץ בדיקה מסוימת:

npx playwright test tests/login.spec.js

אפשר גם להריץ Test במצב UI:

npx playwright test --ui

מצב UI שימושי מאוד למתחילים מכיוון שניתן לראות את הבדיקות בצורה אינטראקטיבית.


הרצת הבדיקה בדפדפן גלוי

כברירת מחדל בדיקות Playwright עשויות לרוץ במצב Headless.

אם רוצים לראות את הדפדפן בזמן הבדיקה:

npx playwright test --headed

עכשיו ניתן לראות את Playwright פותח את הדפדפן ומבצע את הפעולות.

ללימוד ול-Debugging זו דרך מצוינת להבין מה באמת קורה.


שלב 8: Debugging

אחת התכונות השימושיות ביותר של Playwright היא האפשרות להריץ בדיקה במצב Debug.

לדוגמה:

npx playwright test --debug

כך ניתן לעצור את הבדיקה ולבחון את השלבים השונים.

אפשר גם להוסיף:

await page.pause();

לדוגמה:

await page.goto('https://example.com/login');
await page.pause();
await page.getByLabel('Username').fill('testuser');

כאשר הבדיקה מגיעה ל-page.pause(), היא נעצרת ומאפשרת לנו לבדוק את מצב הדף.


שימוש ב-Trace Viewer

כאשר בדיקות מתחילות להיות מורכבות יותר, אחד הכלים החשובים ביותר הוא Trace.

ניתן להגדיר שמירת Trace בעת כשל.

לדוגמה:

use: {
trace: 'retain-on-failure'
}

כך במקרה של כישלון ניתן לחקור את הבדיקה בדיעבד.

Trace יכול לעזור להבין:

  • מה היה ה-URL.
  • איזה אלמנט היה בדף.
  • אילו פעולות בוצעו.
  • באיזה שלב הבדיקה נכשלה.
  • אילו בקשות רשת התרחשו.
  • מה היה מצב הדפדפן.

זה הופך Debugging של בדיקות E2E להרבה יותר יעיל.


בדיקת E2E טובה מול בדיקה שבירה

אחת הטעויות הנפוצות ביותר של מתחילים היא לכתוב בדיקה שתלויה ב-CSS או במבנה HTML מאוד ספציפי.

לדוגמה:

await page.locator(
'div.container > div:nth-child(2) > button'
).click();

הבדיקה יכולה לעבוד היום.

אבל אם מפתח משנה את מבנה ה-DOM, היא עלולה להישבר למרות שהמערכת עצמה עדיין עובדת.

עדיף:

await page.getByRole('button', { name: 'Login' }).click();

או:

await page.getByTestId('login-button').click();

שימוש ב-data-testid

במערכות מורכבות אפשר להוסיף מזהה ייעודי לאוטומציה:

<button data-testid="login-button">
Login
</button>

ואז:

await page.getByTestId('login-button').click();

היתרון הוא שהמפתח יכול לשנות CSS, עיצוב ומבנה פנימי מבלי לשבור בהכרח את הבדיקה.


מהו ה-Test Scenario הנכון?

לפני שכותבים קוד, חשוב להגדיר את התרחיש.

לדוגמה:

Test Case: Login

Preconditions

המשתמש קיים במערכת.

Steps

  1. פתיחת עמוד Login.
  2. הכנסת Username.
  3. הכנסת Password.
  4. לחיצה על Login.

Expected Result

המשתמש מועבר ל-Dashboard ורואה את מסך הבית.

רק לאחר שהתרחיש ברור, כדאי להתחיל לכתוב את הקוד.


בדיקת Login מלאה

דוגמה מעט יותר מסודרת:

const { test, expect } = require('@playwright/test');
test('Successful login', async ({ page }) => {
// Open login page
await page.goto('https://example.com/login');
// Enter credentials
await page.getByLabel('Username').fill('testuser');
await page.getByLabel('Password').fill('Password123');
// Submit login form
await page.getByRole('button', {
name: 'Login'
}).click();
// Verify successful login
await expect(page).toHaveURL(/dashboard/);
await expect(
page.getByRole('heading', {
name: 'Dashboard'
})
).toBeVisible();
});

שימו לב למבנה:

Arrange
Navigate
Act
Assert

זהו מבנה מצוין לבדיקות אוטומציה.


בדיקת Login שלילי

לא כדאי לבדוק רק Happy Path.

נרצה לבדוק גם:

מה קורה כאשר המשתמש מזין סיסמה שגויה?

לדוגמה:

test('Login fails with invalid password', async ({ page }) => {
await page.goto('https://example.com/login');
await page.getByLabel('Username').fill('testuser');
await page.getByLabel('Password').fill('WrongPassword');
await page.getByRole('button', {
name: 'Login'
}).click();
await expect(
page.getByText('Invalid username or password')
).toBeVisible();
});

עכשיו כבר יש לנו שני תרחישים:

Login
├── Valid credentials → Success
└── Invalid credentials → Error

למה לא כדאי לכתוב בדיקת E2E ענקית?

טעות נפוצה היא ליצור בדיקה אחת שמבצעת:

Login
Search
Add product
Checkout
Payment
Logout
Create user
Delete user

אם הבדיקה נכשלת בשלב Checkout, קשה לדעת מה בדיוק גרם לבעיה.

עדיף לחלק את המערכת לתרחישים הגיוניים.

לדוגמה:

login.spec.js
search.spec.js
cart.spec.js
checkout.spec.js
logout.spec.js

כך כל בדיקה אחראית על תהליך ברור.


Page Object Model עם Playwright

כאשר הפרויקט גדל, כדאי להפריד בין:

מה הבדיקה רוצה לעשות

לבין:

איך Playwright מבצע את הפעולה.

לשם כך ניתן להשתמש ב-Page Object Model.

לדוגמה:

class LoginPage {
constructor(page) {
this.page = page;
this.username =
page.getByLabel('Username');
this.password =
page.getByLabel('Password');
this.loginButton =
page.getByRole('button', {
name: 'Login'
});
}
async login(username, password) {
await this.username.fill(username);
await this.password.fill(password);
await this.loginButton.click();
}
}
module.exports = { LoginPage };

ואז הבדיקה הופכת לקריאה יותר:

const { test, expect } = require('@playwright/test');
const { LoginPage } = require('../pages/loginPage');
test('Successful login', async ({ page }) => {
const loginPage = new LoginPage(page);
await page.goto('https://example.com/login');
await loginPage.login(
'testuser',
'Password123'
);
await expect(page).toHaveURL(/dashboard/);
});

עכשיו הבדיקה מתארת את התהליך העסקי ולא את כל הפרטים הטכניים.


האם להשתמש ב-Playwright Codegen?

Playwright כולל כלי שמאפשר להקליט פעולות ולייצר קוד.

אפשר להפעיל:

npx playwright codegen https://example.com

ייפתח דפדפן.

כאשר נבצע פעולות באתר, Playwright יציע קוד מתאים.

זו דרך מצוינת למתחילים להבין:

  • איך Playwright מזהה אלמנטים.
  • איזה Locator מתאים.
  • איך לבצע click.
  • איך לבצע fill.
  • איך לבצע ניווט.

אבל חשוב להבין:

Codegen הוא כלי עזר, לא תחליף לכתיבת בדיקות איכותיות.

הקוד שנוצר אוטומטית לא תמיד יהיה הקוד האידיאלי לפרויקט גדול.


איך לבחור Locator נכון?

אפשר לחשוב על סדר עדיפויות כזה:

1. Role

getByRole()

2. Label

getByLabel()

3. Placeholder

getByPlaceholder()

4. Text

getByText()

5. Test ID

getByTestId()

6. CSS / XPath

רק כאשר אין אפשרות טובה יותר.

המטרה היא ליצור בדיקה שמייצגת את האופן שבו משתמש אמיתי מתקשר עם המערכת.


אחת הטעויות הגדולות: שימוש ב-wait קבוע

מתחילים רבים כותבים:

await page.waitForTimeout(5000);

ואז:

await page.getByRole('button').click();

זה בדרך כלל לא פתרון טוב.

למה?

כי אולי האתר נטען בתוך שנייה.

במקרה כזה אנחנו סתם מחכים ארבע שניות נוספות.

ומצד שני, אם האתר זקוק ל-8 שניות, ההמתנה של 5 שניות לא מספיקה.

Playwright כולל מנגנוני Auto-Waiting שמאפשרים לו להמתין לתנאים הרלוונטיים לפני ביצוע פעולות ואימותים.

לכן עדיף בדרך כלל:

await page.getByRole('button', {
name: 'Login'
}).click();

ולא:

await page.waitForTimeout(3000);
await page.getByRole('button', {
name: 'Login'
}).click();

בדיקות E2E ו-CI/CD

הערך האמיתי של אוטומציה מגיע כאשר הבדיקות לא רצות רק על המחשב של ה-QA.

אפשר לשלב Playwright בתהליך CI/CD.

לדוגמה:

Developer
Git Commit
Build
Deploy to Test
Playwright E2E
Pass / Fail
Deploy

כך ניתן למנוע מצב שבו גרסה חדשה מגיעה לייצור כאשר תהליך עסקי מרכזי נשבר.


אילו בדיקות כדאי להפוך ל-E2E?

לא כל Test Case צריך להפוך לבדיקת E2E.

כדאי לבחור תרחישים שהם:

  • קריטיים לעסק.
  • נפוצים אצל משתמשים.
  • רגישים לתקלות.
  • כוללים כמה רכיבים במערכת.
  • מייצגים תהליך עסקי מרכזי.

לדוגמה באתר מסחר:

Login
Search Product
Add To Cart
Checkout

במערכת ביטוח:

Login
Create Customer
Create Policy
Calculate Premium
Save Policy

במערכת HR:

Login
Create Employee
Assign Manager
Save
Verify Employee

אלה תהליכים שבהם E2E יכול לספק ערך משמעותי.


כמה בדיקות E2E באמת צריך?

יותר בדיקות לא בהכרח אומר מערכת בדיקות טובה יותר.

E2E הן יחסית יקרות להרצה ולתחזוקה.

לכן כדאי לחשוב על Pyramid:

           E2E
          /   \
       API     UI
      /           \
   Integration
  /               \
       Unit Tests

הרעיון הוא:

  • הרבה Unit Tests.
  • כמות משמעותית של Integration/API Tests.
  • מספר ממוקד של E2E Tests.

כך מקבלים כיסוי טוב בלי להפוך את כל תהליך הבדיקות לאיטי ושביר.


Checklist לבדיקת E2E ראשונה

לפני שסיימתם את הבדיקה, עברו על הרשימה:

  • התרחיש העסקי מוגדר.
  • הבדיקה מתחילה מנקודת פתיחה ברורה.
  • ה-Locators יציבים.
  • אין שימוש מיותר ב-waitForTimeout.
  • קיימים Assertions.
  • הבדיקה בודקת את התוצאה ולא רק את הפעולה.
  • הבדיקה יכולה לרוץ באופן עצמאי.
  • שם הבדיקה ברור.
  • כישלון הבדיקה מאפשר להבין מה השתבש.
  • הבדיקה מתאימה להרצה ב-CI/CD.

10 טעויות נפוצות בבדיקות Playwright

1. בדיקה ללא Assertion

await page.getByRole('button').click();

פעולה בלבד אינה בדיקה מלאה.


2. Locators שבירים

div:nth-child(4) > button

שינוי קטן ב-DOM עלול לשבור את הבדיקה.


3. המתנות קבועות

page.waitForTimeout(5000)

עלולות להאריך את זמן הבדיקות וליצור חוסר יציבות.


4. בדיקה ארוכה מדי

בדיקה אחת לא צריכה לכסות את כל המערכת.


5. תלות בין Tests

Test אחד לא אמור להיות תלוי בכך ש-Test אחר רץ לפניו.


6. נתוני Test לא יציבים

אם כל בדיקה משתמשת באותו משתמש ובאותם נתונים, בדיקות מקבילות עלולות להתנגש.


7. בדיקה רק של Happy Path

חשוב לבדוק גם תרחישי שגיאה.


8. Hardcoded Credentials

אין להכניס סיסמאות אמיתיות לקוד או ל-Git.

עדיף להשתמש במשתני סביבה ובמנגנון ניהול Secrets של סביבת ה-CI.


9. E2E לכל דבר

לא כל בדיקה צריכה לפתוח דפדפן.


10. התמקדות בפעולות במקום בתוצאה

בדיקה טובה לא שואלת רק:

האם לחצתי?

אלא:

האם המערכת הגיעה למצב שאליו ציפיתי?


דוגמה למבנה פרויקט מקצועי יותר

לאחר שהפרויקט גדל, ניתן להגיע למבנה כזה:

playwright-project/
├── tests/
│ ├── login.spec.js
│ ├── search.spec.js
│ ├── cart.spec.js
│ └── checkout.spec.js
├── pages/
│ ├── loginPage.js
│ ├── homePage.js
│ ├── cartPage.js
│ └── checkoutPage.js
├── test-data/
│ └── users.js
├── playwright.config.js
├── package.json
└── README.md

מבנה כזה מאפשר להפריד בין:

Tests

התרחישים העסקיים.

Pages

האינטראקציה עם ממשק המשתמש.

Test Data

הנתונים שבהם משתמשים בבדיקות.

Configuration

הגדרות Playwright.


ומה השלב הבא אחרי הבדיקה הראשונה?

לאחר שהבדיקה הראשונה עובדת, כדאי להתקדם בהדרגה.

שלב 1

כתיבת בדיקות Login.

שלב 2

בדיקות של תרחישי שגיאה.

שלב 3

עבודה עם מספר עמודים.

שלב 4

Page Object Model.

שלב 5

Fixtures ו-Test Data.

שלב 6

הרצה מקבילית.

שלב 7

Trace ו-Reporting.

שלב 8

הרצה במספר דפדפנים.

שלב 9

שילוב ב-CI/CD.

שלב 10

בניית Framework אוטומציה מסודר.


סיכום

כתיבת בדיקת E2E ראשונה עם Playwright אינה חייבת להיות מורכבת.

העיקרון הבסיסי פשוט:

פתיחת מערכת
ביצוע פעולה
בדיקת תוצאה

לדוגמה:

await page.goto('/login');
await page.getByLabel('Username').fill('testuser');
await page.getByLabel('Password').fill('Password123');
await page.getByRole('button', {
name: 'Login'
}).click();
await expect(page).toHaveURL(/dashboard/);

אבל כתיבת בדיקת E2E טובה היא מעבר לכתיבת כמה שורות קוד. צריך לחשוב על תרחיש עסקי, לבחור Locators יציבים, להשתמש נכון ב-Assertions, להימנע מהמתנות מלאכותיות ולבנות את הבדיקות כך שיוכלו לגדול יחד עם המערכת.

עבור אנשי QA שרוצים להיכנס לעולם האוטומציה, Playwright הוא כלי משמעותי במיוחד משום שהוא מאפשר לעבור בהדרגה מבדיקות UI פשוטות ל-Framework אוטומציה מלא הכולל E2E, API, הרצה מקבילית, Debugging, Reporting ושילוב בתהליכי CI/CD.

הבדיקה הראשונה היא רק ההתחלה. המטרה האמיתית היא לבנות מערך אוטומציה יציב, מהיר ותחזוקתי שמספק ערך אמיתי לצוות הפיתוח וה-QA.

לקרוא מאמרים זה נחמד אבל לא יביא אותך לתוצאה שאתה רוצה, בדיוק בשביל זה הכנו עבורך את הקורס הדיגיטלי המהיר, תוך שעתיים וחצי תלמד את תחום הבדיקות ידניות, תוכל להתחיל לעבוד מהבית דרך FIVERR או ולהתכונן נכון לראיונות עבודה שיעזרו לך לצלוח אותם. כנס כאן הקורס ממוקד בבדיקות תוכנה ידניות הנותן בסיס חזק לתחום.

קורס לבדיקות תוכנה מדויק

לעבוד מהבית כבודק תוכנה עם FIVERR >> לחץ כאן

כתיבת תגובה