前兩周趕上項目第一個版本上線,著實忙了一把,畢竟只有兩個人負責。如今已完結,總算喘了一口氣,現在任務就是寫API、測API,許久之前寫過JS前臺調用 項目API,也寫過后臺調用開放的手機號歸屬地查詢,這些僅僅是自己閑暇之余寫的 最為簡單的例子,算是過家家的級別吧,現在就項目各模塊測試API時 注意的點和出現的問題進行記錄。
套路就是
1.新建一個API 項目,引用web項目的dll
2.在API項目中 將要測試的方法全部寫好(new對象,然后引用dll中方法)
3.再新建一測試項目,根據url 拼接參數(API不認參數名和Action名,只識別參數個數)
比如: 測試 web項目中的 A方法時
① API項目中
//調用A方法 public IList<Student> Get(string conn, string Id, string level) { StudentBIZ biz = new StudentBIZ(conn, Id,level); return biz.A(); }
②APITest項目中
string url = "API網址" + "A方法控制器名"; string AllUrl = string.Format("{0}?conn={1}&Id={2}&level={3}", url, conn, Id, level); var b = WebRequestHelper.GetData<Student>(AllUrl); return View(b);
這里 WebRequestHelper 作為 APITest 調用WebAPI 方法的幫助類,針對需要的返回類型去編寫對應的訪問方法,一般都會有Post、Put、Get、Delete 等請求方式,網上也有很完善的Code,不想自己寫,可以直接貼過來自己用。不夠用的時候自己在寫對應的訪問方法,如:
private static string PostWebApi(string url) { var request = HttpWebRequest.Create(url) as HttpWebRequest; request.Method = "Post"; request.ContentType = "application/json; charset=utf-8"; request.Timeout = 3000000; var app = request.Address.Segments[2]; string result = ""; request.ContentLength = 0; // 取得回應資料 using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { using (StreamReader sr = new StreamReader(response.GetResponseStream())) { result = sr.ReadToEnd(); } } return result; }
紅色部分是獲取API項目中 對應方法的回調內容,如果你在API項目中對應的方法下打斷點,調試到這里的時候就會跳轉過去,有時候你想跑去DLL里面的方法中,只要將其web項目打開,不需要運行,直接在調的底層方法下打斷點,程序即可跑進去。比如①中的 biz.A() 方法。
調試的時候有時候會拋出不少異常,最常見的就是 405方法不被允許;其實就是請求方式不對,put\post\get 等等的先屢清楚,然后就是發布服務器,很多時候,本地往往是正常的,一發布到服務器上就尷尬了,各種點擊沒有反應、或者404,一開始是比較頭疼,后來做多了好耐曉得了一些套路,或者說是需要注意的點
1. 404的錯誤,找不到是資源,就是路徑的問題,服務器上發布站點、應用程式的時候對路徑的要求也不一樣,在發布程式的時候,URL前面會帶有一個本地文件夾的名字,這里一定好區分好
2. 點擊按鈕無響應, 這個肯定是程序出了問題,平時在本地寫代碼的時候,就隨手返回一個bool值到前臺,然后彈出成功/失敗,但是部署到服務器上就不同了,一旦出了問題,也不能調試,只能靠猜。。。(笑),當然不是,主要方法下都會記錄日志,看日志找錯誤。此外,對于網頁的調試時,還可以新建一個實體類,寫上bool、string 兩個成員字段,返回前臺的時候,直接返回此對象,string記錄異常信息,正常則不記錄,前天在解析此對象,彈出操作結果(若失敗,則會提示失敗原因)
文章列表