הקדמה
במאמר זה, אדגים את השימוש בפונקציית Telnet מותאמת אישית שיצרתי כתנאי מקדים להרצת בדיקות ה-E2E שלנו. הפונקציה משתמשת ב-API של Java שמתקשר עם קונסולת PowerShell בשם jPowerShell.
הבעיה
מערכות מסוימות (לדוגמה, שרת דואר) חסומות ל-ping, ניווט ישיר בממשק המשתמש באמצעות Selenium או קריאת API. מערכות אלו מקבלות רק חיבור Telnet בפורטים מסוימים. עלינו לבדוק מערכות אלו כחלק מבדיקות ה-E2E שלנו. במקום להריץ בדיקות E2E רבות שייכשלו מכיוון שהשרת/שירות אינו זמין, אנו רוצים לוודא שחיבור ה-Telnet הצליח ורק אז עלינו להמשיך ולבצע את הבדיקות שלנו.
הפעלת Telnet ב-Windows
כדי להפעיל את Telnet, עברו לתכונות Windows והפעילו את תכונת לקוח ה-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, הגענו לפתרון תכנותי התואם למסגרת אוטומציית הבדיקות שלנו.
בדיקות מהנות!