日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自动化测试项目实战 ——12306火车票网站自动登录工具

發(fā)布時間:2024/3/26 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自动化测试项目实战 ——12306火车票网站自动登录工具 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

還記得前幾年春運(yùn),12306火車票預(yù)訂網(wǎng)站經(jīng)常崩潰無法登錄嗎。 今天我們就開發(fā)一個12306網(wǎng)站自動登錄軟件。 幫助您輕松訂票

通過前兩篇博客Fiddler教程和HTTP協(xié)議詳解,我們了解了Web的原理.

Web的原理就是,瀏覽器發(fā)送一個Request給Web服務(wù)器,Web服務(wù)器處理完這個請求之后發(fā)送一個HTTP Response給瀏覽器。

如果我們用自己寫的程序來發(fā)送Request給Web服務(wù)器,然后再捕獲Web服務(wù)器發(fā)回來的Response. 檢查它與期望值值是否一致。 這不就是Web自動化測試嗎? 這樣的自動化測試叫做請求響應(yīng)測試, 別小看這樣的自動化測試。 什么開心農(nóng)場助手,自動投票機(jī)。 網(wǎng)絡(luò)爬蟲都是用這個做的。

閱讀目錄

    • .NET中提供的類來發(fā)送HTTP Request
    • WebClient類的用法
    • 模擬“GET” 方法
    • Cookie 的處理
    • 如何跟HTTPS的網(wǎng)站交互
    • 模擬"POST" 方法
    • 客戶端發(fā)送給服務(wù)端的數(shù)據(jù)進(jìn)行UrlEncode處理
    • 實(shí)例:12306火車票網(wǎng)站登錄工具
    • 源代碼下載

.NET中提供的類來發(fā)送HTTP Request

在System.Net命名工具下, .NET提供了5種方法 可以發(fā)送HTTP Request和取回HTTP Response. 它們分別是

WebClient:

WebRequent-WebResponse:

HttpWebRequest-HttpWebResponse:

TcpClient:

Socket:

這5個類中,最適合的就是HttpWebRequest-HttpWebResponse了, 這個才能滿足我們需要的功能。 順便說下WebClient類的用法

WebClient類的用法

WebClient的用法極其簡單, 主要用于下載文件,或者單純獲取Response. 這個類不能模擬“POST” 的Http Request, 功能很少。

實(shí)例如下:

static void Main(string[] args){// 博客園首頁地址string uri = "http://www.cnblogs.com";WebClient MyWebClient = new WebClient();Stream st = MyWebClient.OpenRead(uri);StreamReader sr = new StreamReader(st);string html = sr.ReadToEnd();sr.Close();st.Close();Console.Write(html);}

模擬“GET” 方法

我們主要是使用HttpWebRequest-HttpWebResponse 這兩個類來做自動化測試.

先看看如何模擬“GET”方法,來打開博客園首頁, 在下面的例子中,設(shè)置了一些 HttpWebRequest的一些屬性

static void Main(string[] args){// 博客園首頁地址string uri = "http://www.cnblogs.com";HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(uri);// 瀏覽器和服務(wù)器交互的方法Req.Method = "GET";// 瀏覽器的類型,IE或者FirefoxReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1;)";// 是否允許自動重定向(自動跳轉(zhuǎn))Req.AllowAutoRedirect = true;// 自動跳轉(zhuǎn)的次數(shù)Req.MaximumAutomaticRedirections = 3;// 超時時間50000=50秒Req.Timeout = 50000;// 是否建立TCP持久連接Req.KeepAlive = true;HttpWebResponse response = (HttpWebResponse)Req.GetResponse();Stream stream = response.GetResponseStream();Encoding myEncoding = Encoding.GetEncoding("UTF-8");StreamReader streamReader = new StreamReader(stream, myEncoding);string html = streamReader.ReadToEnd();Console.Write(html);}

Cookie 的處理

還有一個很重要的問題是,我們?nèi)绾翁幚鞢ookie? 程序和Web服務(wù)器的交互中, 程序需要把Cookie發(fā)送給Web服務(wù)器, Web服務(wù)器也會給程序發(fā)送新的Cookie. 我們怎么模擬這個呢?

C#提供了 CookieContainer 對象。 HttpWebRequest發(fā)送Request時會使用CookieContainer 中的Cookie. HttpWebResponse返回Response后,會自動修改CookieContainer 對象的Cookie. 這樣的話,Cookie就不用我們操心了。 用法非常簡單

CookieContainer MyCookieContainer = new CookieContainer();HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(uri);Req.CookieContainer = MyCookieContainer;

如何跟HTTPS的網(wǎng)站交互

我們用瀏覽器打開HTTPS的網(wǎng)站,如果我們沒有安裝證書,通常頁面會顯示 “此網(wǎng)站的安全證書有問題”,我們必須再次點(diǎn)"繼續(xù)瀏覽此網(wǎng)站(不推薦)"才能查看頁面信息. 如下圖所示


那么我們的程序,如何忽略HTTPS證書錯誤呢?

只要在程序中加入下面這段代碼,就可以忽略HTTPS證書錯誤,讓我們的程序能和HTTPS網(wǎng)站正確的交互了.

System.Net.ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) =>{return true;};

