דלג לתוכן
חזור

אוטומציית בדיקות - עבודה עם רשתות באמצעות Java ו-PowerShell

פורסם:

הקדמה

במאמר זה, אדגים את השימוש בפונקציית Telnet מותאמת אישית שיצרתי כתנאי מקדים להרצת בדיקות ה-E2E שלנו. הפונקציה משתמשת ב-API של Java שמתקשר עם קונסולת PowerShell בשם jPowerShell.

הבעיה

מערכות מסוימות (לדוגמה, שרת דואר) חסומות ל-ping, ניווט ישיר בממשק המשתמש באמצעות Selenium או קריאת API. מערכות אלו מקבלות רק חיבור Telnet בפורטים מסוימים. עלינו לבדוק מערכות אלו כחלק מבדיקות ה-E2E שלנו. במקום להריץ בדיקות E2E רבות שייכשלו מכיוון שהשרת/שירות אינו זמין, אנו רוצים לוודא שחיבור ה-Telnet הצליח ורק אז עלינו להמשיך ולבצע את הבדיקות שלנו.

הפעלת Telnet ב-Windows

כדי להפעיל את Telnet, עברו לתכונות Windows והפעילו את תכונת לקוח ה-Telnet:

הפעלת Telnet בחלונות

Telnet לשירות

דוגמה לפקודת Telnet לשרת ה-SMTP של גוגל בפורט 25:

telnet smtp.gmail.com 25

זוהי התוצאה של חיבור מוצלח:

220 smtp.gmail.com ESMTP g24sm10119251wmh.45 - gsmtp

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

Telnet ב-PowerShell

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

New-Object System.Net.Sockets.TcpClient("smtp.gmail.com", 25)

התגובה הייתה:

Client              : System.Net.Sockets.Socket
Available           : 0
Connected           : True
ExclusiveAddressUse : False
ReceiveBufferSize   : 65536
SendBufferSize      : 65536
ReceiveTimeout      : 0
SendTimeout         : 0
LingerState         : System.Net.Sockets.LingerOption
NoDelay             : False

כדי לחלץ רק את הערך “Connected” מאובייקט זה, השתמשתי באופרטור ה-pipe של PowerShell ובחרתי רק במאפיין זה:

New-Object System.Net.Sockets.TcpClient("smtp.gmail.com", 25) | Select -ExpandProperty Connected

התגובה היא:

True

Telnet ב-Java באמצעות PowerShell

עם הידע הזה ביד, הצעד הבא הוא ליצור פונקציה המקבלת 2 פרמטרים: ה-IP של השרת והפורט שלו. הפונקציה צריכה לבצע Telnet ולהחזיר תגובה בוליאנית עבור סטטוס הצלחת ה-Telnet. הפונקציה נראית כך:

public boolean canTelnet(String host, int port) {
    PowerShellResponse response = PowerShell.executeSingleCommand(String.format(
        "New-Object System.Net.Sockets.TcpClient('%s', %d) | Select -ExpandProperty Connected", host, port));
    return response.getCommandOutput().equalsIgnoreCase("True");
}

כעת, עם שילוב של Java ו-PowerShell, בדיקת ה-Telnet שלנו נראית כך:

@BeforeTest
public void testConnection() throws Exception {
    Assert.assertTrue(canTelnet("smtp.gmail.com", 25));
}

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

לסיכום

במאמר זה, ראינו את הבעיה שעמדה בפנינו כאשר היינו צריכים לבצע סוג של “בדיקת תקינות” בשרתים הנגישים רק באמצעות Telnet. לאחר מכן, באמצעות PowerShell ו-Java, הגענו לפתרון תכנותי התואם למסגרת אוטומציית הבדיקות שלנו.

בדיקות מהנות!


הציעו שינויים

מוכנים לבנות את מפת הדרכים שלכם? נתחיל כאן


הפוסט הקודם
אוטומציית בדיקות - שיפור קריאות הקוד באמצעות תבנית הבנאי (Builder Pattern)
הפוסט הבא
אוטומציית בדיקות - Selenium WebDriver Java CLI באמצעות JShell