WiFi QC 自动测试:Qt控制无线路由器
在测试wifi的时候,测试人员一般要使用很多不同型号的AP,并且需要不断地切换Chariot的配置。
这里的思路是致力于提供一个友好的GUI界面来自动控制AP,并且自动控制Chariot进行Throughput的测试。
这里Chariot的部分就不提了,可以自行参照Chariot的c API或者tcl的API进行程序设计。
这里先给出一个实例,那就是Tplink的AP,待完善之后可以将每一个AP做成一个配置文件,方便扩展。
先祭出Qt代码吧:
#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug> Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this); manager = new QNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)), this,SLOT(replyFinished(QNetworkReply*)));
} Dialog::~Dialog()
{
delete ui;
} void Dialog::replyFinished(QNetworkReply *reply) //当回复结束后
{ QByteArray reply_str; switch (reply->error()) { case QNetworkReply::AuthenticationRequiredError:
qDebug()<<"AUTH REQUIRED";
qDebug()<< reply->rawHeaderList();
qDebug()<< reply->rawHeaderPairs(); /* no break */
case QNetworkReply::NoError:
reply_str = reply->readAll();
ui->text->setPlainText(QString::fromUtf8(reply_str));
reply->deleteLater();
break;
default:
qDebug()<<"ERROR WHEN REPLY:" << reply->error(); } } void Dialog::on_init_clicked()
{
manager->get(QNetworkRequest(QUrl("http://192.168.2.1")));
} /*
Authorization: Basic YWRtaW46YWRtaW4=
Accept: text/html
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
*/ void Dialog::on_start_clicked()
{
QString get_str = "http://192.168.2.1/userRpm/WlanNetworkRpm.htm?ssid1=haha&wlMode=2&channel=3&mode=5 \
&chanWidth=2&ap=1&broadcast=2&brlssid=&brlbssid= \
&keytype=1&wepindex=1&authtype=1&keytext=&Save=%B1%A3+%B4%E6 HTTP/1.1";
QUrl url(get_str);
QNetworkRequest req;
req.setUrl(url);
req.setRawHeader("Authorization", "Basic YWRtaW46YWRtaW4=");
manager->get(req); }
这里在界面上放置了一个PlaintextEdit和两个按钮,上述的两个函数分别对应每一个按钮的点击事件。
Qt提供了访问HTTP很简单的方式,使用它的API能够轻松地实现HTTP数据的交互。
可以看到一开始初始化了一个QNetworkAccessManager,当数据到达客户端的时候replyFinished函数就会被呼叫。
在这个函数里面,我判断了三种情况,其中比较特殊的就是AuthenticationRequiredError的事件。
当打开Tplink路由器的时候,路由器就会弹出一个需要认证的界面从而触发这个事件。实际上从HTTP交互的header可以看出来。
TPLINK740N使用的是HTTP摘要认证,可以看看此博客了解详情:
当点击按钮触发on_init_clicked的时候,就会最终触发AuthenticationRequiredError的事件,因为
没有给AP提供密码。接下来的每次交互中都需要给AP提供密码来保证访问的成功:
req.setRawHeader("Authorization", "Basic YWRtaW46YWRtaW4=");
其中YWRtaW46YWRtaW4=是从admin:admin产生的,欲知详情可以打开上面提供的链接。
实际上,HTTP头部有很多字段,这里只使用了最重要的一个,其他的Qt会自动帮我们加的(好方便!)
当点击按钮触发on_start_clicked的时候,就可以成功设置AP了,上面设置的效果如下:
聪明的你很容易修改这个字符串来达到你想要的效果:
QString get_str = "http://192.168.2.1/userRpm/WlanNetworkRpm.htm?ssid1=haha&wlMode=2&channel=3&mode=5 \
&chanWidth=2&ap=1&broadcast=2&brlssid=&brlbssid= \
&keytype=1&wepindex=1&authtype=1&keytext=&Save=%B1%A3+%B4%E6 HTTP/1.1";
最终可以给每一个AP提供一个配置文件,因为上层可以做到一致(SSID、channel等设置),所以很容易实现自动化
另外,从AuthenticationRequiredError给出的信息里面(rawHeaderPairs)可以判断AP的型号
WiFi QC 自动测试:Qt控制无线路由器的更多相关文章
- WiFi QC 自动测试:ixChariot API初探
Chariot虽然给我们提供了友好的界面,但是必须使用命令行或者使用它的API才能 实现自动测试.Chariot在安装的时候会让你选择命令行界面组件,在它的安装目录下面有一些工具, 暂时还不知道是干什 ...
- 用Selenium自动化测试时,让ChromeDriver中不显示“正受到自动测试软件控制”
背景: 在用Selenium做自动化测试的时候,默认ChromeDriver是会提示“Chrom正受到自动测试软件控制”的.如下图这样.但我们有些场景下,不希望这个提示出现.本文探索了几种语言去掉这个 ...
- chrome正受到自动测试软件的控制-----web自动化测试如何去掉这段提示
本文为原创文章 在web自动化测试的时候,特别是在用chrome浏览器的时候经常会出现 “chrome正受到自动测试软件的控制” 这样的一句提示, 这是因为安装chrome浏览器的时候没有设置允许调 ...
- selenium自动化测试时,chrome 出现“Chrome 正受到自动测试软件的控制”的解决办法
背景 使用selenium自动化测试的时候,启动浏览器出现'Chrome正在受到自动软件的控制'的问题,修改方法有两种. 一.在浏览器配置里加个参数,忽略掉这个警告提示语:disable_infoba ...
- [转载]WiFi有死角? 巧用旧无线路由器扩展覆盖
怎么了,家里的WiFi有死角?老旧无线路由器的无线覆盖不给力?现在大功率无线产品或双频无线产品的售价并不便宜,而且仅靠一台无线路由器并不能满足多户型家庭的无线覆盖需求.那么,是不是有什么廉价而又实用的 ...
- 深圳电信光纤用户必备:简单破解中兴ZXA10 F460光电猫,实现WIFI和自动拨号功能
最近搬家,ADSL转成光纤宽带,下载速度非常给力.原来的ADSL路由器派不上用场,电信的安装人员也给开通了wifi功能,只是wifi无法上网,而且拨号一定需要用电脑连网线进行拨号.以前是直接把拨号账户 ...
- Nightwatch.js – 轻松实现浏览器的自动测试
Nightwatch.js 是一个易于使用的,基于 Node.js 平台的浏览器自动化测试解决方案.它使用强大的 Selenium WebDriver API 来在 DOM 元素上执行命令和断言. 语 ...
- Qt 控制watchdog app hacking
/************************************************************************** * Qt 控制watchdog app hack ...
- Apache JMeter--网站自动测试与性能测评
Apache JMeter--网站自动测试与性能测评 2013-02-28 15:48:05 标签:Jmeter From:http://bdql.iteye.com/blog/291987 出于学习 ...
随机推荐
- Effective Java 55 Optimize judiciously
Principle Strive to write good programs rather than fast ones. Strive to avoid design decisions that ...
- EasyUI ComboGrid 分页
一.使用场景 下拉框可以很方便地为我们提供选择功能,通过下拉框我们可以便捷地选择某个值,而不需要手动输入.在EasyUI中有ComboGrid与之对应.ComboGrid既可以当中下拉框来使用,又可以 ...
- CListCtrl
CListCtrl CCmdTarget └CListCtrl CListCtrl类封装"列表视图控件"功能,显示每个包含图标(列表视图中)和标签的收集.除图标和标签外,每 ...
- 标准IO的缓冲问题
在看APU时,第8章进程时, #include <stdio.h> #include <unistd.h> ; char buf[] = "a write to st ...
- [转]PhoneGap使用PushPlugin插件实现消息推送
本文转自:http://my.oschina.net/u/1270482/blog/217661 http://devgirl.org/2013/07/17/tutorial-implement-pu ...
- [转].NET下读取PDF文本
本文转自:http://blog.csdn.net/wangqiuyun/article/details/8548779 在.NET下读取PDF文本用到的类库主要有两个:PDFBox和iTextSha ...
- css中table tr:nth-child(even)改变tr背景颜色: IE7,8无效
例如: .my_table tr:nth-child(even){ background:#E6EDF5; } .my_table tr:nth-child(odd){ background:#F0F ...
- 当文本溢出包含的元素时加省略号之text-overflow
text-overflow是css3的属性,用来处理文本溢出,默认裁剪处理,text-overflow属性只能用于block和inline-block元素,内联的和box,flex-flow:colu ...
- Centos7下修改默认网卡名(改为eth0)的操作记录
安装好centos7版本的系统后,发现默认的网卡名字有点怪,为了便于管理,可以手动修改.下面对centos7版本下网卡重命名操作做一记录:1)编辑网卡信息[root@linux-node2~]# cd ...
- FormsAuthentication详解
配置安全鉴别 鉴别是指鉴定来访用户是否合法的过程.ASP.NET Framework支持三种鉴别类型: Windows鉴别: NET Passport鉴别: Forms鉴别. 对于某一特定的应用程序, ...