测试环境: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。

  1. 下载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
  2. 配置环境变量CLASSPATH
    新增:C:\sqljdbc4;( 我放在了C盘根目录下)
  3. 复制包到相关目录下
    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.jar

  • Jxl.jar
    用于读取excel表格

浏览器

浏览器使用火狐浏览器39.0.3,虽然版本比较低,但是与selenium版本兼容,需要安装组件:firepath

页面元素

定位

通过页面元素的固定属性,来确定元素。可以通过id,name,className,tagName,cssSelector,linkText,partialLinkText等属性来定位,不太好定位的元素,可以使用xpath方式。

  • 1. 通过id定位

driver.findElement( By.id("Text1"))

  • 2. 通过name定位

driver.findElement( By.name("输入"))

  • 3. 通过xpath定位

driver.findElement( By.xpath("html/body/div[1]/p[1]/label/input"))

  • 4. 通过linkText定位链接

driver.findElement( By.linkText ("这是一个链接")),需要完整匹配文字

  • 5. 通过partialLinkText定位链接

driver.findElement( By. partialLinkText ("链接")),不需要完整匹配文字

  • 6. 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);
  • 获取下拉框已选值

    使用getFirstSelectedOption()获得所选的项,再通过getText()获得值:

    select. getFirstSelectedOption().getText()

6.复选框

7.单选按钮

//选中

click();

//判断单选框是否被选中,返回布尔值
isSelected();

8.页面弹框处理(alert)

//声明对话框变量
Alert alert = driver.switchTo().alert();
//获取弹框中的文字
alert.getText()
//点击弹框中的确定
alert.accept();

9.表单(Form)

Form 中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交:

WebElement approve = driver.findElement(By.id("approve"));
approve.submit();
//只适合于表单的提交,例如百度搜索框输入关键字后按回车键进行搜索

10.上传文件

//定位上传控件
WebElement upload = driver.findElement(By.id("替换成实际的定位的值"));
//定义了一个本地文件的路径
String filePath = "d:\text.txt";
//为上传控件进行赋值操作,将需要上传的文件的路径赋给控件
upload.sendKeys(filePath);

11.拖拉

//定义第一个元素
WebElement element1 =driver.findElement(By.XX));
//定义第二个元素
WebElement element2= driver.findElement(By.XX));
//将第一个元素拖拽到第二个元素
(new Actions(driver)).dragAndDrop(element1, element2).perform();

12.鼠标悬停

Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.XX)).perform();

13.滚动页面至某元素出现

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView(true);", driver.findElement(By.XX));

执行用例

使用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了。

元素管理

