• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
人生之路,职业之路
读书使人充实,交谈使人机敏,写记使人精确;
“动因+兴趣”——决心-持之以恒-见效
博客园    首页    新随笔    联系   管理    订阅  订阅
自动化测试--响应请求测试(.net)

Web运行原理简单地说是“浏览器发送一个HTTP Request到Web服务器上,Web服务器处理完后将结果(HTTP Response)返回给浏览器”。

通常测试一个web api是否正确,可以通过自己coding方式模拟向Web服务器发送Http Request(设置好各参数),然后再通过捕获Web服务器返回的Http Response并将其进行解析,验证它是否与预期的结果一致。

.net中提供的Http相关的类                                                                              

主要是在命名空间System.Net里,提供了以下几种类处理方式:

WebClient

WebRequest WebResponse

HttpWebRequest HttpWebResponse

TcpClient

Socket

(1)使用WebRequest 获取指定URL的内容测试code

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.IO;
 7 using System.Net;
 8 
 9 namespace Testing01
10 {
11     class WebRequestTest
12     {
13         static void Main(string[] args)
14         {
15             string url = @"http://www.baidu.com";
16             //string html = TestWebClient(url);
17             //string html = TestWebRequest(url);            
18             string html = TestHttpWebRequest(url);            
19             Console.WriteLine(html);
20             Console.Read();
21         }
22 
23         /// <summary>
24         /// 使用WebClient发出http request
25         /// </summary>
26         /// <param name="url"></param>
27         /// <returns></returns>
28         public static string TestWebClient(string url)
29         {
30             Console.WriteLine("Testing WebClient......");
31             WebClient wc = new WebClient();            
32             Stream stream = wc.OpenRead(url);
33             string result = "";
34             using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
35             {
36                 result = sr.ReadToEnd();
37             }
38             return result;
39 
40         }
41 
42         /// <summary>
43         /// 使用WebClient发出http request
44         /// </summary>
45         /// <param name="url"></param>
46         /// <returns></returns>
47         public static string TestWebRequest(string url)
48         {
49             Console.WriteLine("Testing WebRequest......");
50             WebRequest wr = WebRequest.Create(url);
51             wr.Method = "GET";
52             WebResponse response = wr.GetResponse();
53             Stream stream = response.GetResponseStream();
54             string result = "";
55             using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
56             {
57                 result = sr.ReadToEnd();
58             }
59             return result;
60         }
61 
62         /// <summary>
63         /// 使用HttpWebClient发出http request
64         /// </summary>
65         /// <param name="url"></param>
66         /// <returns></returns>
67         public static string TestHttpWebRequest(string url)
68         {
69             Console.WriteLine("Testing HttpWebRequest......");
70             HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
71             wr.Method = "GET";
72             HttpWebResponse response = (HttpWebResponse)wr.GetResponse();
73             Stream stream = response.GetResponseStream();
74             string result = "";
75             using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
76             {
77                 result = sr.ReadToEnd();
78             }
79             return result;
80         }
81     }
82 }
View Code


(2)获取指定URL(带Cookie)的WebRequest内容测试code

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.IO;
 7 using System.Net;
 8 
 9 namespace Testing01
10 {
11     class TestHttpWebRequestWithCookie
12     {
13         static void Main(string[] args) 
14         {
15             string url = "https://passport.xxx.com/account/login";
16             CookieContainer myCookieContainer = new CookieContainer();
17             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
18             request.CookieContainer = myCookieContainer;
19             string postdata = "bkurl=&LoginName=abc&Password=123456&RememberMe=false";
20             request.Method = "POST";
21             request.KeepAlive = true;
22             byte[] postdata_byte = Encoding.UTF8.GetBytes(postdata);
23             request.ContentType = "application/x-www-form-urlencoded";
24             request.ContentLength = postdata_byte.Length;
25 
26             Stream stream = request.GetRequestStream();
27             stream.Write(postdata_byte, 0, postdata_byte.Length);
28             stream.Close();
29 
30             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
31             StreamReader srRes = new StreamReader(response.GetResponseStream(),Encoding.UTF8);
32             string content = srRes.ReadToEnd();
33             response.Close();
34             srRes.Close();
35 
36             string cookieString = request.CookieContainer.GetCookieHeader(new Uri(url));
37             Console.WriteLine("***********第一次cookie内容:" + cookieString);
38 
39             request = (HttpWebRequest)WebRequest.Create("http://my.xxx.com/xxx/xxx_list.asp");
40             request.Method = "GET";
41             request.CookieContainer = myCookieContainer;
42             request.Headers.Add("Cookie:" + cookieString);
43             request.KeepAlive = true;
44             response = (HttpWebResponse)request.GetResponse();
45             //cookieString = request.CookieContainer.GetCookieHeader(request.RequestUri) + ";" + cookieString;
46            // Console.WriteLine("***********第二次cookie内容:" + cookieString);
47             StreamReader srR = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
48             string result = srR.ReadToEnd();
49             srR.Close();
50             Console.WriteLine("**************result:" + result.Substring(500));
51             Console.Read();
52         }
53     }
54 }
View Code


(3)如何跟Https网站交互

我们用浏览器打开HTTPS的网站,如果我们没有安装证书,通常页面会显示 "此网站的安全证书有问题",我们必须再次点"继续浏览此网站(不推荐)"才能查看页面信息.

如下图所示

 那么我们的程序,如何忽略HTTPS证书错误呢?

只要在程序中加入下面这段代码,就可以忽略HTTPS证书错误,让我们的程序能和HTTPS网站正确的交互了.

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


(4)采用POST提交Web Request

 1 public static string GetResponse(string url, string method, string data)
 2         {
 3             try
 4             {
 5                 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
 6                 req.KeepAlive = true;
 7                 req.Method = method.ToUpper();
 8                 req.AllowAutoRedirect = true;
 9                 req.CookieContainer = CookieContainers;
10                 req.ContentType = "application/x-www-form-urlencoded";
11 
12                 req.UserAgent = IE7;
13                 req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
14                 req.Timeout = 50000;
15 
16                 if (method.ToUpper() == "POST" && data != null)
17                 {
18                     ASCIIEncoding encoding = new ASCIIEncoding();
19                     byte[] postBytes = encoding.GetBytes(data); ;
20                     req.ContentLength = postBytes.Length;
21                     Stream st = req.GetRequestStream();
22                     st.Write(postBytes, 0, postBytes.Length);
23                     st.Close();
24                 }
25 
26                 System.Net.ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) =>
27                 {
28                     return true;
29                 };
30 
31                 Encoding myEncoding = Encoding.GetEncoding("UTF-8");
32 
33                 HttpWebResponse res = (HttpWebResponse)req.GetResponse();
34                 Stream resst = res.GetResponseStream();
35                 StreamReader sr = new StreamReader(resst, myEncoding);
36                 string str = sr.ReadToEnd();
37 
38                 return str;
39             }
40             catch (Exception)
41             {
42                 return string.Empty;
43             }
44         }
View Code

 

参考文章地址:http://www.cnblogs.com/TankXiao/archive/2012/02/20/2350421.html

posted on 2015-05-29 12:54  FreeBird  阅读(705)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3