2017年6月29日 星期四

誤打誤撞的.net UNIT TEST Project

誤打誤撞的.net UNIT TEST Project

使用firefox外掛套件產生c#測試專案語法

1.找Firefox 套件selenium IDE 安裝,有些人在firefox broswer的右上角會出現selenium icon,但姐運氣不好沒出現,沒關係,在menu裡一樣可以找得到

2.利用selenium IDE 套件錄製步驟
包括開啟指定的url,登入後畫面UI的呈現
需注意的是在測試時多半是以html裡的id來取得element(有些element沒有id的,工具使用element xpath找畫面UI時很容易失敗),好驗證測試的結果,為此姐還特地讓UI的element補上了id

3.利用selenium IDE 套件執行一下剛剛錄製的步驟
(在左上有一個速度拖拉bar調到slow)
你會看到firefox在逐步執行你剛剛錄的動作,確認有沒有問題,有時候可能JS執行錯誤需要修正一下,也可以自己再insert new command,或是在selenium IDE套件開啟的狀態下,在執行網頁上找一個你想驗證的element,然後指著element按右鍵,在下面會有一個assertText id=@#$%^&*....的選項,selenium IDE套件會把你想要的element寫到步驟裡去

4.利用selenium IDE 套件匯出
其實我不太清楚Remote Control和WebDriver差在哪裡,因為在c#裡使用WebDriver所以我選這個,而且我只需要裡面webdriver的步驟而已,其他method並沒用到

還希望知道的朋友幫忙說明一下這之間的差別





這時候差不多完成.net測試專案的1/2.....姐知道你累了,我也是覺得有些麻煩
...但前面準備UI的測試腳本已經OK,撐一下!一鼓作氣一次完成!


5.在.net IDE介面裡,到Nut Get封裝管理員裡安裝套件selenium webdriver

6.下載geckodriver.exe放到bin目錄裡,selenium 套件靠它create web broswer instance
https://github.com/mozilla/geckodriver/releases


7.-->3秒鐘快速解釋測試專案裡的方法元素
在這裡 請容 姐 快速簡介一下關於測試專案裡的方法,以便於後面快速上手
一般來說測試專案裡都需要
 // Arrange 建立物件(例如取資料用的物件)
 // Act 執行(物件的執行方法)
 // Assert (驗證的方法)
所以你的專案(測試目標)本身要設計寫的容易被測試(這需要時間和經驗的累積,沒關係慢慢來,再厲害的大神第一次也都是撞的滿頭包)

然後.net裡測試專案有很多attribute(我指的是method前上方第一行中括號那個)
我用到的有[TestClass][ClassInitialize][TestMethod][ClassCleanup()]
網路上我有查到TestInitialize ,TestCleanup但實際放到專案裡我能用的是上面4個
無論你程式method擺放位置
它在.net的測試總管裡執行順序永遠會是[TestClass]->[ClassInitialize]->[TestMethod]->[ClassCleanup()]
這樣你就可以在測試前insert一些測試資料,測試結束之後把資料刪除

7. Net IDE載入剛剛Firefox selenium IDE pluging錄製的步驟
剛剛用firefox的selenium IDE套件匯出的c#檔案,這時派上用場了
點開後找[Test]開頭的method,
 driver.FindElement(By.Id("aLogin")).Click();
driver.FindElement(By.Id("idUserName")).Click();
driver.FindElement(By.Id("idPassword")).Click();...................
把步驟copy到你開測試專案裡的Test Method

8.你說沒有Method?好啦,我知道你要sample Code...

public class 測試web的類別名稱
    {
        private static IWebDriver driver; //提供一個web driver
        private static StringBuilder verificationErrors;//記錄error用
        private bool acceptNextAlert = true; //步驟是否允許下一步

        [ClassInitialize]
        public static void Initialize(TestContext testContext)
        {
            driver = new FirefoxDriver();
            baseURL = "開啟web時指向的網址";
            verificationErrors = new StringBuilder();;//記錄erro初始化
        }

        [ClassCleanup()]
        public static void Cleanup()
        {
            try
            {
                driver.Quit();
            }
            catch (Exception)
            {
                // Ignore errors if unable to close the browser
            }
            //Assert.AreEqual("", verificationErrors.ToString());
        }

        [TestMethod]
        public void Web_Forestage_Club_31_Normal_Login_Authority()
{
//剛剛錄的步驟貼在這裡....
}

}

9.Net的測試總管裡找到你的測試專案,執行it
我第一次寫測試時還想說。。。奇怪,怎麼要執行它的時候跟我說這是類別庫無法直接起始

然後會議討論時提出來問有寫的同事,他說這你就要了解.net的測試了,它有他自己的測試方法,要學習去用它的測試總管

我如果寫到這就ending,不會的人大概看了會想扁人,就是不會才來看文章才會問
感覺是在繞圈圈不肯教別人怎麼弄,如果今天是不會的人來問我,我本人不會這麼無情的回答


測試專案跟一般開發時寫web,console或winforn,exe不一樣,它編譯後的確是dll檔案
在測試->視窗->測試總管,開啟後,會看到你的測試專案在裡面,選取你的專案執行或偵測

End.
希望在code的路上有幫到需要的人.Good luck