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

  当前比较流行的Java应用程序测试框架有JUnit和TestNG两种,

  从上图可以看到,相对于JUnit4来说,TestNG更具竞争优势,功能完备。而且,从实际使用的角度来说,参数化的设置及功能,以及处理有上下依赖关系的测试时,JUnit测试框架有着明显的劣势。因此,我们在这里着重学习TestNG框架的使用。

  TestNG的教程在网上有很多,有兴趣的童鞋可以自行查询。在这里,我们只看看最基本的一些功能及设置,能够支持当前的WebUI自动化测试即可。

TestNG的注解

  当我们需要写一个测试类的时候,通常我们都会建一个TestNG的class。

  在新建TestNG-class的时候,通常都会出现以上界面。除了设置必要的类名外,在这里我们还可以设置TestNG的注解。各个注解的具体意思,可以参看下面的表格。

  

  关于TestNG的具体学习,我这里推荐一个网站:https://www.yiibai.com/testng

  大家可以在上面仔细学一下TestNG的用法。

  

  简单述说了TestNG之后,我们下面开始来开始我们的具体的测试类的编写。在这里,我们根据前面编写的一些类和工具,来进行测试类的编写和配置文件(xml)的编写。

首先来看一下测试类的Samplepackage temp;

import org.openqa.selenium.WebDriver;
import org.testng.ITestContext;
import org.testng.annotations.*; import webui.xUtils.browserUtil;
import webui.xUtils.TestNGListener; @Listeners({TestNGListener.class}) public class testTemp{
WebDriver driver; @Test(dataProvider = "MTD",description = "测试用例1")
public void MenuDoc1(ITestContext context,String un, String pwd) throws Exception {
//使用ITestContext来获取TestNG.xml文件中指定的参数。
String excelpath = context.getCurrentXmlTest().getParameter("excelpath");
    BasePageE testPage = new BasePageE(driver,"testPage",excelpath);
    testPage.click("文档信息");
} @DataProvider
public Object[][] MTD() {
return new Object[][] {
new Object[] { "system", "abX147" }
};
} @BeforeMethod
public void beforeMethod() {
TestNGListener.setDriver(driver);
} @AfterMethod
public void afterMethod() {

} @BeforeClass
@Parameters({"browser","url"})
public void beforeClass(String browser,String url) {
driver = browserUtil.setDriver(browser,url);
} @AfterClass
public void afterClass() {
browserUtil.quit();
}
}

  下面,我们来具体的讲一讲这个Sample。

  在这个Sample里面,执行的顺序是这样的,BeforeClass------>BeforeMethod------->Test-------->AfterMethod-------->AfterClass,具体的意思是:在BeforeClass这一步进行浏览器的初始化,在BeforeMethod这一步设置监听程序,Test这一步是执行测试用例并读取DataProvider中的参数进行参数化处理,AfterMethod中不作任何操作,AfterClass为退出浏览器。

  这就是一个测试类的基本流程。设置好环境,执行测试方法及判定,然后关闭退出。

  上面这个测试类用到了很多参数,我们需要用xml文件,将TestNG的测试类中的参数,进行具体的定义。这样才能真正的运行起来。

  TestNG测试类具体配置文件,<suite>标签的name属性来定义这个测试套件的名字。<listeners>中的class-name是指的监听程序调用的Jar包中的类,这个只要是导入了ReportNG的jar包,是相对固定的。(当然,最好是参考一下导入的jar包的说明)

  <parameter>标签用来定义具体的参数。这里,我们的测试类中,使用到了什么参数,都可以在这里定义。

  在上面的测试类中,browser-----即浏览器使用哪一个(chrome,firefox,IE),主要访问的url,使用的excel文件的路径。

  <classes> 标签中,使用名字来定义需要执行的测试类。形式:<class name = "包名.类名">

  这里需要有一点说明,在测试类的Sample里面,有一句:

  String excelpath = context.getCurrentXmlTest().getParameter("excelpath");

  这一句的意思是:是获取当前路径下的XML文件中,参数“excelpath”的值。因为我们的测试类和配置的xml文件是在同一个路径下,所以这样写是OK的。如果,配置文件和测试类不在一个路径下,那么这里需要注意相对路径的问题!

其实,到这里,一个基本的WebUI的自动化测试框架已经可以运行起来了。系列性的框架文章暂时就写到这里。

   在之后的实际测试工作中,可以逐渐完善自己的自动化框架内容。比如添加判定,连接数据库,截图功能等等。不一定要大而全,但是一定要适合自己的。

  之后,会写一些完成小功能之类的东西,来充实自己的框架吧。