模擬"POST" 方法

POST和GET的區(qū)別在于, POST會把數(shù)據(jù)放在Body里面發(fā)送給Web服務(wù)器. 代碼如下

public static string GetResponse(string url, string method, string data){try{HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);req.KeepAlive = true;req.Method = method.ToUpper();req.AllowAutoRedirect = true;req.CookieContainer = CookieContainers;req.ContentType = "application/x-www-form-urlencoded";req.UserAgent = IE7;req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";req.Timeout = 50000;if (method.ToUpper() == "POST" && data != null){ASCIIEncoding encoding = new ASCIIEncoding();byte[] postBytes = encoding.GetBytes(data); ;req.ContentLength = postBytes.Length;Stream st = req.GetRequestStream();st.Write(postBytes, 0, postBytes.Length);st.Close();}System.Net.ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) =>{return true;};Encoding myEncoding = Encoding.GetEncoding("UTF-8");HttpWebResponse res = (HttpWebResponse)req.GetResponse();Stream resst = res.GetResponseStream();StreamReader sr = new StreamReader(resst, myEncoding);string str = sr.ReadToEnd();return str;}catch (Exception){return string.Empty;}}

客戶端發(fā)送給服務(wù)端的數(shù)據(jù)進(jìn)行UrlEncode處理

需要注意的是Web客戶端發(fā)給Web服務(wù)端的數(shù)據(jù)如果包含空格和特殊字符(比如:漢字) 就要進(jìn)行UrlEncode處理。

解決這個問題很簡單。

在C#中Add reference 添加System.Web 組件

添加System.Web命名空間, 然后調(diào)用HttpUtility.UrlEncode()方法就可以進(jìn)行編碼了

實(shí)例:12306火車票網(wǎng)站登錄工具

2011年鐵道部推出了12306火車票預(yù)訂網(wǎng)站, 可是因?yàn)樵L問者太多,經(jīng)常崩潰。根本登錄不了。網(wǎng)站訪問高峰的時候,根本沒辦法登錄成功, 一直會報(bào)錯(如下圖)


下面我們就運(yùn)用上面的知識,來開發(fā)一個自動登錄的工具

首先我們用瀏覽器去打開12306網(wǎng)站去登錄, 同時打開Fiddler去抓包分析,看看瀏覽器是如何和Web服務(wù)器交互的。

通過抓包分析,我們發(fā)現(xiàn)登錄其實(shí)很簡單。就是把用戶名,密碼和驗(yàn)證碼通過"POST"方法提交給服務(wù)器。如下圖所示



在Fiddler中我們點(diǎn)擊Inspectors tab->TextView Tab下, 能看到提交給Web服務(wù)器的數(shù)據(jù)是

string data="loginUser.user_name=thisisuserName&nameErrorFocus=&user.password=thispassword&passwordErrorFocus=&randCode=CF99&randErrorFocus=";

我們把用戶名,密碼,驗(yàn)證碼換成變量,然后Post給Web服務(wù)器就可以了。

登錄的時候需要輸入驗(yàn)證碼。 很幸運(yùn)的是12306網(wǎng)站在這里有個bug, 當(dāng)驗(yàn)證碼圖片沒有主動刷新的時候,老的驗(yàn)證碼一直可以用。 這樣的話我們的工具用老的驗(yàn)證碼不停地給服務(wù)器發(fā)送登錄的HttpRequest,直到登錄成功。

登錄的核心代碼如下, 實(shí)際的代碼比這個復(fù)雜,要寫成循環(huán)調(diào)用,還要寫成多線程,完整的請參考源代碼

具體代碼為

string data = "loginUser.user_name=" + userName + "&nameErrorFocus=&user.password=" + password + "&passwordErrorFocus=&randCode=" + code + "&randErrorFocus=focus"; string loginUrl = "https://dynamic.12306.cn/otsweb/loginAction.do?method=login"; string afterLogin = HttpHelper.GetResponse(loginUrl, "POST", data);

源代碼下載

運(yùn)行后效果如下



完整的代碼可以去我的公眾號獲取!

最后:下方這份完整的自動化測試視頻學(xué)習(xí)教程已經(jīng)整理上傳完成,朋友們?nèi)绻枰梢宰孕忻赓M(fèi)領(lǐng)取 【保證100%免費(fèi)】

總結(jié)

以上是生活随笔為你收集整理的自动化测试项目实战 ——12306火车票网站自动登录工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。