Rust自动化测试的框架

发布于:2025-06-22 ⋅ 阅读:(12) ⋅ 点赞:(0)

Rust实现Web自动化测试的框架

以下是10个使用Rust实现Web自动化测试的框架示例,涵盖不同场景和工具链:

使用thirtyfour(基于Selenium)

use thirtyfour::prelude::*;

async fn example_selenium() -> WebDriverResult<()> {
    let caps = DesiredCapabilities::chrome();
    let driver = WebDriver::new("http://localhost:9515", caps).await?;
    driver.goto("https://www.baidu.com").await?;
    let elem = driver.find(By::Id("learn")).await?;
    elem.click().await?;
    driver.quit().await?;
    Ok(())
}

使用fantoccini(WebDriver客户端)

use fantoccini::{Client, Locator};

async fn example_fantoccini() -> Result<(), fantoccini::error::CmdError> {
    let client = Client::new("http://localhost:9515").await?;
    client.goto("https://wwww.baidu.com").await?;
    let repo = client.find(Locator::Css(".repo")).await?;
    assert!(repo.text().await?.contains("Rust"));
    client.close().await
}

使用headless_chrome(无浏览器模式)

use headless_chrome::{Browser, protocol::page::CaptureScreenshotFormat};

fn example_headless() -> Result<(), failure::Error> {
    let browser = Browser::default()?;
    let tab = browser.wait_for_initial_tab()?;
    tab.navigate_to("https://www.bing.com")?;
    tab.wait_until_navigated()?;
    let screenshot = tab.capture_screenshot(
        CaptureScreenshotFormat::Png,
        None,
        None,
        true
    )?;
    std::fs::write("screenshot.png", screenshot)?;
    Ok(())
}

表单提交测试

use thirtyfour::prelude::*;

async fn test_form_submit() -> WebDriverResult<()> {
    let driver = WebDriver::new("http://localhost:9515", DesiredCapabilities::chrome()).await?;
    driver.goto("https://httpbin.org/forms/post").await?;
    driver.find(By::Name("custname")).await?.send_keys("John Doe").await?;
    driver.find(By::Css("input[value='small']")).await?.click().await?;
    driver.find(By::Tag("textarea")).await?.send_keys("Special notes").await?;
    driver.find(By::Css("button[type='submit']")).await?.click().await?;
    driver.quit().await
}

API测试与UI结合

use reqwest::StatusCode;
use thirtyfour::prelude::*;

async fn combined_test() -> WebDriverResult<()> {
    // API测试
    let api_resp = reqwest::get("https://api.github.com/users/rust-lang")
        .await?
        .json::<serde_json::Value>()
        .await?;
    assert_eq!(api_resp["login"].as_str(), Some("rust-lang"));

    // UI测试
    let driver = WebDriver::new("http://localhost:9515", DesiredCapabilities::chrome()).await?;
    driver.goto("https://github.com/rust-lang").await?;
    let title = driver.title().await?;
    assert!(title.contains("Rust"));
    driver.quit().await
}

页面性能测试

use headless_chrome::{Browser, protocol::page::Metrics};

fn test_performance() -> Result<(), failure::Error> {
    let browser = Browser::default()?;
    let tab = browser.wait_for_initial_tab()?;
    tab.navigate_to("https://www.bing.com")?;
    let metrics = tab.get_metrics()?;
    assert!(metrics.layout_duration.unwrap() < 1.0);
    Ok(())
}

多浏览器并行测试

use thirtyfour::prelude::*;
use tokio::task;

async fn parallel_test() -> WebDrive

网站公告

今日签到

点亮在社区的每一天
去签到