自动化测试 (一) 12306火车票网站自动登录工具

news/2024/5/15 6:40:41/文章来源:https://blog.csdn.net/IT_LanTian/article/details/108680552

还记得2011年春运,12306火车票预订网站经常崩溃无法登录吗。 今天我们就开发一个12306网站自动登录软件。 帮助您轻松订票

通过前两篇博客Fiddler教程和HTTP协议详解,我们了解了Web的原理.

Web的原理就是,浏览器发送一个Request给Web服务器,Web服务器处理完这个请求之后发送一个HTTP Response给浏览器。

如果我们用自己写的程序来发送Request给Web服务器,然后再捕获Web服务器发回来的Response. 检查它与期望值值是否一致。 这不就是Web自动化测试吗? 这样的自动化测试叫做请求响应测试, 别小看这样的自动化测试。 什么开心农场助手,自动投票机。 网络爬虫都是用这个做的。

.NET中提供的类来发送HTTP Request

在System.Net命名工具下, .NET提供了5种方法 可以发送HTTP Request和取回HTTP Response. 它们分别是

WebClient:

WebRequent-WebResponse:

HttpWebRequest-HttpWebResponse:

TcpClient:

Socket:

这5个类中,最适合的就是HttpWebRequest-HttpWebResponse了, 这个才能满足我们需要的功能。 顺便说下WebClient类的用法

WebClient类的用法

WebClient的用法极其简单, 主要用于下载文件,或者单纯获取Response. 这个类不能模拟“POST” 的Http Request, 功能很少。

实例如下:

 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”方法,来打开博客园首页, 在下面的例子中,设置了一些 HttpWebRequest的一些属性

 static void Main(string[] args){// 博客园首页地址string uri = "http://www.cnblogs.com";HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(uri);// 浏览器和服务器交互的方法Req.Method = "GET";// 浏览器的类型,IE或者FirefoxReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1;)";// 是否允许自动重定向(自动跳转)Req.AllowAutoRedirect = true;// 自动跳转的次数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 的处理

还有一个很重要的问题是,我们如何处理Cookie? 程序和Web服务器的交互中, 程序需要把Cookie发送给Web服务器, Web服务器也会给程序发送新的Cookie. 我们怎么模拟这个呢?

C#提供了 CookieContainer 对象。 HttpWebRequest发送Request时会使用CookieContainer 中的Cookie. HttpWebResponse返回Response后,会自动修改CookieContainer 对象的Cookie. 这样的话,Cookie就不用我们操心了。 用法非常简单

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

如何跟HTTPS的网站交互

我们用浏览器打开HTTPS的网站,如果我们没有安装证书,通常页面会显示 “此网站的安全证书有问题”,我们必须再次点"继续浏览此网站(不推荐)"才能查看页面信息. 如下图所示
在这里插入图片描述
那么我们的程序,如何忽略HTTPS证书错误呢?

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

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

模拟"POST" 方法

POST和GET的区别在于, POST会把数据放在Body里面发送给Web服务器. 代码如下

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

客户端发送给服务端的数据进行UrlEncode处理

需要注意的是Web客户端发给Web服务端的数据如果包含空格和特殊字符(比如:汉字) 就要进行UrlEncode处理。

解决这个问题很简单。

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

添加System.Web命名空间, 然后调用HttpUtility.UrlEncode()方法就可以进行编码了

实例:12306火车票网站登录工具

2011年铁道部推出了12306火车票预订网站, 可是因为访问者太多,经常崩溃。根本登录不了。网站访问高峰的时候,根本没办法登录成功, 一直会报错(如下图)

在这里插入图片描述
下面我们就运用上面的知识,来开发一个自动登录的工具

首先我们用浏览器去打开12306网站去登录, 同时打开Fiddler去抓包分析,看看浏览器是如何和Web服务器交互的。

通过抓包分析,我们发现登录其实很简单。就是把用户名,密码和验证码通过"POST"方法提交给服务器。如下图所示

在这里插入图片描述
在这里插入图片描述
在Fiddler中我们点击Inspectors tab->TextView Tab下, 能看到提交给Web服务器的数据是

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

我们把用户名,密码,验证码换成变量,然后Post给Web服务器就可以了。

登录的时候需要输入验证码。 很幸运的是12306网站在这里有个bug, 当验证码图片没有主动刷新的时候,老的验证码一直可以用。 这样的话我们的工具用老的验证码不停地给服务器发送登录的HttpRequest,直到登录成功。

登录的核心代码如下, 实际的代码比这个复杂,要写成循环调用,还要写成多线程,完整的请参考源代码

具体代码为

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);

