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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net; namespace Testing01
{
class WebRequestTest
{
static void Main(string[] args)
{
string url = @"http://www.baidu.com";
//string html = TestWebClient(url);
//string html = TestWebRequest(url);
string html = TestHttpWebRequest(url);
Console.WriteLine(html);
Console.Read();
} /// <summary>
/// 使用WebClient发出http request
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string TestWebClient(string url)
{
Console.WriteLine("Testing WebClient......");
WebClient wc = new WebClient();
Stream stream = wc.OpenRead(url);
string result = "";
using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
{
result = sr.ReadToEnd();
}
return result; } /// <summary>
/// 使用WebClient发出http request
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string TestWebRequest(string url)
{
Console.WriteLine("Testing WebRequest......");
WebRequest wr = WebRequest.Create(url);
wr.Method = "GET";
WebResponse response = wr.GetResponse();
Stream stream = response.GetResponseStream();
string result = "";
using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
{
result = sr.ReadToEnd();
}
return result;
} /// <summary>
/// 使用HttpWebClient发出http request
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string TestHttpWebRequest(string url)
{
Console.WriteLine("Testing HttpWebRequest......");
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
wr.Method = "GET";
HttpWebResponse response = (HttpWebResponse)wr.GetResponse();
Stream stream = response.GetResponseStream();
string result = "";
using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
{
result = sr.ReadToEnd();
}
return result;
}
}
}

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net; namespace Testing01
{
class TestHttpWebRequestWithCookie
{
static void Main(string[] args)
{
string url = "https://passport.xxx.com/account/login";
CookieContainer myCookieContainer = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.CookieContainer = myCookieContainer;
string postdata = "bkurl=&LoginName=abc&Password=123456&RememberMe=false";
request.Method = "POST";
request.KeepAlive = true;
byte[] postdata_byte = Encoding.UTF8.GetBytes(postdata);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postdata_byte.Length; Stream stream = request.GetRequestStream();
stream.Write(postdata_byte, , postdata_byte.Length);
stream.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader srRes = new StreamReader(response.GetResponseStream(),Encoding.UTF8);
string content = srRes.ReadToEnd();
response.Close();
srRes.Close(); string cookieString = request.CookieContainer.GetCookieHeader(new Uri(url));
Console.WriteLine("***********第一次cookie内容:" + cookieString); request = (HttpWebRequest)WebRequest.Create("http://my.xxx.com/xxx/xxx_list.asp");
request.Method = "GET";
request.CookieContainer = myCookieContainer;
request.Headers.Add("Cookie:" + cookieString);
request.KeepAlive = true;
response = (HttpWebResponse)request.GetResponse();
//cookieString = request.CookieContainer.GetCookieHeader(request.RequestUri) + ";" + cookieString;
// Console.WriteLine("***********第二次cookie内容:" + cookieString);
StreamReader srR = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string result = srR.ReadToEnd();
srR.Close();
Console.WriteLine("**************result:" + result.Substring());
Console.Read();
}
}
}

(3)如何跟Https网站交互

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

如下图所示

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

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

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

(4)采用POST提交Web Request

 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 = ; 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, , 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;
}
}

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