基于Java+Selenium的WebUI自动化测试框架(十四)-----使用TestNG的Sample的更多相关文章

  1. 基于Java+Selenium的WebUI自动化测试框架(四)-----设置监听类

    基于上一篇的内容,这里我们开始写监听类Listener.我这里写监听类的思路是,继承TestListenerAdapter这个类,然后对其中的方法进行重写.网上也有很多资料,建议先学习一下,然后写出来 ...

  2. 基于Java+Selenium的WebUI自动化测试框架(一)---页面元素定位器

    对于自动化测试,尤其是UI的自动化测试.是很多做黑盒功能测试的同学,入门自动化测试一个最为直观的或者说最容易理解的途径之一. 对于手工测试和自动化测试的优劣,网上有很多论述,在这里不作展开讨论.但是, ...

  3. 基于Java+Selenium的WebUI自动化测试框架(八)-----读取元素(XML文件)

    我们继续回到自动化测试框架的主线上来,在前面的文章中,我们定义一个页面元素的主要参数有:路径,找寻方式,等待时间,名称,这个四个参数.另外,我们还需要考虑一个问题,就是网站的页面. 举个例子来说,如果 ...

  4. 基于Java+Selenium的WebUI自动化测试框架(六)---浏览器初始化

    本篇我们来讨论,如何写一个浏览器初始化的类.在写之前,先思考一下,我们需要一个什么样的初始化? 先来看看使用原生的Java + selenium是怎么做的.(以firefox为例) System.se ...

  5. 基于Java+Selenium的WebUI自动化测试框架(十)-----读取Excel文件(JXL)

    之前,我们使用了读取XML文件的方式来实现页面元素的读取,并做成了基础页面类.下面,我们来进行一些扩展,通过Excel来读取页面元素. Excel的使用,大多数人应该都不陌生.那么Java读取Exce ...

  6. 基于Java+Selenium的WebUI自动化测试框架(十二)-----读取Excel文件(POI)(2)

    上一篇我们讲了怎么利用Java的反射机制,将Excel的读取到的数据,赋值给我们构造函数中定义的变量. 接下来就简单了,我们将实际实现这个读取的简单过程.来看下面一段代码. private stati ...

  7. 基于Java+Selenium的WebUI自动化测试框架(十三)-----基础页面类BasePage(Excel)

    前面,我们讲了如何使用POI进行Excel的“按需读取”.根据前面我们写的BasePageX,我们可以很轻松的写出来基于这个“按需读取”的BasePage. package webui.xUtils; ...

  8. 基于Java+Selenium的WebUI自动化测试框架(九)-----基础页面类(BasePage)

    上篇我们写了java读取xml文件的类,实现了可以从xml文件读取元素的方式.那么,接下来我们需要考虑一个问题.我们拿了这些元素之后怎么去操作呢? 先来看看我们手工测试的时候是怎么进行的. 双击浏览器 ...

  9. 基于Java+Selenium的WebUI自动化测试框架(五)------页面操作实现类

    在编写完Log类和监听类之后,终于要回到正轨上来了.我们继续开始写UIExcutor的实现类. PS:如果你想让你的报告更加美观一些.推荐使用reportNG这个jar包. 在项目中导入reportn ...

随机推荐

  1. GitLab - 安装并启动GitLab

    1 - GitLab安装 1.1 信息确认 [Anliven@node102 ~]$ uname -a Linux node102 3.10.0-957.el7.x86_64 #1 SMP Thu N ...

  2. 使用office365 world2016发布编辑备份你的博客

    开门见山.   如果你曾使用过live writer或者world 2013及之前版本发布过博客,那么请直接异步到最后的tips来查找你可能遇到的问题.     在office365中找到博客模板 打 ...

  3. Layer文件上传同时传递表单数据

    (1)index.html <!DOCTYPE html> <html> <head> <title>TODO supply a title</t ...

  4. windows 安装node.js

    安装node.js 这里我们是直接下载的编译后的zip包 地址:https://nodejs.org/en/download/ 点击下载相应的zip版本 这里我把zip包最里面一层的东西,所有内容放在 ...

  5. 学习数据结构Day4

    链表 之前看过了动态数组,栈和队列,虽然我们把第一个叫做动态数组,但是,他们的底层实质上还是静态数组.靠 resize来实现动态数组.而链表是真正的数据结构 链表需要一个节点. 数据存储在链表中 相当 ...

  6. Linux定时自动备份oracle数据库

    1.在服务器创建备份目录,并赋予权限mkdir -p /backup/P_DATA #新建shell脚本存放路径mkdir -p /backup/P_DB_BACK  #新建Oracle数据库备份目录 ...

  7. 【Linux】僵尸进程,孤儿进程以及wait函数,waitpid函数(有样例,分析很详细)

    本文内容: 1.僵尸进程,孤儿进程的定义,区别,产生原因,处理方法 2.wait函数,waitpid函数的分析,以及比较 背景:由于子进程的结束和父进程的运行是一个异步的过程,即父进程永远无法预测子进 ...

  8. 对JAVA工程师绝对有用的Java学习资源清单

    学习Java和其他技术的资源其实非常多,但也不是都是好的有用的,我们要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难.基于这样的一个标准,我在这里为大家提供一份Java的学 ...

  9. 1 集群状态、增删改查、全量替换、强制创建、设置单个index的分片数副本数

    检查集群健康状态,可以看集群颜色.(黄色:primary shard都正常,replica不正常) GET /_cat/health?v 列出集群所有index GET /_cat/indices?v ...

  10. Restful api 返回值重复的问题

    Spring boot全家桶前后端分离的项目,在扩充某一个列表形式的返回值时,发现返回值出现了一批的重复. 正常的数据返回: 数值完全一致只是参数名称区分了大小写,如下图: 推测可能是restful格 ...