天天看點

[Windows PowerShell07]-Windows Session 互動的解決方案

         在自動化做CodeUI Test的時候,我們希望在Deploy Server上使用Invoke或者PowerShell PSSession 遠端調用MSTest 跑 TestCase,通過TestCase 連ALM,然後驅動Clinet端的QTP,這樣來完成Automation的過程。這個過程中我們會發現使用PowerShell無論是使用Invoke還是PSSession調MSTest都會失敗,因為TestAgent不支援遠端調用的方式。那麼為什麼不支援呢.因為MSTest和QTP的agent不在同一個Session,在windows XP 之後的Windows系統都對Session的管理方式都有所改變。對于XP來說,服務和應用程式都在一個session裡面。

         對于xp之後的系統,服務和應用程式在不同的session。不同session之間是不可以互動的。這導緻在XP環境下通過service與桌面互動的方式來解決上述自動化測試的問題的解決方案也不成立。網上有一些解決session穿透問題的方法,寫得比較全面,也很好,對于解決這個問題來說,顯得有些複雜。PowerShell作為伺服器管理的一個重要的腳本語言,能否對于這種問題有較好的解決方案呢?答案是有。

        微軟提供了一個跨伺服器調用的利器-psExec。關于psExec的詳細介紹及其用法見MSDN官方網站:http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

其中值得一提的是pxExec可以指定被遠端調用的應用程式在哪個(些)CPU上運作,也可以指定被遠端調用的應用程式在哪個session裡面運作,我們剛才說到我們的問題就是要讓QTP和MSTest在同一個session裡面運作。

        我們先使用powershell擷取winlogon程序所在的session。然後我們遠端啟動PowerShell,在PowerShell裡面使用MSTest,這個可以使用一個腳本檔案。後面的工作就順理成章了。那麼我們如何在啟動PowerShell的同時去讓PowerShell run 一個腳本呢?這就涉及到給程序傳參數。這種使用方式非常普遍,MSDos也支援這種方式,也是微軟推崇的一種方式,很多微軟提供的工具都支援這種方式。微軟的WIX可以提供個性化的參數設定及支援,幫助做自動化安裝部署,這個後面再闡述。

        這樣我們做起來就很簡單了。

        1) 擷取winlogon 的 session

        $SessionID = (Get-Process -ProcessName "winlogon").SessionID

        2) 遠端啟動powershell

        D:\psExec \\192.168.1.197 -u administrator -p 1234 -i $SessionID powershell -File D:\runQTP.ps1

        3) 連接配接ALM,驅動ATP等

         C# code ...

        4)搜集結果

        runQTP.ps1很簡單

        MSTest /testcontainer:D:\testproject.dll

        注意:可能需要設定MSTest的環境變量。

繼續閱讀