源代码下载

运行后效果如下
在这里插入图片描述
在这里插入图片描述

学习资源分享

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走
在这里插入图片描述
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_776527.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何做一个大数据seo人员

作为流量运营者或者SEO人员,对于所从事行业领域的认识往往建立在一种直觉之上,我们很难对一个行业有一个全面的了解,这个行业领域有多宽,流量聚焦在哪里,那些是用户最关心的问题? 有的时候很难准确的把握&a…

7年测试工程师经验,浅谈一下如何测试一个web网站?

最近有工作了一年多的朋友在问我,一个web页面到底怎么测试?我的第一感觉是震惊,天天做web测试,咋还不知道怎么测试呢?再仔细一想,可能是我们每天忙于测试而忽略测试导致的,毕竟当局者迷&#xf…

dz论坛Discuz_X3.4最新网站漏洞

近期我们sinesafe安全部门审计discuz最新版的时候发现配置文件写入导致代码执行的问题。cms安装的时候一般会分为几个步骤去进行,其中有对配置文件config进行写入的步骤,当写入的时候未严格限制传入的参数就存在代码执行问题。 源码信息:Disc…

软件测试:测试一个网站

一、软件测试的原则 1、软件测试应尽早执行,并贯穿于整个软件生命周期 2、软件测试应追溯需求 3、测试应由第三方来构造 4、穷举测试是不可能的,要遵循 Good-enough 原则 5、必须确定预期输出(或结果) 6、必须彻底检查每个测试结果 7、…

网站流量下降的6个原因

网站流量下降的6个原因 有时网络流量会发生变化。有时是最好的。有时候不是那么好。诊断流量变化的原因并不困难。以下是如何控制网络流量以帮助其保持增长。 1.移动范式影响流量 移动正在改变搜索习惯。越来越多的企业注意到搜索模式正在发生变化。这是因为我们正在寻找人们搜…

web网站常用功能测试点总结

一、输入框 1.字符型输入框: (1)字符型输入框:英文全角、英文半角、数字、空或者空格、特殊字符 “~!#¥%……&*?[]{}” 特别要注意单引号和&符号。禁止直接输入特殊字符时&#xff0c…

基于web网站项目的性能测试结果分析

一款对并发要求比较高的web项目,需要对其压力测试,模拟线上可能存在的问题 工具描述: 压力工具:Loadrunner 服务器监控:nmon 数据库:oracle web容器:Tomcat war 项目就好像是一个木桶&…

Linux中什么是动态网站环境及如何部署

当谈论起网站时,我们可能听说过静态和动态这两个词,但却不知道它们的含义,或者从字面意思了解一些却不知道它们的区别。这一切可以追溯到网站和网络应用程序,Web应用程序是一个网站,但很多网站不是Web应用程序&#xf…

微服务 | 微服务网站性能测试

开发者们在工作中经常会遇到过这样的情况:在接手实际项目时,在传统的单体架构下,一个同事负责的功能模块出现故障后,会导致整个系统瘫痪。那么有什么办法才能解决这种问题呢?云上有一种服务——微服务,可以…

九度搜索引擎点击优化_快排会影响到seo优化排名吗?

今天,在seo优化中被人们常提起的就是“快排”,它的出现对seo行业整体冲击很大,不过很多的从事seo优化的站长又说,这种优化方式属于作弊手段,一旦网站做了快排,被搜索引擎发现很容易会惩罚网站,导…

cdn对php网站的加速效果,配置七牛自定义域名cdn加速,让你的网站飞起来

