您的位置:首页 > 其它

自动化测试开发实际应用系列(四)应用Selenium + NUNIT对动态WEB测试自动化

2012-11-01 09:53 423 查看
(一)测试背景概述
接上篇《HTTP JSON协议接口测试自动化实例》所述:



产品1和产品2为待测试对象,抽象出来可以归结为【http json协议接口测试】与【http web功能测试】。

其中【http web功能测试】针对未曾接触的一种数据库,还包含了大量数据库和SQL级别的专有操作测试内容,此处不予讨论。测试对象无论是由C/C++还是Java还是JS/Html实现,对于协议测试和功能测试(白盒测试和单元测试另当别论),都不需要深入了解该语言,熟悉任一种高级语言(最好还有一种脚本语言)+自动化思维意识
+快速学习能力,完全能实施测试自动化策略。

同样,先来分析一下【http web功能】的特点。

(二)测试需求分析
1. ExtJs框架+Html/Css纯网页,逻辑全部由JS脚本代码控制,不需编译,浏览器直接解释执行。

2. 网页上每个控件元素的ID属性等由ExtJs框架动态分配,每次打开可能都不一样。如:登录按键本次ID为Login-1055,下次打开网页可能为Login-1056。故基于录制和回放脚本的流程行不通。

3. 查找网上流行的WEB自动化测试框架或工具,均实际尝试使用,最终选择开源的WEB自动化测试工具Selenium,利用其提供的XPath和WEB
Driver类库 + NUnit(.NET平台单元测试工具)。

* 扩展: Selenium是ThoughtWorks公司开发的一套基于WEB应用的测试工具,直接运行在浏览器中,核心browser bot是用
Javascript 编写的,模拟用户的操作,主要包括三个部分Selenium-IDE, Selenium-Core, Selenium-RC。它可以被用于单元测试,回归测试,冒烟测试,集成测试,验收测试等。Selenium支持Firefox、IE、Chrome等多种浏览器和多种操作系统(Firefox含有录制脚本插件,可导出为其他语言用例脚本),提供包括Java/C#/Python/Ruby多种语言的RC类库和Driver类库,即可以使用其中任一种语言进行自动化测试,其Driver类库一般都和相应语言的单元测试工具结合使用,如C#+
Selenium Driver + NUnit, Java + Selenium Driver + JUnit, Python + Selenium Driver +PyUnit等。

(三)设计和技术细节准备
1. 使用Firefox的录制脚本插件Selenium IDE录制一段WEB操作脚本并导出为C#代码(参照格式)。

2. 创建NUnit的工程(需要安装Visual Studio的NUnit插件),导入刚才的代码。

3. 进行WEB操作,设计测试用例单元,分析操作中每个控件元素的XPath(参见/article/7784719.html),唯一标示网页上每个控件元素,然后调用Selenium
Driver提供的API,通过XPath寻找到该控件并模拟操作。

4. 检查点:使用Selenium Driver提供的API,通过XPath寻找到该控件并取得对应属性,利用NUnit的断言进行比较,得出期望结果是否一致。

5.扩展结合(封装引入其他有用API更加方便的测试和检查):其他公用方法实现,利用Windows API引入关闭程序进程、浏览器窗口前置/最大化/最小化、模拟键盘发送按键消息到OS、模拟鼠标点击、屏幕(浏览器窗口/区域)截图(断言失败时调用)等自动操作。

(四)开发实施和自测
1. 引用命名空间和基本结构属性

using System.Threading;//Thread.Sleep
using NUnit.Framework;//NUint
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;
using System.Windows.Forms;//SendKeys
using WugWinAPI;//API扩展
namespace AutoTestCWM
{
[TestFixture]
public
class FrameTest
{
privateIWebDriver driver;
privateStringBuilder verificationErrors;
privatestring baseURL;
[SetUp]
publicvoid SetupTest()
{

//……
}
[TearDown]
publicvoid TeardownTest()
{

//……
}
[Test]
publicvoid Frame001()
{

//……
}
[Test]
publicvoid Frame002()
{

//……
}
}
}
2. 打开浏览器网页

[SetUp]
publicvoid SetupTest()
{

PublicUtil.KillFirefox();

Thread.Sleep(100);
driver =
new FirefoxDriver();
baseURL =
"https://127.0.0.1:8282/";
verificationErrors =
new StringBuilder();
driver.Navigate().GoToUrl(PublicUtil.BaseURL +"/");

Thread.Sleep(1000);
}
3. 关闭和清理资源
[TearDown]
publicvoid TeardownTest()
{

try
{

if (verificationErrors.ToString().Equals(""))
{
driver.Quit();
}
}

catch (Exception)
{

// Ignore errors if unable to close the browser
}
Assert.AreEqual("", verificationErrors.ToString());
}
4. 测试单元举例

[Test]
publicvoid Frame002()
{

//测试数据XPath

string btnID = "//div[@class='x-panel x-column x-panel-default']//img[@src='resources/images/status_group.png']";

string check_point = "//div[@id='memGridInView-body']//table/tbody/tr[3]/td[2]";

string check_result = "";

//调用登录
F_Login();

//调用API激活浏览器窗口

PublicUtil.ActiveWindow();

//点击按键
driver.FindElement(By.XPath(home_btnID)).Click();

Thread.Sleep(1000);

//点击按键
driver.FindElement(By.XPath(btnID)).Click();

Thread.Sleep(10000);

//检查点,取得被校验值
check_result = driver.FindElement(By.XPath(check_point)).Text;

int data_space = Convert.ToInt32(check_result.Replace(" MB",""));

//调用退出
F_Logout();

//断言,检查是否小于等于1024MB

Assert.LessOrEqual(check_result, "999 MB");//字符串比较

Assert.LessOrEqual(data_space, 1024);//数值比较

//自动保存当时截图

IntPtr whand = ApiMethod.GetProcessMainFormHandle("firefox");

ScreenCapture.CaptureWindowToFile(whand, @"C:\firefox\test_table_" +DateTime.Now.ToString("HHmmss") +".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
(五)结果演示



附:通用自动化测试工具效果
1. 主体框架实现特定功能,高级语言完成,并开放大量实用API,且不断增加和完善

2. 嵌套或封装一种或多种脚本语言解析器,能够动态执行测试用例脚本,对Windows窗体、Web、代码、接口、协议或性能等若干方面进行测试(扩展:录制功能)

3. 流程完善,能够准确高效的解放人力和深入测试,手工尽可能少的参与或专注于测试用例脚本工作

4. 可扩展性强,能够远程操控多个多种平台(分布集群,通过网络通信、协议通信等),能够并行调度执行,可配置可存储,资源共享方便

5. 自动化框架工作:检测新的版本-->下载、编译、批量部署-->调用指定测试脚本执行测试-->邮件或消息通知QA测试结果报告路径和发现的bug。

6. 手工工作:编写修改测试脚本并上传、收邮件校验bug、喝咖啡。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