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 39 Make defensive copies when needed
Principle It is essential to make a defensive copy of each mutable parameter to the constructor. Def ...
- MongoDB学习笔记——集合管理
创建集合 使用db.createCollection(name, options) 方法创建集合 name 所创建的集合名称必选! options 可选.指定有关内存大小及索引的选项 db.creat ...
- 利用jsp和servlet,MySQL实现简易报表
beans包和jdbc包代码不放了,麻烦 Service.java: package service; import java.sql.Connection;import java.sql.Resul ...
- PowerDesigner概述(系统分析与建模)以及如何用PowerDesigner快速的创建出这个数据库
PowerDesigner是Sybase公司推出的一个集成了企业架构,UML(统一建模语言)和数据库的CASE(计算机辅助软件工程)工具.它 不仅可以用于系统设计和开发的不同阶段(即业务分析,概念模型 ...
- web.xml文件报错:cvc-complex-type.2.4.a: Invalid content was found starting with element 'init-param'.
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" ...
- Mac/Linux 定时运行命令行
想要开机运行的话可以通过 mac 自带的 Automator 将要运行的命令打包成一个app,用后在用户组的“登录时启动”列表里加上那个app. 但是想要定时运行就不能这么做了,要用上一个叫cront ...
- 记一次linux服务器问题处理过程
本周二的时候,涛哥找我,说明了一件事,在安装ganglia的时候,发生的一个问题. 在一台suse 10 sp1的服务器上,安装ganglia的一个依赖包,libconfuse.rpm,安装完成之后, ...
- 【ASP.NET 进阶】无刷新上传图片之一:利用一般处理程序
效果图: 源代码地址:https://github.com/YeXiaoChao/UploadThePic
- 分层图+最短路算法 BZOJ 2763: [JLOI2011]飞行路线
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MB Description Alice和Bob现在要乘飞机旅行,他们选择了一家相 ...
- Codeforces Round #270 D Design Tutorial: Inverse the Problem --MST + DFS
题意:给出一个距离矩阵,问是不是一颗正确的带权树. 解法:先按找距离矩阵建一颗最小生成树,因为给出的距离都是最短的点间距离,然后再对每个点跑dfs得出应该的dis[][],再对比dis和原来的mp是否 ...