C 自動化測試1 模擬post,get

2022-02-20 09:54:27 字數 3733 閱讀 3356

還記得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 介面 自動化測試指令碼 執行自動化測試指令碼 輸出執行...