TestWidget.h

#ifndef __DEMO_TEST_WIDGET_H__
#define __DEMO_TEST_WIDGET_H__

class OfficeContainer;

class DemoTestWidget: public QWidget
{
    Q_OBJECT
public:
    DemoTestWidget(QWidget *parent = NULL);
    ~DemoTestWidget();

private slots:
    void sltBtnOpen();
    void sltBtnSelect();
    void sltBtnClose();
    void sltBtnShowDlg();

private:
    void initUI();
    void initConnect();

    QLabel          *pLblPath;
    QLineEdit       *pTxtPath;
    QPushButton     *pBtnOpen;
    QPushButton     *pBtnSelect;
    QPushButton     *pBtnClose;
    QComboBox       *pComBox;
    QPushButton     *pBtnShowDlg;

    QWidget         *pCentrelWgt;

    OfficeContainer *pOfficeContainer;
};


#endif
#include "widget.h" #include "ui_widget.h" #include <QSqlQuery> //操作数据库 #include <QDebug> //输出错误信息 #include <QSqlError> // #include <QMessageBox> //#include <TestWidget3.h> //跳转窗口头文件 #include <QCheckBox> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); } Widget::~Widget() { delete ui; } void Widget::on_regButton_clicked() { //密码 //插入数据 QSqlQuery query; query.prepare("INSERT INTO userinfo(account,password) VALUES (':value1', ':value2')"); query.bindValue(":value1",ui->accountEdit->text() ); query.bindValue(":value2",ui->passwordedit->text()); if(query.exec()){ //如果插入数据成功 QMessageBox::information(this,"注册","注册成功"); }else{ QMessageBox::information(this,"注册","注册失败"); } } void Widget::on_loginButton_clicked() { //接收用户输入 QSqlQuery query; //操作数据库 query.prepare("select * from user where account = ':value1' and password= ':value2'"); query.bindValue(":value1", ui->accountEdit->text()); query.bindValue(":value2", ui->passwordedit->text()); if(!query.exec()){ //如果没有查到记录 QMessageBox::information(this,"登录","登录失败"); } //获取查询的数据: if(query.next()){ //获取到数据 QMessageBox::information(this,"登录","登录成功"); }else{ QMessageBox::information(this,"登录","登录失败"); } } 这段代码用于实现用户注册与登录功能,但运行时总是注册失败,登录失败,请帮我修改这段代码,修复bug
07-15
#include <QtTest/QtTest> #include <QObject> #include <QApplication> #include <QWidget> #include <QPushButton> #include <QTableView> #include <QTextEdit> #include <QTimer> #include <QElapsedTimer> #include <QDir> #include <QFile> #include <QXmlStreamWriter> #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> #include <QDateTime> #include <functional> #include <memory> /** * @brief 增强的测试框架类 * * 功能特性: * - GUI应用程序自动化测试 * - 性能测试功能 * - XML输出支持,便于CI系统集成 * - 测试结果统计和报告 */ class EnhancedTestFramework : public QObject { Q_OBJECT public: struct TestResult { QString testName; bool passed; qint64 executionTime; // 毫秒 QString errorMessage; QString category; }; struct PerformanceMetrics { qint64 minTime; qint64 maxTime; qint64 avgTime; qint64 totalTime; int testCount; }; private slots: void initTestCase(); void cleanupTestCase(); void init(); void cleanup(); // GUI自动化测试 void testGUIAutomation(); void testWidgetInteraction(); void testButtonClicks(); void testTableOperations(); // 性能测试 void testPerformanceBasic(); void testPerformanceMemory(); void testPerformanceNetwork(); void testPerformanceBatch(); private: // 测试框架方法 void runGUITest(const QString& testName, std::function<void()> testFunc); void runPerformanceTest(const QString& testName, std::function<void()> testFunc, int iterations = 100); void generateXMLReport(); void generateJSONReport(); void measureMemoryUsage(); // GUI测试辅助方法 void simulateButtonClick(QPushButton* button); void simulateTableClick(QTableView* table, int row, int column); void waitForWidget(QWidget* widget, int timeout = 5000); bool verifyWidgetState(QWidget* widget, const QString& expectedState); // 性能测试辅助方法 qint64 measureExecutionTime(std::function<void()> func); void collectPerformanceMetrics(const QString& category); private: std::unique_ptr<QApplication> m_app; QList<TestResult> m_testResults; QMap<QString, PerformanceMetrics> m_performanceData; QElapsedTimer m_timer; QString m_outputDir; int m_testCounter; // GUI组件用于测试 std::unique_ptr<QWidget> m_testWidget; std::unique_ptr<QPushButton> m_testButton; std::unique_ptr<QTableView> m_testTable; std::unique_ptr<QTextEdit> m_testTextEdit; }; /** * @brief 测试套件初始化 */ void EnhancedTestFramework::initTestCase() { qDebug() << "开始增强测试框架套件"; m_testCounter = 0; // 创建输出目录 m_outputDir = QDir::current().absoluteFilePath("test_reports"); QDir().mkpath(m_outputDir); // 确保有QApplication实例 if (!QApplication::instance()) { int argc = 0; char** argv = nullptr; m_app = std::make_unique<QApplication>(argc, argv); } // 创建测试用的GUI组件 m_testWidget = std::make_unique<QWidget>(); m_testButton = std::make_unique<QPushButton>("Test Button", m_testWidget.get()); m_testTable = std::make_unique<QTableView>(m_testWidget.get()); m_testTextEdit = std::make_unique<QTextEdit>(m_testWidget.get()); // 设置测试组件的基本属性 m_testWidget->setWindowTitle("Test Widget"); m_testWidget->resize(800, 600); m_testButton->setGeometry(10, 10, 100, 30); m_testTable->setGeometry(10, 50, 300, 200); m_testTextEdit->setGeometry(10, 260, 300, 100); } /** * @brief 测试套件清理 */ void EnhancedTestFramework::cleanupTestCase() { qDebug() << "完成增强测试框架套件,共执行" << m_testCounter << "个测试"; // 生成测试报告 generateXMLReport(); generateJSONReport(); // 输出性能统计 for (auto it = m_performanceData.begin(); it != m_performanceData.end(); ++it) { const auto& metrics = it.value(); qDebug() << QString("性能统计 [%1]: 平均%2ms, 最小%3ms, 最大%4ms, 总计%5ms") .arg(it.key()) .arg(metrics.avgTime) .arg(metrics.minTime) .arg(metrics.maxTime) .arg(metrics.totalTime); } } /** * @brief 每个测试用例前的初始化 */ void EnhancedTestFramework::init() { m_testCounter++; m_timer.start(); } /** * @brief 每个测试用例后的清理 */ void EnhancedTestFramework::cleanup() { // 记录测试执行时间 qint64 elapsed = m_timer.elapsed(); qDebug() << QString("测试用例执行时间: %1ms").arg(elapsed); } /** * @brief GUI自动化测试 */ void EnhancedTestFramework::testGUIAutomation() { runGUITest("GUI自动化基础测试", [this]() { // 显示测试窗口 m_testWidget->show(); // 等待窗口显示 waitForWidget(m_testWidget.get()); // 验证窗口状态 QVERIFY(m_testWidget->isVisible()); QVERIFY(m_testWidget->isEnabled()); // 测试窗口标题 QCOMPARE(m_testWidget->windowTitle(), QString("Test Widget")); // 隐藏窗口 m_testWidget->hide(); QVERIFY(!m_testWidget->isVisible()); }); } /** * @brief 测试组件交互 */ void EnhancedTestFramework::testWidgetInteraction() { runGUITest("组件交互测试", [this]() { m_testWidget->show(); waitForWidget(m_testWidget.get()); // 测试按钮交互 QVERIFY(m_testButton->isEnabled()); simulateButtonClick(m_testButton.get()); // 测试文本编辑器 m_testTextEdit->setText("Test Content"); QCOMPARE(m_testTextEdit->toPlainText(), QString("Test Content")); // 测试表格视图 QVERIFY(m_testTable->isVisible()); m_testWidget->hide(); }); } /** * @brief 测试按钮点击 */ void EnhancedTestFramework::testButtonClicks() { runGUITest("按钮点击测试", [this]() { m_testWidget->show(); waitForWidget(m_testWidget.get()); // 测试多次点击 for (int i = 0; i < 5; ++i) { simulateButtonClick(m_testButton.get()); QTest::qWait(10); // 短暂等待 } // 测试按钮状态变化 m_testButton->setEnabled(false); QVERIFY(!m_testButton->isEnabled()); m_testButton->setEnabled(true); QVERIFY(m_testButton->isEnabled()); m_testWidget->hide(); }); } /** * @brief 测试表格操作 */ void EnhancedTestFramework::testTableOperations() { runGUITest("表格操作测试", [this]() { m_testWidget->show(); waitForWidget(m_testWidget.get()); // 测试表格基本属性 QVERIFY(m_testTable->isVisible()); QVERIFY(m_testTable->isEnabled()); // 模拟表格点击(如果有模型的话) if (m_testTable->model()) { simulateTableClick(m_testTable.get(), 0, 0); } m_testWidget->hide(); }); } /** * @brief 基础性能测试 */ void EnhancedTestFramework::testPerformanceBasic() { runPerformanceTest("基础操作性能", [this]() { // 测试字符串操作性能 QString result; for (int i = 0; i < 1000; ++i) { result += QString::number(i); } QVERIFY(!result.isEmpty()); }, 50); } /** * @brief 内存性能测试 */ void EnhancedTestFramework::testPerformanceMemory() { runPerformanceTest("内存分配性能", [this]() { // 测试内存分配和释放 QList<std::unique_ptr<QObject>> objects; for (int i = 0; i < 100; ++i) { objects.append(std::make_unique<QObject>()); } objects.clear(); }, 30); } /** * @brief 网络性能测试 */ void EnhancedTestFramework::testPerformanceNetwork() { runPerformanceTest("网络操作性能", [this]() { // 模拟网络操作(这里只是模拟延时) QTest::qWait(1); // 1ms延时模拟网络操作 QVERIFY(true); }, 20); } /** * @brief 批处理性能测试 */ void EnhancedTestFramework::testPerformanceBatch() { runPerformanceTest("批处理性能", [this]() { // 测试批量数据处理 QList<int> data; for (int i = 0; i < 1000; ++i) { data.append(i * 2); } int sum = 0; for (int value : data) { sum += value; } QVERIFY(sum > 0); }, 25); } /** * @brief 运行GUI测试 */ void EnhancedTestFramework::runGUITest(const QString& testName, std::function<void()> testFunc) { QElapsedTimer timer; timer.start(); TestResult result; result.testName = testName; result.category = "GUI"; try { testFunc(); result.passed = true; result.errorMessage = ""; } catch (const std::exception& e) { result.passed = false; result.errorMessage = e.what(); } catch (...) { result.passed = false; result.errorMessage = "未知异常"; } result.executionTime = timer.elapsed(); m_testResults.append(result); qDebug() << QString("GUI测试 [%1]: %2 (%3ms)") .arg(testName) .arg(result.passed ? "通过" : "失败") .arg(result.executionTime); } /** * @brief 运行性能测试 */ void EnhancedTestFramework::runPerformanceTest(const QString& testName, std::function<void()> testFunc, int iterations) { QList<qint64> times; for (int i = 0; i < iterations; ++i) { qint64 time = measureExecutionTime(testFunc); times.append(time); } // 计算性能指标 PerformanceMetrics metrics; metrics.testCount = iterations; metrics.totalTime = 0; metrics.minTime = times.first(); metrics.maxTime = times.first(); for (qint64 time : times) { metrics.totalTime += time; if (time < metrics.minTime) metrics.minTime = time; if (time > metrics.maxTime) metrics.maxTime = time; } metrics.avgTime = metrics.totalTime / iterations; m_performanceData[testName] = metrics; // 记录测试结果 TestResult result; result.testName = testName; result.category = "Performance"; result.passed = true; result.executionTime = metrics.avgTime; result.errorMessage = ""; m_testResults.append(result); qDebug() << QString("性能测试 [%1]: 平均%2ms, 最小%3ms, 最大%4ms") .arg(testName) .arg(metrics.avgTime) .arg(metrics.minTime) .arg(metrics.maxTime); } /** * @brief 生成XML测试报告 */ void EnhancedTestFramework::generateXMLReport() { QString xmlFile = QDir(m_outputDir).absoluteFilePath("test_results.xml"); QFile file(xmlFile); if (!file.open(QIODevice::WriteOnly)) { qWarning() << "无法创建XML报告文件:" << xmlFile; return; } QXmlStreamWriter xml(&file); xml.setAutoFormatting(true); xml.writeStartDocument(); xml.writeStartElement("testsuites"); xml.writeAttribute("name", "AumoFIS Enhanced Test Suite"); xml.writeAttribute("tests", QString::number(m_testResults.size())); int passed = 0; int failed = 0; qint64 totalTime = 0; for (const auto& result : m_testResults) { if (result.passed) passed++; else failed++; totalTime += result.executionTime; } xml.writeAttribute("failures", QString::number(failed)); xml.writeAttribute("time", QString::number(totalTime / 1000.0, 'f', 3)); // 按类别分组测试 QMap<QString, QList<TestResult>> categorizedTests; for (const auto& result : m_testResults) { categorizedTests[result.category].append(result); } for (auto it = categorizedTests.begin(); it != categorizedTests.end(); ++it) { xml.writeStartElement("testsuite"); xml.writeAttribute("name", it.key()); xml.writeAttribute("tests", QString::number(it.value().size())); int categoryPassed = 0; int categoryFailed = 0; qint64 categoryTime = 0; for (const auto& result : it.value()) { if (result.passed) categoryPassed++; else categoryFailed++; categoryTime += result.executionTime; xml.writeStartElement("testcase"); xml.writeAttribute("name", result.testName); xml.writeAttribute("time", QString::number(result.executionTime / 1000.0, 'f', 3)); if (!result.passed) { xml.writeStartElement("failure"); xml.writeAttribute("message", result.errorMessage); xml.writeCharacters(result.errorMessage); xml.writeEndElement(); // failure } xml.writeEndElement(); // testcase } xml.writeAttribute("failures", QString::number(categoryFailed)); xml.writeAttribute("time", QString::number(categoryTime / 1000.0, 'f', 3)); xml.writeEndElement(); // testsuite } xml.writeEndElement(); // testsuites xml.writeEndDocument(); qDebug() << "XML报告已生成:" << xmlFile; } /** * @brief 生成JSON测试报告 */ void EnhancedTestFramework::generateJSONReport() { QString jsonFile = QDir(m_outputDir).absoluteFilePath("test_results.json"); QFile file(jsonFile); if (!file.open(QIODevice::WriteOnly)) { qWarning() << "无法创建JSON报告文件:" << jsonFile; return; } QJsonObject root; root["framework"] = "AumoFIS Enhanced Test Framework"; root["timestamp"] = QDateTime::currentDateTime().toString(Qt::ISODate); root["total_tests"] = m_testResults.size(); int passed = 0; int failed = 0; for (const auto& result : m_testResults) { if (result.passed) passed++; else failed++; } root["passed"] = passed; root["failed"] = failed; root["success_rate"] = QString::number((double)passed / m_testResults.size() * 100, 'f', 2); // 测试结果 QJsonArray testsArray; for (const auto& result : m_testResults) { QJsonObject testObj; testObj["name"] = result.testName; testObj["category"] = result.category; testObj["passed"] = result.passed; testObj["execution_time_ms"] = result.executionTime; testObj["error_message"] = result.errorMessage; testsArray.append(testObj); } root["tests"] = testsArray; // 性能数据 QJsonObject performanceObj; for (auto it = m_performanceData.begin(); it != m_performanceData.end(); ++it) { QJsonObject metricsObj; const auto& metrics = it.value(); metricsObj["min_time_ms"] = metrics.minTime; metricsObj["max_time_ms"] = metrics.maxTime; metricsObj["avg_time_ms"] = metrics.avgTime; metricsObj["total_time_ms"] = metrics.totalTime; metricsObj["test_count"] = metrics.testCount; performanceObj[it.key()] = metricsObj; } root["performance"] = performanceObj; QJsonDocument doc(root); file.write(doc.toJson()); qDebug() << "JSON报告已生成:" << jsonFile; } /** * @brief 模拟按钮点击 */ void EnhancedTestFramework::simulateButtonClick(QPushButton* button) { if (!button) return; QTest::mouseClick(button, Qt::LeftButton); QTest::qWait(10); // 短暂等待 } /** * @brief 模拟表格点击 */ void EnhancedTestFramework::simulateTableClick(QTableView* table, int row, int column) { if (!table || !table->model()) return; QModelIndex index = table->model()->index(row, column); if (index.isValid()) { table->setCurrentIndex(index); QTest::mouseClick(table->viewport(), Qt::LeftButton, Qt::NoModifier, table->visualRect(index).center()); } } /** * @brief 等待组件显示 */ void EnhancedTestFramework::waitForWidget(QWidget* widget, int timeout) { if (!widget) return; QElapsedTimer timer; timer.start(); while (!widget->isVisible() && timer.elapsed() < timeout) { QTest::qWait(10); } } /** * @brief 测量执行时间 */ qint64 EnhancedTestFramework::measureExecutionTime(std::function<void()> func) { QElapsedTimer timer; timer.start(); func(); return timer.elapsed(); } QTEST_MAIN(EnhancedTestFramework) #include "test_framework_enhanced.moc"
05-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值