自动化测试之 seleniumIDE,Selenium1,selenium2和testNG入门

由于前期三个月公司的项目一直在改需求阶段,一直是手动测试,现在项目雏形以及基本页面功能都确定下来,为了不让自己陷入天天测同一功能的无限循环中,故开始自动化测试的学习之路,也为自己以后的发展铺铺路。

一.自动化测试介绍

自动化测试使用情况:

  • 软件需求变动不频繁
  • 项目周期足够长
  • 自动化测试脚本可重复使用
  • 需要大量时间和人力(性能测试,配置测试,大数据量输入测试)

 目的:主要用于回归测试:检验修复bug后确保好的功能没有被破坏,并不是为了找新bug。

下面从四个方面来说明:测试类型/流程/框架/工具
1.自动化测试类型:

 API testing:webservice测试,接口测试,输入参数,看服务端数据是否正确

UNIT testing:单元测试,测试代码测试方法输入的参数与return返回值
GUI testing:自动化方式驱动浏览器实现手动模拟的方式,如下面的selenium自动化,用脚本驱动浏览器

performance  testing:性能测试,产生大的并发,负载,多线程方式产生并发,节省成本。

2.自动化测试流程:

设计测试用例-设计测试脚本-运行测试脚本-获取测试结果-分析测试报告
分析case的可能性,计划评估,做测试用例,测试环境搭建(测试数据准备),自动化脚本书写,执行脚本,查看测试的脚本。

3,测试代码结构

配置:测试对象,测试环境,输入参数
src:类库,测试用例,测试脚本,
test Suites:用例分类
测试数据:如何更新!!
测试日志:对错误的记录,原因,现象,记录错误场景
测试结果:记录所有结果,错误和正确的都有

4.测试工具

 

传统的自动化测试更关注的产品UI层的自动化测试,而分层的自动化测试倡导产品的不同阶段(层次)都需要自动化测试,表示不同阶段所投入自动化测试的比例。

我们需要规范的来做单元测试同样需要相应的单元测试框架,如java的Junit、testNG,C#的NUnit ,python 的unittest、pytest 等,几乎所有的主流语言,都会有其对应的单元测试框架。

单元测试关注代码的实现逻辑,例如一个if 分支或一个for循环的实现;那么集成、接口测试关注的一是个函数、类(方法)所提供的接口是否可靠。例如,我定义一个add()函数用于计算两个参数的结果并返回,那么我需要调用add()并传参,并比较返回值是否两个参数相加。

当然,接口测试也可以是url的形式进行传递。例如,我们通过get方式向服务器发送请求,那么我们发送的内容做为URL的一部分传递到服务器端。但比如 Web service 技术对外提供的一个公共接口,需要通过soapUI 等工具对其进行测试。

UI层的自动化测试工具非常多,比较主流的是QTP,Robot Framework、watir、selenium 等。

首先要先确认你所测试的产品是桌面程序(C/S)还是web应用(B/S)。

  桌面程序的工具有:QTP、 AutoRunner

  web应用的工具有:QTP、AutoRunner、Robot Framework、watir、selenium

被测试有产品是C/S架构的,那么推荐QTP ,QTP在UI自动化测试领域占到了一半的试用率。所以,足以说明QTP在自动化领域强大,易用性等。学习主流的工具也可以使你获得更多的机会。市面上关于QTP的书籍也非常丰富。当然,要想学好QTP ,你必须要掌握VBS脚本语言。

被测产品是B/S 结构,那么推荐selenium ,为什么不是QTP 或其它工具?因为selenium 对B/S应用支持很好,更重要的一点,它支持多语言的开发,真正的试用selenium ,你所要掌握的不仅仅是一个工具而已,你还需要学习一门语言。

假如你决定试用selenium 了之后,你又面临了一个新的问题,选择一门语言。selenium 是支持java、python、ruby、php、C#、JavaScript 。

  从语言易学性来讲,首选ruby ,python

  从语言应用广度来讲,首选java、C#、php、

  从语言相关测试技术成度(及 资料)来讲:ruby ,python ,java

二.selenium入门

首选你在开始selenium之前,需要花一到两个月时间去学一门语言,这里是根据没有语言基础的同学而定的。我推荐ruby ,python ,java 任意一门语言来进行学习。

