還記得2023年春運,12306火車票預訂**經常崩潰無法登入嗎。 今天我們就開發乙個12306**自動登入軟體。 幫助您輕鬆訂票
通過前兩篇部落格fiddler教程和http協議詳解,我們了解了web的原理.
web的原理就是,瀏覽器傳送乙個request給web伺服器,web伺服器處理完這個請求之後傳送乙個http response給瀏覽器。
如果我們用自己寫的程式來傳送request給web伺服器,然後再捕獲web伺服器發回來的response. 檢查它與期望值值是否一致。 這不就是web自動化測試嗎? 這樣的自動化測試叫做請求響應測試, 別小看這樣的自動化測試。 什麼開心農場助手,自動投票機。 網路爬蟲都是用這個做的。
閱讀目錄
.net中提供的類來傳送http request
webclient類的用法
模擬「get」 方法
cookie 的處理
如何跟https的**互動
模擬"post" 方法
客戶端傳送給服務端的資料進行urlencode處理
例項:12306火車票**登入工具
在system.net命名工具下, .net提供了5種方法 可以傳送http request和取回http response. 它們分別是
這5個類中,最適合的就是httpwebrequest-httpwebresponse了, 這個才能滿足我們需要的功能。 順便說下webclient類的用法
例項如下:
static void main(string args)我們主要是使用httpwebrequest-httpwebresponse 這兩個類來做自動化測試.
先看看如何模擬「get」方法,來開啟首頁, 在下面的例子中,設定了一些 httpwebrequest的一些屬性
static void main(string args)還有乙個很重要的問題是,我們如何處理cookie? 程式和web伺服器的互動中, 程式需要把cookie傳送給web伺服器, web伺服器也會給程式傳送新的cookie. 我們怎麼模擬這個呢?
c#提供了 cookiecontainer 物件。 httpwebrequest傳送request時會使用cookiecontainer 中的cookie. httpwebresponse返回response後,會自動修改cookiecontainer 物件的cookie. 這樣的話,cookie就不用我們操心了。 用法非常簡單
那麼我們的程式,如何忽略https證書錯誤呢?
只要在程式中加入下面這段**,就可以忽略https證書錯誤,讓我們的程式能和https**正確的互動了.
system.net.servicepointmanager.servercertificatevalidationcallback += (se, cert, chain, sslerror) => ;post和get的區別在於, post會把資料放在body裡面傳送給web伺服器. **如下
view code
需要注意的是web客戶端發給web服務端的資料如果包含空格和特殊字元(比如:漢字) 就要進行urlencode處理。
解決這個問題很簡單。
在c#中add reference 新增system.web 元件
新增system.web命名空間, 然後呼叫httputility.urlencode()方法就可以進行編碼了
2023年鐵道部推出了12306火車票預訂**, 可是因為訪問者太多,經常崩潰。根本登入不了。**訪問高峰的時候,根本沒辦法登入成功, 一直會報錯(如下圖)
下面我們就運用上面的知識,來開發乙個自動登入的工具
首先我們用瀏覽器去開啟12306**去登入, 同時開啟fiddler去抓包分析,看看瀏覽器是如何和web伺服器互動的。
通過抓包分析,我們發現登入其實很簡單。就是把使用者名稱,密碼和驗證碼通過"post"方法提交給伺服器。如下圖所示
在fiddler中我們點選inspectors tab->textview tab下, 能看到提交給web伺服器的資料是
string data="loginuser.user_name=thisisusername&nameerrorfocus=&user.password=thispassword&passworderrorfocus=&randcode=cf99&randerrorfocus=";我們把使用者名稱,密碼,驗證碼換成變數,然後post給web伺服器就可以了。
登入的時候需要輸入驗證碼。 很幸運的是12306**在這裡有個bug, 當驗證碼沒有主動重新整理的時候,老的驗證碼一直可以用。 這樣的話我們的工具用老的驗證碼不停地給伺服器傳送登入的httprequest,直到登入成功。
登入的核心**如下, 實際的**比這個複雜,要寫成迴圈呼叫,還要寫成多執行緒,完整的請參考源**
具體**為
執行後效果如下
過段時間再寫篇部落格, 我將介紹12306火車票自動預訂工具的開發過程。 此工具可以自動登入,自動下單。 買火車票就是小case了。
附: 自動化測試 系列教程, (**中, 敬請期待)
自動化測試 (一) 12306火車票**自動登入工具
自動化測試 (二) 連連看外掛程式
自動化測試 (三) web自動化測試原理
自動化測試 (四) 自動解除安裝軟體
自動化測試 (五) 讀寫64位作業系統的登錄檔
自動化測試(1)
一 為什麼要進行自動化測試 1 解決 回歸測試 2 解決 壓力測試 3 解決 相容性測試 4 提高測試效率,保證產品質量 回歸測試 專案在發新版本之後對之前的功能進行驗證 壓力測試 可以理解為多使用者同時去操作軟體,統計軟體伺服器處理多使用者請求的能力 相容性測試 如針對web測試,可以對不同瀏覽器...
自動化測試 實戰1
媽呀。老淚縱橫。終於在老大的n次幫助下。執行出來了。我這只小菜鳥不得不驚嘆於自動化的神奇。觸屏站自助查詢 1 點查詢按鈕點不過去 public void nextstep throws exception 2 明明證件號碼取到了值,但是就輸不進控制項裡去,原來是這控制項的名字不唯一,老大幫我在web...
自動化測試 web自動化測試
自動化 由機器裝置代替人為完成制定目標的過程 優點 提高工作效率 減少勞動力 產品規格同一標準 批量生產 自動化測試 讓程式代替人為去驗證程式功能的過程,即在預設條件下執行程式系統 流程確定 搭建自動化框架 編寫測試用例,將其轉化為soupui 介面 自動化測試指令碼 執行自動化測試指令碼 輸出執行...