自动化测试--响应请求测试(.net)的更多相关文章

  1. 第7章使用请求测试-测试API . Rspec: everyday-rspec实操。

    测试应用与非人类用户的交互,涵盖外部 API 7.1request test  vs feature test 对 RSpec 来说,这种专门针 对 API 的测试最好放在 spec/requests ...

  2. 使用Windbg找出死锁,解决生产环境中运行的软件不响应请求的问题

    前言 本文介绍本人的一次使用Windbg分析dump文件找出死锁的过程,并重点介绍如何确定线程所等待的锁及判断是否出现了死锁. 对于如何安装及设置Windbg请参考:<使用Windbg和SoS扩 ...

  3. 全--教程API, gem 'rest-client'(用于发简单请求); 请求测试;

    安装:rest-client4400✨ gem install rest-client 一个简单的HTTP和REST client for Ruby. 可以用它来发HTTP请求 基本用法: requi ...

  4. 使用JMeter进行一次简单的带json数据的post请求测试

    使用JMeter进行一次简单的带json数据的post请求测试 原文:https://www.cnblogs.com/summer-mm/p/7717812.html 1.启动jmeter:在bin下 ...

  5. 修改Tomcat响应请求时返回的Server内容

    HTTP Server在响应请求时,会返回服务器的Server信息,比如 Tomcat 7 的Header是: 这东西其实会给一些别有用心之人带来一定的提示作用:为安全起见,我们一般会建议去掉或修改这 ...

  6. 使用C#在CEF中拦截并响应请求

    一.前言 忙里偷闲,研究了一下如何在CEF中拦截请求,并作出响应.这个功能对某些需要修改服务器响应的需求来说必不可少,可以直接读取本地文件作为响应内容. C#的CEF封装项目有很多,我使用的是Chro ...

  7. 零成本实现接口自动化测试 – Java+TestNG 测试Restful service

    接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, ...

  8. 利用python httplib模块 发送Post请求测试web服务是否正常起来!

    最近在学习python,恰好老大最近让我搞个基于post请求测试web服务是否正常启用的小监控,上网查了下资料,发现强大的Python恰好能够用上,所以自己现学现卖,顺便锻炼下自己. 由于本人也刚接触 ...

  9. 如何在Chrome下使用Postman进行rest请求测试

    在web和移动端开发时,常常会调用服务器端的restful接口进行数据请求,为了调试,一般会先用工具进行测试,通过测试后才开始在开发中使用.这里介绍一下如何在chrome浏览器利用postman应用进 ...

随机推荐

  1. phpstorm psr2样式.xml

    将如下内容保存为 .xml 格式 <code_scheme name="Default"> <PHPCodeStyleSettings> <optio ...

  2. with语句与__enter__,__exit__

    class Foo(object): def func(self): print("func") pass def __enter__(self): print("ent ...

  3. 关于Oracle误操作--数据被Commit后的数据回退恢复(闪回)

    今天操作Oracle数据库时,做一个Update数据时,不小心少写了个where,看这粗心大意的. 于是乎,把所有的员工工号都给更新成一个同一个工号了.这是一个悲催的故事. 因为工号是Check了好多 ...

  4. 1.初步认识JVM -- JVM序列

    1.JVM概念 JVM是java Virtual Machine的简称.也称为Java虚拟机. 虚拟机:通过软件模拟具有完整硬件功能的运行在一个完全隔离环境的完整计算机系统.VMWare.Visual ...

  5. 002-mybatis主配置文件

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC & ...

  6. MyBatis—mapper.xml映射配置

    SQL文件映射(mapper文件),几个顶级元素的配置: mapper元素:根节点只有一个属性namespace(命名空间)作用: 1:用于区分不同的mapper,全局唯一. 2:绑定DAO接口,即面 ...

  7. Learning Query and Document Similarities from Click-through Bipartite Graph with Metadata

    读了一篇paper,MSRA的Wei Wu的一篇<Learning Query and Document Similarities from Click-through Bipartite Gr ...

  8. linux 常用命令总结(二)

    1. linux下以指定的编码打开文件:LANG=zh_CN vi fileName 2. 查看系统内存使用,可以使用free -m 或 top 3. 使用env查看所有环境变量 4. df –h 查 ...

  9. Python学习札记(三十一) 面向对象编程 Object Oriented Program 2

    参考:类和实例 注意理解第七点. NOTE: 1.类是抽象的模板,比如Student类,实例是根据类创建出来的一个个具体的"对象",每个对象都拥有相同的方法,但各自的数据可能不同. ...

  10. Gym 101334F Feel Good

    http://codeforces.com/gym/101334 题意:给定一串数,求一个区间,使得该区间的所有数之和乘以该区间内最小的数的乘积最大. 思路:先预处理一下,计算出前缀和. 我们可以把每 ...