程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> .net中實現自動化測試

.net中實現自動化測試

編輯:關於.NET

背景

標題看似新穎實際上這裡的自動化在很大范圍內限定在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.cnblogs.com/" />
<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.cnblogs.com/";
            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);
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved