zoukankan      html  css  js  c++  java
  • 基于Java+Selenium的WebUI自动化测试框架(十四)-----使用TestNG的Sample

      到目前为止,我们所写的东西,都是集中在如何使用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的自动化测试框架已经可以运行起来了。系列性的框架文章暂时就写到这里。

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

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

  • 相关阅读:
    Docker 学习4 Docker容器虚拟化网络概述
    Ceph 命令
    Day_09【常用API】扩展案例1_程序中使用一个长度为3的对象数组,存储用户的登录名和密码……
    Day_08【面向对象】扩展案例4_年龄为30岁的老王养了一只黑颜色的2岁的宠物……
    Day_08【面向对象】扩展案例3_使用多态的形式创建缉毒狗对象,调用缉毒方法和吼叫方法
    Day_08【面向对象】扩展案例2_测试旧手机新手机类,并给新手机实现玩游戏功能
    Day_08【面向对象】扩展案例1_测试项目经理类和程序员类
    用两个栈实现队列
    二叉树前序、中序、后序遍历相互求法
    洗牌
  • 原文地址:https://www.cnblogs.com/generalli2019/p/11445028.html
Copyright © 2011-2022 走看看