转载:https://blog.csdn.net/heart_1014/article/details/52013173

使用@DataProvider注解定义当前方法中的返回对象CSV文件(存放测试数据)作为测试脚本的测试数据集进行数据驱动。

用法参考代码:

代码在搜索完成后使用显式等待方式,确认页面已经加载完成,页面底部的关键字"搜索帮助"已经显示在页面上

  1.  
    //从CSV文件中读取每行中前2个逗号分割的中文词作为搜索框中输入的搜索关键词
  2.  
    //断言搜索结果页面是否包含CSV文件中每行的最后一个词汇的关键字
  3.  
    import java.io.BufferedReader;
  4.  
    import java.io.FileInputStream;
  5.  
    import java.io.IOException;
  6.  
    import java.io.InputStreamReader;
  7.  
    import java.util.ArrayList;
  8.  
    import java.util.List;
  9.  
    import java.util.concurrent.TimeUnit;
  10.  
     
  11.  
    import org.openqa.selenium.By;
  12.  
    import org.openqa.selenium.WebDriver;
  13.  
    import org.openqa.selenium.firefox.FirefoxDriver;
  14.  
    import org.openqa.selenium.support.ui.ExpectedCondition;
  15.  
    import org.openqa.selenium.support.ui.WebDriverWait;
  16.  
    import org.testng.Assert;
  17.  
    import org.testng.annotations.AfterMethod;
  18.  
    import org.testng.annotations.BeforeMethod;
  19.  
    import org.testng.annotations.DataProvider;
  20.  
    import org.testng.annotations.Test;
  21.  
     
  22.  
    public class TestDataByCSVFile {
  23.  
    private static WebDriver driver;
  24.  
    @DataProvider(name="searchData")
  25.  
    public static Object[][] data() throws IOException
  26.  
    {
  27.  
    return getSearchData("E:\\AutoData\\testData.csv");//获取CSV文件的测试数据
  28.  
    }
  29.  
    @Test(dataProvider="searchData")
  30.  
    public void testSearch(String searchdata1,String searchdata2,String searchResult) {
  31.  
    //打开sogou首页
  32.  
    driver.get("http://www.sogou.com/");
  33.  
    //输入搜索条件
  34.  
    //从CSV文件中读取每行中前2个逗号分割的中文词作为搜索框中输入的搜索关键词,在两个搜索词中间增加一个空格
  35.  
    driver.findElement(By.id("query")).sendKeys(searchdata1+" "+searchdata2);
  36.  
    //单击搜索按钮
  37.  
    driver.findElement(By.id("stb")).click();
  38.  
     
  39.  
    //使用显式等待方式,确认页面已经加载完成,页面底部的关键字"搜索帮助"已经显示在页面上
  40.  
    (new WebDriverWait(driver,3)).until(new ExpectedCondition<Boolean>(){
  41.  
     
  42.  
    @Override
  43.  
    public Boolean apply(WebDriver d) {
  44.  
    return d.findElement(By.id("sogou_webhelp")).getText().contains("搜索帮助");
  45.  
    }});
  46.  
     
  47.  
    //断言搜索结果页面是否包含CSV文件中每行的最后一个词汇的关键字
  48.  
    Assert.assertTrue(driver.getPageSource().contains(searchResult));
  49.  
    }
  50.  
    @BeforeMethod
  51.  
    public void beforeMethod() {
  52.  
    //若无法打开Firefox浏览器,可设定Firefox浏览器的安装路径
  53.  
    System.setProperty("webdriver.firefox.bin", "D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
  54.  
    //打开Firefox浏览器
  55.  
    driver=new FirefoxDriver();
  56.  
    //设定等待时间为5秒
  57.  
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
  58.  
    }
  59.  
     
  60.  
    @AfterMethod
  61.  
    public void afterMethod() {
  62.  
    //关闭打开的浏览器
  63.  
    driver.quit();
  64.  
    }
  65.  
    //读取CSV文件的静态方法,使用CSV文件的绝对文件路径作为函数参数
  66.  
    public static Object[][] getSearchData(String FileNameroot) throws IOException{
  67.  
    List<Object[]> records=new ArrayList<Object[]>();
  68.  
    String record;
  69.  
    //设定UTF-8字符集,使用带缓冲区的字符输入流BufferedReader读取文件内容
  70.  
    BufferedReader file=new BufferedReader(new InputStreamReader(new FileInputStream(FileNameroot),"UTF-8"));
  71.  
    //忽略读取CSV文件的标题行(第一行)
  72.  
    file.readLine();
  73.  
    //遍历读取文件中除第一行外的其他所有内容并存储在名为records的ArrayList中,每一行records中存储的对象为一个String数组
  74.  
    while((record=file.readLine())!=null){
  75.  
    String fields[]=record.split(",");
  76.  
    records.add(fields);
  77.  
    }
  78.  
    //关闭文件对象
  79.  
    file.close();
  80.  
    //将存储测试数据的List转换为一个Object的二维数组
  81.  
    Object[][] results=new Object[records.size()][];
  82.  
    //设置二位数组每行的值,每行是一个Object对象
  83.  
    for(int i=0;i<records.size();i++){
  84.  
    results[i]=records.get(i);
  85.  
    }
  86.  
    return results;
  87.  
    }
  88.  
    }

运行结果:

  1.  
    PASSED: testSearch("老九门", "演员", "赵丽颖")
  2.  
    PASSED: testSearch("X站警天启", "导演", "布莱恩·辛格")
  3.  
    PASSED: testSearch("诛仙青云志", "编剧", "张戬")
  4.  
     
  5.  
    ===============================================
  6.  
    Default test
  7.  
    Tests run: 3, Failures: 0, Skips: 0
  8.  
    ===============================================

测试数据的CSV文件内容:

搜索关键词1,搜索关键词2,搜索结果
老九门,演员,赵丽颖
X站警天启,导演,布莱恩·辛格
诛仙青云志,编剧,张戬

注意:使用写字板程序编辑CSV文件内容,在保存文件时要将文件存储为UTF-8编码格式。

数据驱动测试二:使用TestNG和CSV文件进行数据驱动的更多相关文章

  1. 使用TestNG 和 CSV文件进行数据驱动

    package testNGPractice; import java.io.BufferedReader; import java.io.FileInputStream; import java.i ...

  2. Jmeter自动化测试 数据驱动测试,将数据存入csv文件中来调用,或将数据存在DB中进行调用

    1. 将测试的用例名称,测试请求方式,测试链接,预置数据,断言等都放到excel中,然后转成csv格式,在用Jmeter带的csv数据配置文件导入 运行之前将线程组中配置,线程数设置为1,循环的次数设 ...

  3. Selenium+java - 使用csv文件做数据驱动

    前言 早期我们使用TestNG 来做数据驱动进行测试,测试数据是写在测试用例脚本中.这会使得测试脚本的维护工作量很大.因此我们可以将测试的数据和脚本分开. 而我们经常使用会使用csv文件来做为导出数据 ...

  4. 自动化测试框架selenium+java+TestNG——读取csv文件

    读取csv文件可以直接读取,也可以使用javacsv.jar,后者比较简单,这个也可以变相认为是对表格的处理,我们可以在表格中做好数据,存储成csv格式的文件,后续对xlsx表格的操作抽个时间再记录下 ...

  5. selenium java读取csv文件 (数据驱动)

    javacsv2.1 下载地址:http://sourceforge.net/projects/javacsv/files/ 该链接可以下载java读取csv文件的jar 包.下载之后解压找到对应的. ...

  6. (Python基础教程之十二)Python读写CSV文件

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  7. selenium自动化测试之【数据驱动测试】

    数据驱动测试是自动化测试的主流设计模式之一,相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为进行了完全的分离,这样的测试脚本设计模式称为数据驱动.实施数据驱动测试的步骤:1.编写测试脚本,脚 ...

  8. 使用jmeter+ant进行接口自动化测试(数据驱动)之二:利用apache-ant执行测试用例并生成HTML格式测试报告

    在 使用jmeter+ant进行接口自动化测试(数据驱动)之一 介绍了如何使用csv文件来批量管理接口 本次接着介绍如何利用apache-ant执行测试用例并生成HTML格式测试报告 ①下载安装 ap ...

  9. 如何快速掌握DDT数据驱动测试?

    1.前言 (网盗概念^-^)相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离, 这样的测试脚本设计模式称为数据驱动.(网盗结束)当我们测试某个网站的登录功能时,我们往往会使用不同的用 ...

随机推荐

  1. C# ie通过打印控件点打印,总是弹出另存为xps的对话框

    用的是lodop打印控件,点打印后,总是弹出另存为xps的对话框,后来在网上查到可能是把windows自带的Microsoft XPS Document Writer设为默认打印机的原因. 但现在没有 ...

  2. [翻译] 10 个实用的 Git 高级命令

    1. 输出最后一次提交的改变 这个命令,我经常使用它 来发送其他没有使用 git 的人来检查或者集成所修改的.它会输出最近提交的修改内容到一个 zip 文件中. git archive -o ../u ...

  3. 内存映射函数remap_pfn_range学习——示例分析(2)

    li {list-style-type:decimal;}ol.wiz-list-level2 > li {list-style-type:lower-latin;}ol.wiz-list-le ...

  4. 解决ubuntu上在androidstudio中启动emulator闪退的问题(2)

    平台 Ubuntu14.04 64 现象 在AndrodStudio中点击模拟器的启动按钮后,模拟器界面弹出后,又立刻闪退. 解决 一.查看模拟器的信息 从上面可以看到模拟器的存放路径以及名称: 路径 ...

  5. 如何选择使用IEnumerable, ICollection, IList

    IEnumerable, ICollection, IList,每种接口只适合某些特定场景,如何区别使用呢? IEnumerable接口,只提供了一个获取迭代器的方法,这也是为什么可以使用foreac ...

  6. Image控件Stretch属性

    通过设置Image控件Stretch属性的值可以控制图片的显示形式: 包含的值:None.Fill.Uniform.UniformToFill <Grid x:Name="Layout ...

  7. 关于Maven项目build时出现No compiler is provided in this environment的处理(转)

    本文转自https://blog.csdn.net/lslk9898/article/details/73836745 近日有同事遇到在编译Maven项目时出现[ERROR] No compiler ...

  8. 解决警告 warning: directory not found for option

    解决方法: 选择项目名称----->Targets----->Build Settings----->Search Paths----->Library Search Path ...

  9. Asp.Net Mvc3.0(MEF依赖注入理论)

    前言 Managed Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,它是一系列特性的集合,包括依赖注入(DI)等.MEF为开发人员提供了一个工具,让我们 ...

  10. 限制EditText必须输入中文的方法

    给EditText做限制时,我们想要输入的字符串必须都是中文,不出现任何其他字符,下面的类可以很好的实现这个要求. InputLenLimit.java package com.kale.button ...