סקירת כלים - Nightwatch | רחל ברוך

 Nightwatchהוא פריימוורק אשר נכתב ב-Node.js ומשתמש ב-W3C Webdriver לצורך ביצוע בדיקות אוטומטיות מקצה לקצה, ביישומי ווב ואתרי ווב התומכים בכל הדפדפנים המפורסמים. הפריימוורק פותח ע"י Andrei Rusu בשנת 2014. בנוסף לבדיקות קצה לקצה (E2E) ניתן לבצע בדיקות יחידה ובדיקות אינטגרציה של HTTP API's. ניתן לשלב בדיקות E2E עם בדיקות יחידה/בדיקות אינטגרציה באותה ריצת בדיקה. הגרסה העדכנית הוא 2.0.7.

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

 

תכונות מרכזיות 

  • התקנה קלה
  • כתיבת טסט ראשון
  • שימוש ב- assertions ו-expects
  • תמיכה בשירותי ענן
  • עבודה עם Page Object
  • הרצת טסטים בפקודה אחד
  • צילום מסך של התוצאה
  • קבלת דוחות

 

התקנות

 ההתקנה דורשת מספר פעולות פשוטות.

בשלב הראשון נבצע את התקנה של java ו-Node.js

https://www.java.com/en/download/help/download_options.html    

https://nodejs.org/en/download/

אני בחרתי לעבוד עם העורך קוד  VS Code.

 

הקובץ package.json יווצר על ידי הפקודה: 

npm init -y

כדי להתקין את הגרסה האחרונה של Nightwatch יש להריץ את הפקודה:

npm install nightwatch

הקובץ nightwatch.conf.js יווצר על ידי הרצת הפקודה

npx nightwatch

 

שלב הבאה התקנת Selenium:

נריץ את הפקודה

npm install selenium-server

אני בחרתי להשתמש בדפדפני Chrome ו-Firefox, כמובן אפשר להשתמש גם Safari ו-Edge:

npm install chromedriver geckodriver

עכשיו אנו יכולים להתחיל לכתוב את הטסט הראשון.

כתיבת טסט ראשון

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

שלב ראשון נעדכן את קובץ nightwatch.conf.js על ידי הוספת שם ונתיב התיקייה בה נמצאים קבצי הבדיקות.

src_folders:[“./test”]

אהבתי לעבוד עם page objects דבר אשר בהמשך אתייחס אליו. בעיקרון רציתי להריץ בדיקות באתר של הפריימוורק.

להפתעתי פעולות פשוטות כמו פתיחת דפדפן, הכנסת טקסט לשדה חיפוש או מחיקת טקסט לא היה מסובך. על ידי פונקציות בסיסיות כגון:Drop-Down, WaitingForElement ,Navigation Pause Click, Text Input, Keys, יכולתי לבצעה פעולות על האלמנטים. לאחר מציאת אלמנטים ב-DevTools והגדרת CSS selector או-XPath בקוד או בקובץ nightwatch.conf.js והרצתם מטרמינל החזיר לי תוצאה שרציתי. 

Assertion and Expext

ניתן להשתמש בשתי הספריות המובנות Assert ו-Verify. ההבדל בין שתיהן הוא כש-assertion נכשל במקרה של Assertion הטסט עוצר ובמקרה של Verify הטסט מייצר לוג וממשיך לבצעה את השאר ה-Assertions.

בסיס ספריית  Chai Expect, ניתן להשתמש ב-expect namespace.

בשימוש expect ניתן לכתוב קוד בשרשור בסגנון ממשק BDD על ידי:

  • to
  • be
  • been
  • is
  • that
  • which
  • and
  • has
  • have
  • with
  • at
  • does
  • of

browser.expect.element(‘#main’).text.to.contain(‘Testing World Magazine’).before(1000)

browser.expect.element(‘#main’).text.to.not.contain(‘Testing World Magazine’).after(400)

תמיכה בשירותי ענן

BrowserStack ו-Sauce Labs הן פלטפורמות אשר ניתן להריץ בעזרתם כמות גדולה של בדיקות עם סוגים שונים של דפדפנים ומערכות הפעלה.

עבודה עם Page Object Model

POM  (Page Object Model)מאפשר לנו לנהל את הבדיקות שלנו בצורה יותר מסודרת.

נהוג לעבוד עם שתי תיקיות, אחת עבור הבדיקות, אפשר לקרוא tests שיכול להכיל פקודות כמו before after, beforeEach ו-afterEach שמאפשר סדר הרצה, והשני עבור ניתוב ופונקציות שמשתמש במציאת אלמנטים עם שימוש בסלקטורים שניתן לקרוא בשם pages. 

כמובן צריך להגדיר בקובץ package.json:

“Page_objects_path”: [“pages”]

הרצת טסטים

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

ניתן להריץ את הטסטים ללא פתיחת דפדפן במצב headless, לפי tag שהוגדר בקוד, לפי תיקייה או לפי קובץ שנקרא test suite.

npx nightwatch tests/first-ex.js -e chrome --headless

npx nightwatch -e chrome -g tests

npx nightwatch -e chrome –tag

 

 צילומי מסך

ניתן לקבל צילומי מסך של הדף שלם בתיקיה הרצויה ע"י :

saveScreenshot(path/to/fileName.png)

 

או לקבל צילום מסך של חלק הרצוי ע"י:

 

takeElementScreenshot()

קבלת דוחות

קיימים שני סוגי דוחות ב-Nightwatch. הראשון הוא stdout ניתן לקבל בטרמינל והשני קבצי xml

שנוצרו ע"י JUnit output בשימוש Jenkins CLI. 

 Nightwatchמאפשר גם לייצר דוחות מותאמות על ידי Reporter

יתרונות

  • כלי קל לשימוש עבור מישהו שיש לו ידע בסיסי ב-JavaScript. 
  • בעזרת שימוש בספריות מובנות בכלי, מפחית את התלות בתוכנות צד שלישי.
  • שימוש ב-פקודות ו-assertions מותאמים לטסט.
  • הרצת טסטים נוחה מטרמינל.
  • ביצוע הרצה טסטים מיוחדים: tags, group, etc.
  • שימוש קל בסלקטורי CSS/XPath בתוך JS.
  • היכולת להשתלב עם פלטפורמות מבוססי ענן.
  • ניהול נכון של פרויקט ע"י שימוש ב-POM
  • קיים תמיכה מצד החברה ובנוסף קהילה תומכת ב-GITTER

חסרונות

  • אין תמיכה רישמית בתחביר (Syntax) בסגנון BDD
  • כולל ספריית מסגרת (Framework) יחודית משלו, בניגוד לWebdriverIO- המאפשר להשתמש במסגרות בדיקה שונות ובספריות הצהרה שונות (כגון Jasmine, Cucumber, Mocha+Chai) Nightwatch מגיע עם ממשק משלו בסגנון BDD לביצוע Assertions המבוסס על Chai

 

ציון

מענה לצרכים של החברה 7/10

נותן למשתמש חווית שימוש 9/10

תמיכה וקהילה 8/10

סה"כ 8