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. Java Thread 如何处理未捕获的异常?

    Java Thread是不允许异常抛出到本线程之外的,Runnable接口的public abstract void run()是不允许throws Exception的,这在编译时就通不过. 线程异 ...

  2. (20)Cocos2d-x中的引用计数(Reference Count)和自动释放池(AutoReleasePool)

    引用计数 引用计数是c/c++项目中一种古老的内存管理方式.当我8年前在研究一款名叫TCPMP的开源项目的时候,引用计数就已经有了. iOS SDK把这项计数封装到了NSAutoreleasePool ...

  3. MD5—加密,加盐

    MD5的参考盐值:String salt = "212*)()()**()^&UYGbakdkj " ; MD5—加密工具类 package com.demo.tools; ...

  4. zoj3820 树的直径+二分

    这题是个遗憾 !!!!!当时一直不敢相信两个站一定在直径上,赛后想想自己真的是脑袋抽风, 如果其中一个站不在直径上就反向的说明了这条不是直径.可以很明白我们可以肯定的是有一个点一定在直径上假如另外一个 ...

  5. 项目中使用protobuf

    在互种系统中数据通信或数据交换可以使用protobuf,他比json.xml的数据量要小一些. 另外因为消息要单独写一个.proto文件,来生成各平台的代码,所以对跨平台通信来说也比较友好. 一.使用 ...

  6. Java序列化(Serialization)

    关于Java的序列化的文章在网上已经够多了,在这里写关于Java序列化的文章是对自己关于这方面的的一种总结,结合以前的开发经验与网上的资料,写了这篇文章,对自己是有着巩固记忆的作用,也希望能够对大家有 ...

  7. SDN原理 控制层 Controller控制器

    本文参照SDN原理视频而成:SDN原理 Controller 概念 从上面这个图片,我们能够知道,Controller 是一个非常重要的东西:承上启下,左右拓展. 从整个SDN的架构来看,控制器 处在 ...

  8. LA 3938 动态最大连续和(线段树)

    https://vjudge.net/problem/UVALive-3938 题意:给出一个长度为n的整数序列D,你的任务是对m个询问作出回答.对于询问(a,b),需要找到两个下标x和y,使得a≤x ...

  9. UVa 12549 机器人警卫(最小点覆盖)

    https://vjudge.net/problem/UVA-12549 题意: 在一个Y行X列的网格里有空地(.),重要位置(*)和障碍物(#),用最少的机器人看守所有重要位置,每个机器人要放在一个 ...

  10. 使用IDEA创建基于Gradle构建的JavaWeb项目

    环境配置 jdk: 1.8 Gradle: 4.4.1 Tomcat: 9.0.0 One Step! 创建项目,初始化项目结构. 打开我们的IDEA,进入创建项目的界面,勾选Java,Web两个选项 ...