之前发过一篇是没有备案的,使用测试域名来缓存静态文件,效果也是杠杠的。如果你还没有备案,先看这篇文章吧,域名没备案使用七牛cdn加速 。步入正题了(为了节约博主发文的时间,尽量少用文字,多以图片展示&am…

怎么建文件夹_用 GitHub Pages 建个人网站的小白级教程

前段时间心血来潮想建一个个人网站,调研了一圈,试用了 Weebly、Wix、Squarespace 等等产品,感觉都没有办法满足我的奇葩需求……最终还是觉得 GitHub Pages 是最好的——自由、免费、流量够用,目前的访问速度也还不错,…

jsp mysql 注入_Jsp+Mysql网站注入并拿root权限的全过程

很多人可能都知道asp,php的编程要防止sql注入漏洞,而并不知道jsp编程同样也需要防备sql注入漏洞.其实,一旦jsp代码有注入漏洞,将直接影响到整个系统的安全。本文就是主要展示一下我的一次JSPMYSQL注入导出webshell的过程。www.***.***.cn是国内某一个著名研究所的网站&#xff…

模板建站和开发网站区别_模板网站与定制网站有什么区别?

如今存在许多网站设计公司,主要包括使用智能建站和成品网站等的模板网站建设公司还有定制网站建设公司两个大类。这两者都具有各自的优势与不足,接下来我们就将要对这两种不同的网站建设形式进行分析。模板建站和定制建站最显著的差异体现在价格上。正如…

网站服务器机房硬件配置,有关web服务器硬件配置的进阶知识

有关web服务器硬件配置的进阶知识今天,小编来聊一聊web服务器硬件配置,其希望大家对服务器各个配件有一些了解,特别是现在很多人选择组装的方式构建服务器,就更应该用稳定和适用去衡量产品,而不要一味降低成本&#xf…

静态文件快速建站

文章目录部署静态文件一、 初始化1、 创建文件2、 上传文件二、 GitHub1、 基本部署2、 框架部署三、 netlify部署静态文件 一、 初始化 1、 创建文件 首先我们要创建好我们的文件,这个可以随便写一点内容。然后我们写好的静态文件使用git添加到GitHub远程仓库中…

第13节 IIS之WEB服务器部署及网站发布——以win2003为例

IIS之WEB服务器部署及网站发布1概述1.1WEB服务器概念1.2协议端口号1.3常用发布软件1.4网站类型2部署WEB服务器2.1安装WEB服务器软件2.2编辑静态网站网页2.3发布静态网站2.4发布动态网站3解决一个服务器配置多个网站的问题3.1方法1:增加多个IP地址3.2方法2&#xff1…

第13节 Kali Linux系统利用Apache发布网站并设置访问限制

目录1 发布网站1.1 启动并检查apache状态1.2 主页建立1.3 设置IP1.4 客户端访问2 主配置文件分析3 访问控制设定3.1 设定白名单与黑名单3.2 对某些子网页设定需要账号密码才能访问4 总结5 参考文献1 发布网站 1.1 启动并检查apache状态 1.apache在kali虚拟机中已自带&#xf…

【HTML+PHP+SQL】综合实验:一个简单丑陋的论坛网站(实现用户注册、登录、注销、修改信息、留言等功能)

目录1 实验环境2 实验目标2.1 目标2.2 页面功能规划2.3 网站文件组织结构3 实验阶段一:实现个人中心注册登录注销更新信息等功能3.1 数据库3.2 ./index.php 首页3.3 ./inc/dblink.inc.php3.4 ./member/index.php3.5 ./member/register.php3.6 ./member/addUser.php3…

【踩坑】CentOS7部署Vulhub靶场后,在启动漏洞容器时弹出SELinux警告,致使网站无法正常执行文件上传功能。

目录1 背景2 SELinux 概述3 解决参考文献1 背景 为研究网络安全,本人准备在CentOS上部署Vulhub靶场来实现,部署过程参考文章《CentOS上部署Vulhub靶场》,部署过程一切顺利。部署后,启动Nginx CVE-2013-4547漏洞进行实验&#xff…