在软件测试领域,自动化测试凭借其高效、可重复的特性,成为保障Web应用质量的关键手段。本文以博客系统为实战载体,系统阐述C++方向Web自动化测试的实施流程,从测试用例设计、脚本开发到报告生成,提供可落地的技术方案。
博客系统的核心功能模块包括用户登录、博客列表展示、博客详情查看、博客编辑发布四大模块。针对每个模块设计正向与异常场景测试用例:
1project/2├── common/ <"www.crawler.miguty.cn"><"football.tv.miguty.cn"> <"basketball.tv.miguty.cn"> # 公共工具类3│ ├── Driver.cpp # 浏览器驱动管理4│ └── Utils.h # 日志/截图工具5├── cases/ # 测试用例模块6│ ├── LoginTest.cpp7│ └── BlogTest.cpp8└── reports/ # 测试报告输出
cpp1// common/Driver.cpp2#include "webdriverxx/webdriverxx.h"3using namespace webdriverxx;45class DriverManager {6public:7 static WebDriver& GetDriver() {8 static WebDriver driver = Start(Chrome());9 driver.Manage().Window().SetSize({1920, 1080});10 return driver;11 }12 13 static void TakeScreenshot(const std::string& caseName) {14 auto driver = GetDriver();15 std::string timestamp = std::to_string(time(nullptr));16 std::string filename = "../reports/screenshots/" + caseName + "_" + timestamp + ".png";17 driver.SaveScreenshot(filename);18 }19};
cpp1// cases/LoginTest.cpp2#include "../<"share.crawler.miguty.cn"><"m.crawler.miguty.cn"><"wap.crawler.miguty.cn">common/Driver.h"3#include <gtest/gtest.h>45class LoginTest : public ::testing::Test {6protected:7 void SetUp() override {8 driver = &DriverManager::GetDriver();9 driver->Navigate("http://localhost:8080/login");10 }11 12 WebDriver* driver;13};1415TEST_F(LoginTest, ValidCredentials) {16 driver->FindElement(ByCss("#username"))->SendKeys("admin");17 driver->FindElement(ByCss("#password"))->SendKeys("123456");18 driver->FindElement(ByCss("#submit"))->Click();19 20 // 验证登录成功21 ASSERT_TRUE(driver->FindElements(ByCss(".dashboard-menu")).size() > 0);22 DriverManager::TakeScreenshot("LoginSuccess");23}2425TEST_F(LoginTest, InvalidPassword) {26 driver->FindElement(ByCss("#username"))->SendKeys("admin");27 driver->FindElement(ByCss("#password"))->SendKeys("wrongpass");28 driver->FindElement(ByCss("#submit"))->Click();29 30 // 验证错误提示31 std::string errorText = driver->FindElement(ByCss(".error-message"))->GetText();32 ASSERT_EQ(errorText, "用户名或密码错误");33 DriverManager::TakeScreenshot("LoginFailure");34}
cpp1// cases/BlogTest.cpp2TEST_F(BlogTest, CreateNewPost) {3 // <"movie.gold.miguty.cn">登录操作(复用LoginTest中的方法)4 LoginTest::SetUp(); // 实际项目中应重构为基类方法5 6 // 进入编辑页面7 driver->FindElement(ByLinkText("新建博客"))->Click();8 9 // 填写表单10 driver->FindElement(ByCss("#title"))->SendKeys("C++自动化测试指南");11 driver->FindElement(ByCss("#content"))->SendKeys("本文详细介绍...");12 driver->FindElement(ByCss("#tags"))->SendKeys("测试,C++");13 14 // 提交发布15 driver->FindElement(ByCss("#publish"))->Click();16 17 // 验证发布成功18 ASSERT_TRUE(driver->GetCurrentUrl().find("/posts/") != std::string::npos);19 DriverManager::TakeScreenshot("PostCreated");20}
cmake1# CMakeLists.txt2cmake_minimum_required(VERSION 3.10)3project(BlogSystemTest)45find_package(GTest REQUIRED)6find_package(Selenium REQUIRED)78add_executable(run_tests 9 <"movie.crawler.miguty.cn"><"live.crawler.miguty.cn"> <"ei.crawler.miguty.cn"> cases/LoginTest.cpp10 cases/BlogTest.cpp11)1213target_link_libraries(run_tests14 GTest::GTest15 GTest::Main16 Selenium::Selenium17)
yaml1# .github/workflows/ci.yml2name: CI Pipeline3on: [push]45jobs:6 test:7 <"basketball.crawler.miguty.cn"><"football.crawler.miguty.cn"><"sport.crawler.miguty.cn"> runs-on: ubuntu-latest8 steps:9 - uses: actions/checkout@v310 - name: Setup C++ Environment11 uses: actions/setup-cpp@v112 with:13 cpp-version: '17'14 - name: Install Dependencies15 run: |16 sudo apt-get install -y libgtest-dev libselenium-dev17 git clone https://github.com/SeleniumHQ/selenium.git18 cd selenium/cpp && cmake . && make && sudo make install19 - name: Run Tests20 run: |21 mkdir -p reports/screenshots22 cmake . && make && ./run_tests --gtest_output=xml:reports/test_results.xml23 - name: Upload Reports24 uses: actions/upload-artifact@v325 with:26 name: test-reports27 path: reports/
通过GoogleTest的XML输出格式,结合Jenkins或GitHub Actions的报告插件,生成可视化测试报告:
xml1<!-- reports/test_results.xml 示例片段 -->2<testsuites>3 <testsuite name="LoginTest" tests="2" failures="0">4 <"ei.gold.miguty.cn"><testcase name="ValidCredentials" classname="LoginTest" time="1.234"/>5<"share.gold.miguty.cn"> <"m.gold.miguty.cn"><"wap.gold.miguty.cn"> <testcase name="InvalidPassword" classname="LoginTest" time="0.876"/>6 </testsuite>7</testsuites>
在HTML报告中嵌入测试截图:
html1<!-- reports/index.html 示例片段 -->2<div class="test-case">3<"www.gold.miguty.cn"><"trending.crawler.miguty.cn"> <"tv.crawler.miguty.cn"> <h3>LoginTest.ValidCredentials</h3>4 <img src="screenshots/LoginSuccess_1630000000.png" width="800"/>5</div>
在某企业级博客系统的测试中,该方案实现:
后续优化方向包括:
通过系统化的测试设计、模块化的代码组织和完善的报告体系,C++方向的Web自动化测试能够有效保障博客系统的质量稳定性,为类似Web应用的测试提供可复制的技术范式。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/19545/viewspace-3100933/ ,如需转载,请注明出处,否则将追究法律责任。