两种方法都可以对元素进行管理:

  1. Excel文件存储元素
    可以将元素统一存储在excel中,在执行用例之前,统一读取到数组中,包括:编号,名称,查找方法,值,描述。

 
  1. 数据库存储元素
    可以将元素通过工具直接插入到数据库中保存,在执行用例之前,统一读取到数组中,包括:编号,名称,查找方法,值,描述等字段。描述在这里(自己写的C#小程序)

 

用例管理
用例采用excel进行管理,用sheet区分不同功能,储存相关需要验证的字段,固定列:第一列(编号),倒数第二列(预期结果),最后一列(错误类型),三列固定的值,用于在代码中使用。

 

持续集成

采用Jenkins+Ant+Svn实现。

Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:持续的软件版本发布/测试项目、监控外部调用执行的工作。

Ant:形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,这里用来:从svn上签出到某个文件夹下—>编译—>执行用例

Jenkins配置

  1. 安装jdk
    步骤参考本文环境搭建-Java运行环境。
  2. 下载Jenkins
    通过官网下载:https://jenkins.io/index.html

     

下载下来的是一个msi文件,直接点击安装,默认安装,时间挺长的,而且好多插件装不上,没关系,用到再哪个装哪个。

装完之后,访问:http://127.0.0.1:8080/ ,需要登录,登录名:admin,admin的密码保存在安装目录Jenkins\secrets\initialAdminPassword文件中。

  1. 插件安装

    Ant Plugin:执行build.xml 文件

    SVN Publisher plugin:通过SVN签出源码

    HTML Publisher Plugin:将测试结果显示在Jenkins中

    Email Extension Plugin:发邮件使用

  2. 系统配置
    系统管理—Global Tool Configuration,配置jdk和ant

     

注意:登录就去有时会报错,错误大概就是插件没有安装好,去系统设置里面,找一下报错的插件,装上就好了。步骤如下:

 

找到插件,勾选,点击下面直接安装:

 

安装过程中可能会出现下载插件失败的情况,可以根据失败提示中的下载地址,下载到本地,选择“高级”上传下载的插件,就会自动安装了:

 

节点配置:
有时候没有选项:Launch slave agents using Java Web Star

解决:系统管理-Configure Global Security-随机选取勾上 tcp port for JNLP agents,原来是禁用的

 

Ant配置

  1. Jdk安装 参考本文环境搭建-Java运行环境
  2. Ant 下载:http://ant.apache.org/srcdownload.cgihttp://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中

 

如果需要发送邮件,也可以添加一个构建后操作:

需要填写收件人地址,邮件内容选择了html;Attach Build Log,选择Attach Build Log(发送日志附件);trigger触发发邮件,选择总是发邮件。

 

需要参考下面:5.配置发送邮件 将发邮件配置好

Defult content内容

<body>
<table border="1" cellspacing="0" cellpadding="5">
<tr height=30 bgcolor="#aaa">
<td align="center" >名称</td>
<td align="center" >值</td>
</tr>
<tr height=30 bgcolor="#d5d5d5">
<td align="left" >项目名称</td>
<td align="left" >$PROJECT_NAME</td>
</tr>
<tr height=30 bgcolor="#d5d5d5">
<td align="left">执行编号</td>
<td align="left" >$BUILD_NUMBER</td>
</tr>
<tr height=30 bgcolor="#d5d5d5">
<td align="left" >构建状态</td>
<td align="left" >$BUILD_STATUS</td>
</tr>
<tr height=30 bgcolor="#d5d5d5">
<td align="left" >触发原因</td>
<td align="left" >${CAUSE}</td>
</tr>
<tr height=30 bgcolor="#d5d5d5">
<td align="left" >日志地址</td>
<td align="left" ><a href="${BUILD_URL}console">${BUILD_URL}console</a></td>
</tr>
<tr height=30 bgcolor="#d5d5d5">
<td align="left" >构建地址</td>
<td align="left" ><a href="$BUILD_URL">$BUILD_URL</a></td>
</tr>
<tr height=30 bgcolor="#d5d5d5">
<td height=30 bgcolor="#d5d5d5" colspan="2" >
${JELLY_SCRIPT,template="html"}
</td> </tr>
</table>

到此,任务就创建好了。

构建的过程是:先利用svn签出源码,然后根据构建中的ant命令或Invoke Ant方式执行构建,实际上就是在源码文件夹中寻找build.xml文件,并执行,接下来需要说明一下被执行的build.xml文件如何配置。

3.配置build.xml文件

这个配置很重要,决定了能否执行测试用例

 

4.构建

可以按照构建触发器中的设置进行构建,也可以立刻构建查看各项是否设置正确:

 

构建过程中查看控制台,可以查看到过程:

 

执行完用例之后,通过HTML Report查看结果

 

5.配置发送邮件

 系统设置:Jenkins Location 设置系统管理员地址

 

系统设置:Extended E-mail Notification设置

我用的是qq邮箱,密码是16位授权码,需要勾选ssl,不然服务器报错

 

 系统设置:邮件通知
要与系统管理员邮箱设置一致,密码16位授权码

 

问题与解决方法

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"启动。

转载自《https://testerhome.com/topics/6495》  --  站在巨人的肩膀上

Selenium 我的自动化测试历程 (Selenium+TestNG+Java+ReportNG+Jenkins)的更多相关文章

  1. 我的自动化测试历程(Selenium+TestNG+Java+ReportNG+Jenkins)

    原地址:http://blog.csdn.net/shilinjie_8952/article/details/53380373?locationNum=11&fps=1 测试环境:Java+ ...

  2. 自动化测试:java + testng + maven + reportng + jenkins + selenium (一)_基于win环境

    集成环境:jdk1.7 + tomcat1.7+ eclipse mars + maven + testng6.14.2 + selenium-java2.40.0 + reportng1.1.4 + ...

  3. 基于Java+Selenium的WebUI自动化测试框架(十四)-----使用TestNG的Sample

    到目前为止,我们所写的东西,都是集中在如何使用Selenium和Java来定位和读取元素.那么,到底如何具体开展测试,如何实现参数化,如何实现判定呢?下面,我们来看看Java应用程序的测试框架吧. 当 ...

  4. 《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)

    1.简介 上一篇文章中,从TestNg的特点我们知道支持变量,那么我们这一篇就通过变量参数来启动不同的浏览器进行自动化测试.那么如何实现同时启动不同的浏览器对脚本进行测试,且听宏哥娓娓道来. 2.项目 ...

  5. 《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)

    1.简介 上一篇中介绍了DataProvider如何传递参数,以及和一些其他方法结合传递参数,今天宏哥接着把剩下的一些常用的也做一下简单的介绍和分享. 2.项目实战1 @DataProvider + ...

  6. 《手把手教你》系列基础篇(七十六)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 下篇(详解教程)

    1.简介 今天这一篇宏哥主要是结合实际工作中将遇到的测试场景和前边两篇学习的知识结合起来给大家讲解和分享一下,希望以后大家在以后遇到其他的测试场景也可以将自己的所学的知识应用到测试场景中. 2.测试场 ...

  7. 《手把手教你》系列基础篇(七十七)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 上篇(详解教程)

    1.简介 今天主要是讲解和分享:TestNG中一个类中有多个测试方法的时候,多个测试方法的执行顺序或者依赖关系的问题.如果不用dependsOnMethods,testNG会自动根据@Test方法名称 ...

  8. 《手把手教你》系列基础篇(七十八)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 中篇(详解教程)

    1.简介 上一篇讲解了依赖测试的各种方法,今天继续讲解依赖测试的方法,这一篇主要是讲解和分享通过xml文件配置组名依赖方法( 主要是测试组的用法).废话不说,直接上干货. 2.实例 测试组:一个组可包 ...

  9. 《手把手教你》系列基础篇(八十)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试-番外篇(详解教程)

    1.简介 经过前边几篇知识点的介绍,今天宏哥就在实际测试中应用一下前边所学的依赖测试.这一篇主要介绍在TestNG中一个类中有多个测试方法的时候,多个测试方法的执行顺序或者依赖关系的问题.如果不用de ...

