我的自动化测试历程(Selenium+TestNG+Java+ReportNG+Jenkins)
原地址:http://blog.csdn.net/shilinjie_8952/article/details/53380373?locationNum=11&fps=1
测试环境:Java+Selenium+TestNG,Jenkins持续集成。
测试代码
代码结构
采用页面对象模型(Page Object),减少UI修改后,对代码的影响。
Java编写,采用TestNG测试框架。
先说点概念的:
Selenium
Selenium是一套完整的Web应用程序测试系统,它包含了测试的录制(Selenium IDE)、编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可运行于任何支持JavaScript的浏览器上。
Selenium Core:Selenium的核心部分,它由一些纯js代码组成, 可以运行在windows/linux的不同browser上,而IDE是在core的基础上的一种应用, 通过UI实现类似QTP/Winner的脚本录制回放功能,它是Selenium IDE 和 Selenium RC 的引擎。
Selenium IDE: FireFox 的一个插件,支持脚本录制。
Selenium RC: Selenium Remote Control,是客户端利用各种编程语言,通过网络向Selenium Server发送指令,Selenium Server接收到测试指令后,启动浏览器并向其发出JavaScript调用实现对Html页面的全面追踪,并通过网络把执行结果返回给调用者。
Selenium WD: Selenium WebDriver。Web驱动。
Selenium Grid:允许同时并行地、在不同的环境上运行多个测试任务,极大地加快 Web 应用的功能测试。 (没有用过,不太了解)TestNG
TestNG是一个测试框架,使用@Test控制测试的执行,执行后,自动输出测试报告。
环境搭建
Java运行环境
根据个人电脑系统类型选择对应的jdk安装包下载(jdk-8u5-windows-x64.exe或jdk-7u45-windows-i586.exe)下载完成之后,打开软件进行安装。
配置环境变量
系统环境变量JAVA_HOME:d:\Java\jdk1.8.0_05(写 自己安装的jdk地址)
系统环境变量Path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
系统变量CLASSPATH:;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
配置完成之后,在doc下输入javac,如果出现用法:javac。。,证明配置好了
JDBC配置
Jdbc用于java读取sql server数据库。
数据库安装就不多说了,我本地64位计算机,jdk1.8,Sql Server 2008R2。
- 下载Microsoft JDBC Driver 6.0 (sqljdbc_6.0.7728.100_chs.tar.gz)
官网地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=11774
我只留下了sqljdbc4.jar - 配置环境变量CLASSPATH
新增:C:\sqljdbc4;( 我放在了C盘根目录下) - 复制包到相关目录下
sqljdbc4.jar文件拷到
E:\Program Files\Java\jdk1.8.0_05\jre\lib\ext
E:\Program Files\Java\jre8\lib\ext
目录下,分别拷贝一份(看你的安装目录了)
Java开发工具
eclipse-standard-kepler-SR1-win32-x86_64
相关包导入
TestNG
TestNG框架相关:
bsh-2.0b4.jar,jcommander.jar,snakeyaml.jar这三个包。
在org.testng.eclipse_6.9.9.201510270734中lib中,我把整个文件夹(rg.testng.eclipse_6.9.9.20151027073)放在了eclipse所在的目录:\eclipse\features\org.testng.eclipse_6.9.9.201510270734\lib ,之后在引入这三个包。Selenium
selenium-server-standalone-2.48.2.jarJxl.jar
用于读取excel表格
浏览器
浏览器使用火狐浏览器39.0.3,虽然版本比较低,但是与selenium版本兼容,需要安装组件:firepath
页面元素
定位
通过页面元素的固定属性,来确定元素。可以通过id,name,className,tagName,cssSelector,linkText,partialLinkText等属性来定位,不太好定位的元素,可以使用xpath方式。
- 通过id定位
driver.findElement( By.id("Text1"))
- 通过name定位
driver.findElement( By.name("输入"))
- 通过xpath定位
driver.findElement( By.xpath("html/body/div[1]/p[1]/label/input"))
- 通过linkText定位链接
driver.findElement( By.linkText ("这是一个链接"))
,需要完整匹配文字
- 通过partialLinkText定位链接
driver.findElement( By. partialLinkText ("链接"))
,不需要完整匹配文字
- findElements()
定位多个元素,返回一个list,List elements,通过elements.get(index).click();进行遍历操作,index从0开始。
注意:如果属性中有空格,就只能使用xpath方法确定元素。
元素操作
1.文本框赋值
sendKeys("你好!")
2.清空文本框
clear()
3.获取文本框中内容
getAttribute("value")
4.点击
.click()
5.下拉框
- 选择
首先定义一个下拉框对象:Select select = new Select(driver.findElement(By.xpath("//*[@id='select_k1']")));
第二步,通过对象定位所选的下拉框内容,三种方法:
//通过可见文本去选择
select.selectByVisibleText("哈尔滨");
//通过html中的value值去选择
select.selectByValue("heb");
//通过index(索引从 0 开始) 选择
select.selectByIndex(2);
- 1
- 2
- 3
- 4
- 5
- 6
获取下拉框已选值
使用getFirstSelectedOption()获得所选的项,再通过getText()获得值:select. getFirstSelectedOption().getText()
6.复选框
7.单选按钮
//选中
click();
//判断单选框是否被选中,返回布尔值
isSelected();
- 1
- 2
- 3
- 4
- 5
8.页面弹框处理(alert)
//声明对话框变量
Alert alert = driver.switchTo().alert();
//获取弹框中的文字
alert.getText()
//点击弹框中的确定
alert.accept();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
9.表单(Form)
Form 中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交:
WebElement approve = driver.findElement(By.id("approve"));
approve.submit();
//只适合于表单的提交,例如百度搜索框输入关键字后按回车键进行搜索
- 1
- 2
- 3
- 4
10.上传文件
//定位上传控件
WebElement upload = driver.findElement(By.id("替换成实际的定位的值"));
//定义了一个本地文件的路径
String filePath = "d:\text.txt";
//为上传控件进行赋值操作,将需要上传的文件的路径赋给控件
upload.sendKeys(filePath);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
11.拖拉
//定义第一个元素
WebElement element1 =driver.findElement(By.XX));
//定义第二个元素
WebElement element2= driver.findElement(By.XX));
//将第一个元素拖拽到第二个元素
(new Actions(driver)).dragAndDrop(element1, element2).perform();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
12.鼠标悬停
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.XX)).perform();
- 1
- 2
- 3
13.滚动页面至某元素出现
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView(true);", driver.findElement(By.XX));
- 1
- 2
- 3
执行用例
使用TestNG中的@Test执行用例。
@Beforeclass 在执行类之前执行, @Afterclass在执行类之后执行
输出结果
TestNG
TestNG自带的结果,html类型。
ReportNG
1.配置:
下载
三个包:guice-3.0.jar,reportng-1.1.4.jar,velocity-dep-1.4.jar,导入到项目中;配置监听
Windows->preference-TestNG,配置如下图:
关闭默认监听,改为:
org.uncommons.reportng.HTMLReporter
配置xml文件
新增:<listener class-name="org.uncommons.reportng.HTMLReporter" />
注明:我放在了前面
2.二次开发
反编译工具:jd-gui.exe(打开导入文件即可)或jad.exe和net.sf.jadclipse_3.3.0.jar
2.1 配置:
下载jad.exe和jadclipse(需要下载支持eclipse版本的,我的eclipse是4.3.0)。
将jad.exe放在java目录下:E:\Program Files\Java\jdk1.8.0_05\jre\bin;
下载地址:http://download.csdn.net/detail/shilinjie_8952/9674940
将net.sf.jadclipse_3.3.0.jar拷贝到:XX\eclipse\plugins下面,重启eclipse
打开之后,选择Eclipse->Window->Preferences->Java,设置如下图:
配置打开.class默认方式:
.class和.class without source都要修改为默认值是JadClipse
注意:如果修改完成后,打开的.class文件全是注释,说明Jad的路径不正确。
有时这个反编译的不好用,可以配合jd-gui.exe或者其他反编译软件一起查看源码。
2.2 修改源码
思路:新建一个工程,导入需要的包,按照ReportNG创建目录和java文件,肯定会有些错误,修改一(因为是反编译的,所以会有些问题)能编译通过就可以,(我的是最笨的,一个一个创建的java文件,应该有更好的办法)。按照需求修改源码,右键工程,就可以导出jar了。
元素管理
两种方法都可以对元素进行管理:
- Excel文件存储元素
可以将元素统一存储在excel中,在执行用例之前,统一读取到数组中,包括:编号,名称,查找方法,值,描述。
- 数据库存储元素
可以将元素通过工具直接插入到数据库中保存,在执行用例之前,统一读取到数组中,包括:编号,名称,查找方法,值,描述等字段。
用例管理
用例采用excel进行管理,用sheet区分不同功能,储存相关需要验证的字段,固定列:第一列(编号),倒数第二列(预期结果),最后一列(错误类型),三列固定的值,用于在代码中使用。
持续集成
采用Jenkins+Ant+Svn实现。
Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:持续的软件版本发布/测试项目、监控外部调用执行的工作。
Ant:形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,这里用来:从svn上签出到某个文件夹下—>编译—>执行用例
Jenkins配置
- 安装jdk
步骤参考本文环境搭建-Java运行环境。 - 下载Jenkins
通过官网下载:https://jenkins.io/index.html
下载下来的是一个msi文件,直接点击安装,默认安装,时间挺长的,而且好多插件装不上,没关系,用到再哪个装哪个。
装完之后,访问:http://127.0.0.1:8080/ ,需要登录,登录名:admin,admin的密码保存在安装目录Jenkins\secrets\initialAdminPassword文件中。
3. 插件安装
Ant Plugin Ant Plugin:执行build.xml 文件
SVN Publisher plugin:通过SVN签出源码
HTML Publisher Plugin:将测试结果显示在Jenkins中
4. 系统配置
系统管理—Global Tool Configuration,配置jdk和ant
注意:登录就去有时会报错,错误大概就是插件没有安装好,去系统设置里面,找一下报错的插件,装上就好了。步骤如下:
找到插件,勾选,点击下面直接安装:
安装过程中可能会出现下载插件失败的情况,可以根据失败提示中的下载地址,下载到本地,选择“高级”上传下载的插件,就会自动安装了:
节点配置:
有时候没有选项:Launch slave agents using Java Web Star
解决:系统管理-Configure Global Security-随机选取勾上 tcp port for JNLP agents,原来是禁用的
Ant配置
- Jdk安装
参考本文环境搭建-Java运行环境 - Ant
下载:http://ant.apache.org/srcdownload.cgi或http://download.csdn.net/detail/shilinjie_8952/9689638下载。
环境变量:
ant_home:E:\ant\apache-ant-1.9.7-bin\apache-ant-1.9.7,bin目录所在路径
Path: %ANT_HOME%\bin ant.bat所在路径
在doc下,测试:ant.bat,出现下图配置成功:
Jenkins使用
1.创建节点
点击ok
进入配置节点:
创建好之后,如下图:
启动节点:点击“Launch”,下载,之后,双击下载到的slave-agent.jnlp文件,或在doc下执行红框中的那一串(我用命令启动提示Unable to access jarfile slave.jar),都可以启动,启动好如下图:
2.创建任务
点击“创建一个新任务”,填写任务名称,选择自由风格,如下图:
设置源码管理:添加svn源码路径,设置svn的用户名密码
构建触发器:设置何时什么频率进行构建
图~~
我设置的是:每天17点28分构建,28 17 * * *说明:
第一个参数代表的是分钟 minute,取值 0~59;
第二个参数代表的是小时 hour,取值 0~23;
第三个参数代表的是天 day,取值 1~31;
第四个参数代表的是月 month,取值 1~12;
最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。
所以 28 17 * * * 表示的就是每天的17点28构建一次。
构建:选择Execute Windows batch command,填写ant
或者选择Invoke Ant:
构建后,需要显示一下测试报告,采用publish html report方式,实际上就是读取一个html文件,显示在jenkins里面的Html Report中
到此,任务就创建好了。
构建的过程是:先利用svn签出源码,然后根据构建中的ant命令或Invoke Ant方式执行构建,实际上就是在源码文件夹中寻找build.xml文件,并执行,接下来需要说明一下被执行的build.xml文件如何配置。
3.配置build.xml文件
这个配置很重要,决定了能否执行测试用例
4.构建
可以按照构建触发器中的设置进行构建,也可以立刻构建查看各项是否设置正确:
构建过程中查看控制台,可以查看到过程:
执行完用例之后,通过HTML Report查看结果
问题与解决方法
1.问题:构建过程中,不显示浏览器
解决方法:不使用系统级服务,而是手动启动Jenkins。
我的电脑->管理->服务和应用程序->服务,将jenkins服务禁用,并且禁止启动,自行用命令启用
java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar "E:\Program Files (x86)\Jenkins\jenkins.war"
最好写成bat文件,内容:
echo "Jenkins CI automation testting"
java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar "E:\Program Files (x86)\Jenkins\jenkins.war"
pause
每次启动通过bat文件启动
2.问题:构建报错:编码GBK的不可映射字符
解决方法:在build.xml中,javac下,增加,build.xml中有注释。
3.问题:报告显示不正确,index中没有值
解决方法:在启动时,用:java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar “E:\Program Files (x86)\Jenkins\jenkins.war”启动。
4.遗留问题:操作后,需要向测试人员发送邮件,邮件发送失败提示:SendFailedException message: 553 authentication is required,126 smtp7,DsmowADX5VYXxztYRH8tCQ–.15695S2 1480312600。待解决。
我的自动化测试历程(Selenium+TestNG+Java+ReportNG+Jenkins)的更多相关文章
- Selenium 我的自动化测试历程 (Selenium+TestNG+Java+ReportNG+Jenkins)
测试环境:Java+Selenium+TestNG,Jenkins持续集成. 测试代码 代码结构 采用页面对象模型(Page Object),减少UI修改后,对代码的影响. Java编写,采用Te ...
- 自动化测试:java + testng + maven + reportng + jenkins + selenium (一)_基于win环境
集成环境:jdk1.7 + tomcat1.7+ eclipse mars + maven + testng6.14.2 + selenium-java2.40.0 + reportng1.1.4 + ...
- UI自动化项目搭建(selenium+testng+java+maven)
一 工具准备 selenium chormDriver 二 环境准备 三搭建步骤
- Java+Selenium+Testng自动化测试学习(二)
Java+Selenium+TestNG自动化测试框架整合 1.简化代码 封装一个定位元素的类,类型为ElementLocation package com.test; import org.open ...
- 《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)
1.简介 上一篇中介绍了DataProvider如何传递参数,以及和一些其他方法结合传递参数,今天宏哥接着把剩下的一些常用的也做一下简单的介绍和分享. 2.项目实战1 @DataProvider + ...
- 《手把手教你》系列基础篇(七十六)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 下篇(详解教程)
1.简介 今天这一篇宏哥主要是结合实际工作中将遇到的测试场景和前边两篇学习的知识结合起来给大家讲解和分享一下,希望以后大家在以后遇到其他的测试场景也可以将自己的所学的知识应用到测试场景中. 2.测试场 ...
- 《手把手教你》系列基础篇(七十七)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 上篇(详解教程)
1.简介 今天主要是讲解和分享:TestNG中一个类中有多个测试方法的时候,多个测试方法的执行顺序或者依赖关系的问题.如果不用dependsOnMethods,testNG会自动根据@Test方法名称 ...
- 《手把手教你》系列基础篇(七十八)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 中篇(详解教程)
1.简介 上一篇讲解了依赖测试的各种方法,今天继续讲解依赖测试的方法,这一篇主要是讲解和分享通过xml文件配置组名依赖方法( 主要是测试组的用法).废话不说,直接上干货. 2.实例 测试组:一个组可包 ...
- 《手把手教你》系列基础篇(八十)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试-番外篇(详解教程)
1.简介 经过前边几篇知识点的介绍,今天宏哥就在实际测试中应用一下前边所学的依赖测试.这一篇主要介绍在TestNG中一个类中有多个测试方法的时候,多个测试方法的执行顺序或者依赖关系的问题.如果不用de ...
随机推荐
- 前端读者 | 前端面试基础手册(HTML+CSS)
本文来自@羯瑞:希望前端面试基础手册能帮助要找工作的前端小伙伴~~ HTML 前端需要注意哪些SEO? 合理的title.description.keywords:搜索对着三项的权重逐个减小,titl ...
- gvim代码补全
gvim 代码自动提示 插件 插件名:AutoComplPop 下载地址:http://www.vim.org/scripts/script.php?script_id=1879 gvim 代码模板补 ...
- PAT L3-005. 垃圾箱分布
最短路. 枚举垃圾箱放哪里,然后算最短路. #include<map> #include<set> #include<ctime> #include<cmat ...
- Java流(一)
流: 概念:Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存中,形成了流,然后将这些流还可 以写到另外的目的地(文 ...
- win7家庭版如何获得管理员权限?
1.首先,打开你的命令提示符,输入cmd.有一点非常重要,如图所示,我们必须“以管理员的方式打开”.只有以管理员身份打开,那么接下来要敲打的命令才会成功. 2. 打开命令提示符后,在输入框输入net ...
- Ghostscript 中 ps2pdf 命令在 windows msys 下的运行错误问题。
前两天看到了 miloyip/game-programmer 这个项目觉得特别有用,真是好东西,明确了指出了学习路线,尤其是新手.不过打开看,有些书对应的亚马逊链接是无效的,比如<Tricks ...
- 并发系列3-大白话聊聊Java并发面试问题之谈谈你对AQS的理解?【石杉的架构笔记】
- JQuery总结+实例
JQuery是什么? Jquery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari ...
- Codeforces 285 E. Positions in Permutations
\(>Codeforces \space 285 E. Positions in Permutations<\) 题目大意 : 定义一个长度为 \(n\) 的排列中第 \(i\) 个元素是 ...
- 【图论】Self-Assembly(6-19)
[UVA1572]Self-Assembly 算法入门经典第6章6-19(P172) 题目大意:有一些正方形,每条边上都有A-~Z- A+~Z+的编号,或者00,A+的边可以拼A-,反之亦然.00的边 ...