אלו שיש להם נסיון עם QTP בעבר יודעים כי עבודה עם QTP = עבודה עם אובייקטים, ישנן 2 צורות עבודה עם אובייקטים בכלי:
- עבודה מול ה-Object Repository – בה האובייקט מוגדר לפני הריצה ונשמר במבנה נתונים פנימי של הכלי
- עבודה עם Descriptive Programing – בה אני מגדיר את האובייקט בזמן הריצה, בזמן זה הוא נשמר בזיכרון הנדיף ונמחק עם סיום התוכנית.
לשתי השיטות יתרונות וחסרונות והשימוש בהן תלוי באופי העבודה , כעת לא נכנס לזה יותר מידיי, רק מה שחשוב לדעת הוא כי דרך הזיהוי של 2 השיטות כאן פועלת באותו האופן, בשביל להבין את דרך הזיהוי של מנוע ה-QTP, עלינו תחילה להבין מהו Reflection , כיצד משתמשים בו ולמה הוא נועד.
אך מעט לפני כן נצטרך להבדיל בין הטכנולוגיות השונות של המוצר הנבדק, בין אם הוא נכתב מעל גבי ה-web , JAVA , .NET או משהו אחר, ל-QTP יש Add-Ins שונים שהן למעשה אוסף של ספריות (וקוד של הכלי כמובן), עבודה על ה-Add In הנכון תספק לנו API מעל הטכנולוגיה של המוצר הנבדק. העבודה ב-QTP עם מגוון טכנולוגיות אמנם קצת שונה אך העיקרון הינו אותו הדבר.
Reflection (בשמה העברי – השתקפות) היא היכולת של קוד לתחקר קוד אחר במערכת או במילים אחרות לתחקר אובייקטים בקוד, ניתן לזהות טיפוסים שונים, לקרוא לקלאסים, מתודות, Attributes , לשנות משתנים ועוד, כל התהליך הזה מתבצע בזמן ריצה.
מתחת למכסה המנוע ה-QTP מבצע את זיהוי האובייקטים שלו בעזרת פרוסס שנקרא Smart Identification Process , הפרוסס הזה לוקח את ה Properties הרלוונטים מהמשתמש מה-Object Repository, ומשווה אותם ל-Properties שמצא קלאסים של המוצר הנבדק. נשאלת עכשיו השאלה , איך בדיוק הוא מוצא את אותם Properties מהמוצר הנבדק ? פה נכנס ה-Reflection , ה-QTP יודע לתחקר את האובייקטים שהוא מוצא בחלון.
דוגמא מצויינת של שימוש ב-Reflection ניתן למצוא בלינק המופיע למטה, בה התוכנית לוקחת קובץ Assembly (שזה EXE או DLL ) , טוענת אותו לזכרון (בשיטה שנקראת סיריאליזציה), יוצרת ממנו טיפוס חדש שממנו יוצרים אח"כ אובייקט חדש שהוא למעשה אובייקט המשתקף (Reflected) לאובייקט המקורי, עליו ניתן לעשות מניפולציות ככל העולה על רוחנו כמו שרואים בדוגמא שבלינק לפוסט אחר שכתבתי כאן: Reflection לבדיקות אוטומטיות
עכשיו כשקראנו קצת על Descriptive Programing ואנו יודעים מה זה Reflection , אנחנו מתחילים להבין שלמעשה DP הוא לא אחר מאשר ……. סוג של Reflection , בו אנו מגדירים את האובייקט בזמן ריצה עם כל ה-Properties עליו ואח"כ עושים מניפולציות בשביל לשנות אותו.
קריאה נוספת:
Reflection בוויקיפדיה: http://en.wikipedia.org/wiki/Reflection_%28computer_programming%29
הסבר מפורט על Smart Identification Process –
http://www.learnqtp.com/how-qtp-identifies-objects-complete-refresher