.Net 玩自動化測試
2013-03-21 15:07 熬夜的蟲子 閱讀(5115) 評論(1) 收藏 舉報源碼地址 https://github.com/dubing/YoukuAutomation
背景
標題看似新穎實際上這里的自動化在很大范圍內限定在web測試上,和loadrunner測試腳本類似,也都是測試工程師常用的概念。當然作為.net應用,你也可以用在產品演示上。
我使用的背景是在持續集成、每日構建體系中的一個自動化檢查模塊。
之所以說是30秒,是因為下面要介紹的工程確實簡單,但是想精通、從半神到大神其間的差距還是很大了。我只帶大家入門。
工具
selenium (官網 http://www.seleniumhq.org/)
Autoit (官網 http://www.autoitscript.com/site/)
概念
概念性的東西大家可以自行google,這里簡單介紹掃盲下。然后介紹30秒過程。
Selenium是ThoughtWorks公司(題外吐槽下這個公司,在軟件工程領域確實很虎啊,旗下的持續集成系統go也是相當贊的,直接放棄jenkins)開發的一套基于WEB應用的測試工具,直接運行在瀏覽器中,模擬用戶的操作。先談談selenium1,Selenium1 存在2個版本,一個叫 selenium-core, 一個叫selenium-rc 。selenium-core 是使用HTML的方式來編寫測試腳本,你也可以使用 Selenium-IDE來錄制腳本,但是目前Selenium-IDE只有 FireFox 版本。Selenium-RC 是 selenium-remote control 縮寫,是使用具體的語言來編寫測試類。selenium-rc 支持的語言非常多,c#,java,python等等。
selenium2又可以稱為webdriver發布后,Selenium2.0有簡潔的API,WebDriver和WebElement對象,更好的抽象。且支持多中操作系統,多語言,多瀏覽器。同時Selenium2.0進行了架構的調整和升級:Selenium2.0 = Selenium1.0 + WebDriver(也就是說Selenium2.0合并了這兩個項目),所以果斷選擇后者。
AutoIT的使用場景是在WebDriver無法獨立完成的前提下,例如flash,例如各種特殊框。它設計用于Windows GUI(圖形用戶界面)中進行自動化操作.它利用模擬鍵盤按鍵,鼠標移動和窗口/控件的組合來實現自動化任務.而這是其它語言不可能做到或無可靠方法實現的
30秒
如果從0開始30秒完成,主要就是上面介紹的Selenium-IDE,目前只支持Firefox。上圖

第1秒-10秒
改變base url 點擊右邊紅點 開始錄制瀏覽器行為 我在右邊找找看中 搜索“熬夜的蟲子” 點擊搜索按鈕跳轉

第10秒-20秒
點擊右邊綠色小三角按鈕 你會發現當前的行為重讀了一遍 ok一個簡單的瀏覽器行為我們已經復制了,當然這不是我們的目的我們點擊source
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head profile="http://selenium-ide.openqa.org/profiles/test-case"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="selenium.base" href="http://www.rzrgm.cn/" /> <title>New Test</title> </head> <body> <table cellpadding="1" cellspacing="1" border="1"> <thead> <tr><td rowspan="1" colspan="3">New Test</td></tr> </thead><tbody> <tr> <td>open</td> <td>/</td> <td></td> </tr> <tr> <td>type</td> <td>id=zzk_q</td> <td>熬夜的蟲子</td> </tr> <tr> <td>clickAndWait</td> <td>css=input.search_btn</td> <td></td> </tr> </tbody></table> </body> </html>
自動給我們生成了一個html腳本,在選項中格式選擇c# webdrvier

using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;
namespace SeleniumTests
{
[TestFixture]
public class Untitled
{
private IWebDriver driver;
private StringBuilder verificationErrors;
private string baseURL;
private bool acceptNextAlert = true;
[SetUp]
public void SetupTest()
{
driver = new FirefoxDriver();
baseURL = "http://www.rzrgm.cn/";
verificationErrors = new StringBuilder();
}
[TearDown]
public void TeardownTest()
{
try
{
driver.Quit();
}
catch (Exception)
{
// Ignore errors if unable to close the browser
}
Assert.AreEqual("", verificationErrors.ToString());
}
[Test]
public void TheUntitledTest()
{
driver.Navigate().GoToUrl(baseURL + "/");
driver.FindElement(By.Id("zzk_q")).Clear();
driver.FindElement(By.Id("zzk_q")).SendKeys("熬夜的蟲子");
driver.FindElement(By.CssSelector("input.search_btn")).Click();
}
private bool IsElementPresent(By by)
{
try
{
driver.FindElement(by);
return true;
}
catch (NoSuchElementException)
{
return false;
}
}
private string CloseAlertAndGetItsText() {
try {
IAlert alert = driver.SwitchTo().Alert();
if (acceptNextAlert) {
alert.Accept();
} else {
alert.Dismiss();
}
return alert.Text;
} finally {
acceptNextAlert = true;
}
}
}
}
一個完整的test case就出來了。
第20秒到30秒
copy到我們項目中運行試試,很完美。

當然這是最簡單的例子。想要成大神還需要掌握各種方法、了解各種api甚至是原理。
例如用flash上傳 webdriver就很糾結了,使用autoit也是自動化非常有效的方法。針對上傳的window7系統選框,這里我給大家分享一個比較通用的腳本
WinWait("[Class:#32770]", "", 3)
WinActivate("[Class:#32770]")
ControlFocus( "[Class:#32770]", "", "[CLASS:Edit; INSTANCE:1]" )
Send("E:\xxx.avi")
ControlClick("[Class:#32770]", "Open(O)", "Cancel")
Send("!O")
Send("{ENTER}", 0)
使用c#寫的話,引用組件
try
{
//if (fileupflag) break;
Thread.Sleep(1000);
var Autoit = new AutoItX3();
const string widowTitle = "[Class:#32770]";
Autoit.WinWait(widowTitle, "", 1);
Autoit.WinActivate(widowTitle);
Autoit.ControlFocus("[Class:#32770]", "", "[CLASS:Edit; INSTANCE:1]");
Autoit.Send(Filepath);
Autoit.Sleep(100);
Autoit.ControlClick("[Class:#32770]", "Open(O)", "Cancel");
Autoit.Sleep(100);
Autoit.Send("!O");
Autoit.Send("{ENTER}", 0);
//Thread.CurrentThread.Abort();
}
catch (Exception ex)
{
Console.WriteLine("當前捕捉失敗,繼續掃描,錯誤消息為" + ex.Message);
}
題外
頁首源碼里是一個youku上傳的demo,小而全 大家可以參考下
![]() |
原創作品允許轉載,轉載時請務必以超鏈接形式標明文章原始出處以及作者信息。 作者:熬夜的蟲子 點擊查看:博文索引 |

浙公網安備 33010602011771號