WiFi QC 自动测试:Qt控制无线路由器

2024-03-15 11:08

本文主要是介绍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控制无线路由器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/811761

相关文章

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

Qt 中 isHidden 和 isVisible 的区别与使用小结

《Qt中isHidden和isVisible的区别与使用小结》Qt中的isHidden()和isVisible()方法都用于查询组件显示或隐藏状态,然而,它们有很大的区别,了解它们对于正确操... 目录1. 基础概念2. 区别清见3. 实际案例4. 注意事项5. 总结1. 基础概念Qt 中的 isHidd

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth