自动化测试--响应请求测试(.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
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)的更多相关文章
- 第7章使用请求测试-测试API . Rspec: everyday-rspec实操。
测试应用与非人类用户的交互,涵盖外部 API 7.1request test vs feature test 对 RSpec 来说,这种专门针 对 API 的测试最好放在 spec/requests ...
- 使用Windbg找出死锁,解决生产环境中运行的软件不响应请求的问题
前言 本文介绍本人的一次使用Windbg分析dump文件找出死锁的过程,并重点介绍如何确定线程所等待的锁及判断是否出现了死锁. 对于如何安装及设置Windbg请参考:<使用Windbg和SoS扩 ...
- 全--教程API, gem 'rest-client'(用于发简单请求); 请求测试;
安装:rest-client4400✨ gem install rest-client 一个简单的HTTP和REST client for Ruby. 可以用它来发HTTP请求 基本用法: requi ...
- 使用JMeter进行一次简单的带json数据的post请求测试
使用JMeter进行一次简单的带json数据的post请求测试 原文:https://www.cnblogs.com/summer-mm/p/7717812.html 1.启动jmeter:在bin下 ...
- 修改Tomcat响应请求时返回的Server内容
HTTP Server在响应请求时,会返回服务器的Server信息,比如 Tomcat 7 的Header是: 这东西其实会给一些别有用心之人带来一定的提示作用:为安全起见,我们一般会建议去掉或修改这 ...
- 使用C#在CEF中拦截并响应请求
一.前言 忙里偷闲,研究了一下如何在CEF中拦截请求,并作出响应.这个功能对某些需要修改服务器响应的需求来说必不可少,可以直接读取本地文件作为响应内容. C#的CEF封装项目有很多,我使用的是Chro ...
- 零成本实现接口自动化测试 – Java+TestNG 测试Restful service
接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, ...
- 利用python httplib模块 发送Post请求测试web服务是否正常起来!
最近在学习python,恰好老大最近让我搞个基于post请求测试web服务是否正常启用的小监控,上网查了下资料,发现强大的Python恰好能够用上,所以自己现学现卖,顺便锻炼下自己. 由于本人也刚接触 ...
- 如何在Chrome下使用Postman进行rest请求测试
在web和移动端开发时,常常会调用服务器端的restful接口进行数据请求,为了调试,一般会先用工具进行测试,通过测试后才开始在开发中使用.这里介绍一下如何在chrome浏览器利用postman应用进 ...
随机推荐
- Java-idea-FindBugs字节码级别潜在bug查看
一.概述 静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷. FindBugs 不注重样式或者格式,它试图只寻找真正的缺陷或者潜在的性能问题. FindBugs 是一个静态分析工具,它检查类或 ...
- [RGEOS]数学基础
1.向量Vector3d using System; namespace RGeos.Geometry { /// <summary> /// 3D向量类 /// </summary ...
- PAT 1056 Mice and Rice[难][不理解]
1056 Mice and Rice(25 分) Mice and Rice is the name of a programming contest in which each programmer ...
- ruby中的回调方法和钩子方法
在ruby中,当某些特定的事件发生时,将调用回调方法和钩子方法.事件有如下几种: 调用一个不存在的对象方法 类混含一个模块 定义类的子类 给类添加一个实例方法 给对象添加一个单例方法 引用一个不存在的 ...
- hdu5091 线段树
题意: 给了n个点在平面中 n<10000 然后 将这给了一个 宽为W 高为 H 的 矩形, 然后 使得这个矩形可以 涵盖最多的点有多少个,然后矩形的宽平行x 轴高平行y轴.可以将该矩形 水平 ...
- struts2中的错误--java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
2013-4-7 10:13:56 org.apache.catalina.startup.HostConfig checkResources 信息: Reloading context [/chap ...
- Linux内核参数之arp_ignore和arp_announce
一.arp_ignore和arp_announce介绍 arp_ignore和arp_announce参数都和ARP协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作.这两个参数很重要, ...
- bzoj1619 / P2919 [USACO08NOV]守护农场Guarding the Farm
P2919 [USACO08NOV]守护农场Guarding the Farm 相似题:P3456 [POI2007]GRZ-Ridges and Valleys 按海拔是否相同分块 每次bfs海拔相 ...
- leetcode刷题吧
排列 从排序的数组中删除重复项 /** * @param {number[]} nums * @return {number} */ var removeDuplicates = function(n ...
- Rsync+sersync实现实时同步
介绍: sersync主要用于服务器同步,web镜像等功能.基于boost1.43.0,inotify api,rsync command.开发.目前使用的比较多的同步解决方案是inotify-too ...