当然,已经如果有很好的语言基础略过这个环节,或者你的丰富的java编程能力,那么学习python 可能只需要几天时间或更短。

学习selenium之前你必须要理解html、xml和xpath(用于定位测试的元素路径)基本概念。

 

1.seleniumIDE(录制并导出脚本,时ff的一个插件,所以只能在ff浏览器上运行)

 

selenium IDE

 

  selenium IDE 是嵌入到Firefox浏览器中的一个插件,实现简单的浏览器操作的录制与回放功能。那么什么情况下用到它呢?

 

  快速的创建bug重现脚本,在测试人员的测试过程中,发现了bug之后可以通过IDE将重现的步骤录制下来,以帮助开发人员更容易的重现bug。

 

  IDE录制的脚本可以可以转换成多种语言,从而帮助我们快速的开发脚本。

 

安装准备:

(1)需要先安装firbug和firePath(主菜单/附加组件/搜索后直接安装即可):用于方便查找和定位元素

(2)安装selenium IDE(用ff搜索直接安装即可)

录制测试用例(关键字驱动):

主要为三项:

  1. command:分为三种类型:action(操作)/accessor(存储,检查)/assertion(断言,验证)
  2. target:定位元素。用id,name,xpath,链接文字,dom定位,css定位,隐式定位。
  3. value:字符串