随机推荐

  1. 【转载】SQL SERVER 函数大全

    SQL Server 函数大全 一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下 ...

  2. 一、Ubuntu 简介

    Ubuntu 是一个Linux 系统 Apt-Get apt-get 命令是一个强大的命令行工具,用于同 Ubuntu 的 Advanced Packaging Tool (APT) 一起执行诸如安装 ...

  3. Machine Learning Done Wrong【转】

    1. Take default loss function for granted Many practitioners train and pick the best model using the ...

  4. luogu P2043 质因子分解

    题目描述 对N!进行质因子分解. 输入输出格式 输入格式: 输入数据仅有一行包含一个正整数N,N<=10000. 输出格式: 输出数据包含若干行,每行两个正整数p,a,中间用一个空格隔开.表示N ...

  5. shell实践--shell内嵌指令实现查看上线时间

    实践小点子: 1. 做一个shell 内嵌指令例如:ls,cd,pwd这样     就实现查看上线多久:   解决办法有两种: 1) 利用脚本,如新指令为look;利用别名的方法,将look.sh脚本 ...

  6. DedeCMS 列表页调用图集内容多张图片的方法

    新做一个以图片为主的网站,采用的DEDECMS图集,列表页要求直接调内容面的大图,解决方法如下:(主要是采用php的正则匹配函数preg_match_all函数来巩固复习下该函数:preg_match ...

  7. ADO.NET:连接数据字符串

    ylbtech-ADO.NET:ADO.NET-Oracle|SQLServer|MySql|Access|Excel-dddd ADO.NET:连接数据字符串 1.A,SqlServer返回顶部 1 ...

  8. Mycat本地模式的自增长分表操作

    Mycat对表t_rc_rule_monitor做分表操作 在mysql上执行(没有t_rc_rule_monitor) DROP TABLE IF EXISTS t_rc_rule_monitor; ...

  9. vue.js+koa2项目实战(一)创建项目和elementUI配置

    前端采用vuex+element-ui: 后端采用koa2+restfulAPI+sequlize: (一)项目介绍 宠物社区 1.社区 2.好友 3.说说 4.宠粮 5.健康 (二)项目框架 1.V ...

  10. C++一元多项式相加

    实验名称:一元多项式相加 // multiply.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream& ...