Rust自动化测试的框架
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