导出:选中文件/export test case suite as  (不支持C#和Python2)

 

2.selenium1 (selenium -RC):几乎支持所有浏览器,但是受js安全模型导致的限制,面向过程。

selenium服务器:对应 selenium-server-standalone-2.44.0.jar,捆绑了selenium core (js程序,一系列js函数,用于调用浏览器内置的js解释器,解释和执行selenese命令),并自动将其注入浏览器,

selenium客户端:对应selenium-java-2.44.0.jar(使用客户端库文件的api函数,执行api函数)

安装准备及使用:

1.安装eclipse,配置环境jdk
2.新建java项目和包,导入 selenium-java-2.44.0.jar(客户端包,junit包配置) 和 selenium-server-standalone-2.44.0.jar(服务器),(后续会有selenium-java-2.44.0-srcs.jar 即不用启动服务器,二代,selenium源码,js文件)

3.导入Selenium IDE的测试脚本(只能为java),特别注意:
selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://dhw.lxhbysn.com/pages/E02/index.jsp");

(使用的浏览器为IE的可以打开,其他浏览器需要配置路径,如:"C:\\Users\\DELL\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe,路径为双反斜线)

4.启动selenium服务器,启动bat(自己手动生成bat文件:java -jar jar包路径)
5.运行测试脚本,即运行junit脚本,测试通过,出现 selenium Remote Control ,脚本开始自动执行。

也可以自己创建selenium脚本进行测试:

(1)创建测试实例(用哪个浏览器,起始的打开页面)

DefaultSelenium selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://dhw.lxhbysn.com/pages/E02/index.jsp");

selenium.start();

浏览器导航操作总结:open、goback、refresh、windowsFocus、windowMaxinize、close

对页面元素的操作总结:type、typeKeys、click、clickAt、doubleClick、doubleClickAt、select、check、focus

获取页面元素:getTitle、getLocation、getValue、getText、isChecked、getSelectedIndex、getSelectedLabel、getSelectedValue、getSelectedOptions、getTable、getAttribute、isTextPresent、isElementPresent、isVisible、getXpathCount、

设置等待:waitForPageToLoad(timeout),setTimeout(只针对open),setSpeed(执行速度)

测试控制和调试类:captureEntirePageScreenShot(),highlight(抓取图片时只能用火狐,谷歌和IE代理浏览器)

js弹出框处理:isAlertPresent(是否弹出),getAlert(获取文本内容),chooseOkOnNextConfirmation,AnswerOnNextPrompt

selenium1采用的是js注入进行测试,无法处理js对话框(alert,confirmation,prompt),因为预处理,所以看不到,但是已经处理

浏览器多窗口处理:getAllwindowIds/names/titles(),waitForPopUp(windowID,timeout)/代替thread.sleep()等待窗口完成后,selectPopUp(windowId)/选择子窗口,selectWindow(windowID)/选择任意窗口,openWindow(url,windowID)/在弹出窗口打开新的url

结束测试:close 关浏览器,stop停止服务器会话,关控制界面,shutDownSeleniumServer关服务器。

 

3.selenium2(WebDriver):一套类库,不依赖任何测试框架(junit),无需启动服务器,通过原生浏览器支持或浏览器扩展直接支持浏览器,基于对象的测试

selenium2:绕过js限制,API更易用,只支持:ff,chrome,ie,opera,android,iphone

selenium1:支持更多的浏览器

安装准备和使用:

1.导入selenium-java-2.44.0-srcs.jar,以后运行脚本不用启动服务器
2.对火狐浏览器自带浏览器驱动,其他的浏览器需要下载并配置如下
System.setProperty("webdriver.chrome.driver", "C:\\Users\\DELL\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe");

WebDriver driver = new ChromeDriver();   
Navigation navigation = driver.navigate();   //设置导航实例
navigation.to("http://dhw.lxhbysn.com/pages/E02/login.jsp");

导航操作:to、back/forward、refresh

查找元素:WebElment  a=driver.findElment.(By.id/name/linkText/ClassName/TagName/Xpath

对页面元素的操作:click(勾选操作也用这个),sendKeys,clear,submit

获取页面元素及其内容:getTitle,getCurrentUrl,getText,selected(勾选状态),getTagName,Enabled,Displayed,getAttribute,

弹出对话框的处理:点击后,driver.switchTo().alert().dismiss()/accept()都是点击后关闭,driver.switchTo().alert().sendKeys()填写内容,driver.switchTo().alert().getText()为得到对话框内容,

浏览器多窗口处理:windowHandles,window(转到某个窗口)

设置管理:cookie,超时时间和浏览器窗口

 

4.testNG(用于测试管理,生产测试报告)

下载插件(可到微盘上搜)解压后: 将features.rar解压后的文件件放入eclipse安装路径下的features中 org.testng...rar解压后的文件夹放入eclipse安装路径下的plugins文件夹中 重启eclipse即可,文件名太长,将压缩文件拷过去然后用7zip解压即可。

 

TestNG是一个测试框架,其灵感来自JUnit和NUnit的,但引入了一些新的功能,使其功能更强大,使用更方便。

TestNG是一个开源自动化测试框架;TestNG表示下一代。 TestNG是类似于JUnit(特别是JUnit 4),但它不是一个JUnit扩展。它的灵感来源于JUnit。它的目的是优于JUnit的,尤其是当测试集成的类。 TestNG的创造者是Cedric Beust(塞德里克·博伊斯特)

TestNG消除了大部分的旧框架的限制,使开发人员能够编写更加灵活和强大的测试。 因为它在很大程度上借鉴了Java注解(JDK5.0引入的)来定义的测试,它也可以告诉你如何使用这个新功能在真实的Java语言生产环境中。

TestNG的特点

  • 注解

  • TestNG使用Java和面向对象的功能

  • 支持综合类测试(例如,默认情况下,没有必要创建一个新的测试每个测试方法的类的实例)

  • 独立的编译时间测试代码运行时配置/数据信息

  • 灵活的运行时配置

  • 主要介绍“测试组”。当编译测试,只要问TestNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等

  • 支持依赖测试方法,并行测试,负载测试,局部故障

  • 灵活的插件API

  • 支持多线程测试

测试TestNG的设置

创建一个Java类文件名TestNGSimpleTest  C: > TestNG_WORKSPACE

   
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;

public class TestNGSimpleTest {
	@Test
	public void testAdd() {
		String str = "TestNG is working fine";
		assertEquals("TestNG is working fine", str);
	}
}

TestNG的几种不同的方法可以被调用:

  •  testng.xml 文件

  • ant

  • 命令行

让我们调用使用testng.xml文件。创建一个XML文件名称testng.xml C: > TestNG_WORKSPACE 执行测试用例(s)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
  <test name="test1">
    <classes>
       <class name="TestNGSimpleTest"/>
    </classes>
  </test>
</suite>

检查结果

类编译使用javac编译如下:

===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================

 

 

 

 

 

 

 

 

 

 

 

posted @ 2015-10-23 14:28  小丸子~  阅读(3469)  评论(0编辑  收藏  举报