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

2017年5月9日 星期二

不是姐Client JS不支援patch,put,delete,是哥server端不支援吶~


最近在改版公司的社團內容,包含前後台(權限bra bra.....)

這種響應式網頁,其實打從小的開始在江湖打混以來,做過類似的東西應該也超過上百次
(英語:Responsive web design,通常縮寫為RWD)

但RWD、CRUD這些相關的名詞,卻是近幾年才開始炒熱出現的名詞

有些人其實一直在做RWD or CRUD的事只是他們自己不知道


restful 風格在這有很清楚的描述->http://www.restapitutorial.com/lessons/httpmethods.html

 偶爾發現某些網站的網址,會跟隨著內容和action改變

 這樣會很清楚說現在我在網站的哪個位置、哪個功能 ~ 當下覺得超酷的


透過MVC的[RouteAttribute]公開路由設定,來達到restful網址設定

 再搭配HttpAction(GET、POST、PATCH、PUT、DELETE),透過action來指定在MVC裡的controller哪個 action

 在這裡說明一下這些action的差別 連結已在左邊
get:取得我們想要的資料。
post:新增一項資料。(如果存在會新增一個新的)
put:新增一項資料,如果存在就覆蓋過去。(還是只有一筆資料)。
patch:附加新的資料在已經存在的資料後面。(資料必須已經存在,patch會擴充這項資料)
delete:刪除資料。

 但問題來了,IIS幾乎都不支援PATCH、PUT、DELETE的ajax method啊~~~








通常可以透過更改IIS設定來達到支援patch等的功能,不過如果不想影響IIS上的設定進而影響了其他WEB
 那就透過在web.config裡加入部份設定來達到支援patch,put,delete的目地

  <system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

BinGo,所以不是jquery不支援patch,put,delete,這跟jquery無關,因為jquery裡的ajax明明就可以自行定義method

 真正的前端是要連後端都有摸到才是真正叫前端,人不可能一人而活,程式也是

2017年3月8日 星期三

關於老虎證券Tiger Broker

關於老虎證券Tiger Broker...其實2017/3/9的新聞出來時,它們在這之前已經佈局至少半年以上

剛好小的從事金融相關工作,打聽到原來它有跟在下的公司連繫過,因為它沒有掛牌所以就不了了之

有朋友在問我的看法,這中間其實有一點故事,我就慢慢帶領看倌們進入檯面下的另一個金融交易世界....


所謂的地下期貨,金融交易  其實說穿了就是沒有經過台灣當地官方申請的金融業務(沒有掛牌)

那我想國外的股票、ETF、ADR、基金的金融商品...怎麼辦呢?台灣券商不可能這麼遜,不能讓客戶買國外商品吧?

台灣本土券商當然也可以讓你買國外金融商品,不是沒有,只是叫複委託

但是手續費很高,最低申購門檻通常也是10萬台幣起跳,再加上匯率的計算,賺的錢可能都不夠付手續費

對券商而言錢要轉銀行也是個很麻煩的業務

光聽複委託這個名字你就知道這其實是你委託台灣券商,然後台灣券商再委託國外銀行或國外券商做下單

這中間在不同的銀行之間,錢轉來轉去,每轉一次手續費匯率都重新計算

如果你買的金融商品用幣別很泠門的例如委內瑞拉博利瓦,台灣券商還得找到在這個世界上願意用泠門幣別幫你交易的銀行

我還聽過庫存都出清賣了但是錢轉不回台灣的實真故事,券商也是很痛苦的

總之羊毛出在羊身上,後面就嘿嘿嘿各位自己腦補


再跳一下回來主題

在這段先幫各位對於交易上的風險心裡舖個底,地下金融業務其實已經行之有年很久了,其實就是到台灣境外開戶,然後在台灣透過網路、APP、MT4、Excel...來下單交易

網路也很多在教人家境外交易的,他們都找好了在國外牌子、信用好、背景大的的交易經紀商,例如Roboforex、福匯....

英國霸菱銀行兩百年歷史夠久了吧,霸菱牌基金很有名吧,還不是XXXX的倒了,IronFX鐵匯也是倒帳不還錢卻還可以繼續掛牌營業出了名的嘿嘿嘿  https://read01.com/xDLan3.html

那你一定奇怪了怎麼這麼多人明知會有被倒會的風險,還這麼不怕死前撲後繼的投錢去玩

我只能說獲利、對帳單,和各式各樣的行銷話術太迷人了,讓人看到+淨損益就失去自我(創造了一個未來的風景把你自己的未來賣給你自己)

真真實實的讓人忽略了交易上的風險


那我們再來看看這個老虎證券Tiger Broker又是找了誰做靠山

這篇文章提到它的保障平台~https://www.cmoney.tw/notes/note-detail.aspx?nid=67104

它保護機構和保險公司都在國外,那台灣呢?我又要嘿嘿嘿了,它可沒有說你拿台灣護照到國外就比照外國人辦理

(拜託請不要在這裡筆戰國籍命名獨立政治的問題,完全非本文的主意,也請各大媒體網工blog筆者不要斷章取義各自發揮!)

它交易商其實是對岸的brabrabra.....https://www.interactivebrokers.com.hk/cn/home.php

我沒有說它不好,也沒說他不可信任,但你不要問我倒底能不能在這交易商裡投錢進去然後下單交易

如果今天有銀行理專跟我推銷說,XXX基金證券獲利50%穩賺不賠0風險,我只會嘿嘿嘿泠笑回應



想玩期貨?想多賺錢?想買選擇權?想買權證以小博大?~ 嘿嘿嘿~

我寧願實在地好好把目前的工作做好,腳踏實地的走在路上

2017年1月17日 星期二

jquery 1.9 版本拔除jQuery.browser() 之前因後果


現在js套件多如牛毛,一個依賴一個,往上繼承function

例如jquery幾乎是套件的基本大宗,我認為至少全世界有80%的網站都有使用到jquery相關系列的js framework,無論新舊

問題是疊床架屋的前端系統(說系統真的不為過啊~前端js的複雜度已經不可往日而語)
如果最根本的jquery給它換了版本,幾乎網頁原有JS功能都會出現Uncaught TypeError

新手看到chrome的console出現紅色的error肯定滿腔挫折
老手看到就會開始找哪隻js開始往上追追追(如果你也是這樣情況的話,不要懷疑,我覺得你算老手了)

Uncaught TypeError: Cannot read property 'msie' of undefined

stackoverflow也是我常googlge到解決方案的一個問題討論網站

http://stackoverflow.com/questions/14923301/uncaught-typeerror-cannot-read-property-msie-of-undefined-jquery-tools


這篇英文問題是說它遇到了這個msie undefined的問題,原因是因為

jquery 1.9 的jQuery.browser()方法拔掉了,導致相依套件一拖拉庫帶出了問題

當然,你會遇到的問題,別人早就遇到了,大部份是因為問的方向不對或是沒問到重點,所以覺得沒找到答案

 好心人也幫忙把移失的那.browser方法找回來,補上這個就幾乎解了
jQuery.browser = {};
(function () {
    jQuery.browser.msie = false;
    jQuery.browser.version = 0;
    if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
        jQuery.browser.msie = true;
        jQuery.browser.version = RegExp.$1;
    }
})();

為什麼我說幾乎,而沒說它完全解決呢

因為我知道一定會有人沒搞清楚js的載入順序而放錯位置認為它並沒有解決問題

問一下身旁的同事囉~高手在民間吶