IDEA+maven+java+TestNG POM+DDT第五篇用EXCEL做数据驱动

前一篇的代码中我们已经在登录的用户、密码和验证码等地方使用了数据驱动,这一篇主要讲解数据驱动的具体实现:
目录结构如下 :

1、在maven的pom.xml文件中引入poi的jar包

2、我们在框架的第一层framework包下面建一个Excel.java类,里面实现Excel单元格的读写内容如下 :

package framework;


import org.apache.poi.ss.formula.SheetNameFormatter;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;


import framework.Log;

public class Excel {
    private static XSSFSheet ExcelWSheet;
    private static XSSFWorkbook ExcelWBook;
    private static XSSFCell Cell;
    private static XSSFRow Row;
    private static String path;

    public static void setExcelFile(String path,String SheetName)throws Exception{

        FileInputStream ExcelFile;
        try{
            ExcelFile=new FileInputStream(path);
            Log.info("实例化Excel文件的FileInputStream");
            ExcelWBook=new XSSFWorkbook(ExcelFile);
            Log.info("实例化Excel文件的XSSFWorkbook");
            ExcelWSheet=ExcelWBook.getSheet(SheetName);
            Log.info("实例化XSSFSheet对象,指定Excel文件中的sheet名称,后续用于sheet中行、列和单元格的操作");

        }catch(Exception e){
            throw(e);
        }
    }

    //读取Excel文件指定单元格函数
    public static String getCellData(int RowNum,int ColNum){
        try{
            Cell=ExcelWSheet.getRow(RowNum).getCell(ColNum);
            Log.info("通过函数参数指定单元格行号和列号,获取指定单元格对象");
            //三元表达式:如果单元格中为字符串型使用getStringCellValue()获取单元格中内容;如果为数字型使用getNumericCellValue()获取单元格中内容,获取的double型必须转化为String型;
            String CellData=Cell.getCellTypeEnum()== CellType.STRING?Cell.getStringCellValue()+"":String.valueOf(Math.round(Cell.getNumericCellValue()));
            Log.info("获取单元格的内容,有字符型和数字型两种");
            return CellData;
        }catch(Exception e){
            return "";
        }
    }

    //写入单元格这个方法有问题;
    public static void setCellData(int RowNum, int ColNum, String Result)throws Exception{
        try{
            Row=ExcelWSheet.getRow(RowNum);
            Log.info("获取Excel文件中的行对象");
            Cell= Row.getCell(0000); //原代码 Cell=Row.getCell(ColNum,Row.RETURN_BLANK_AS_NULL);
            if(Cell==null){
                Log.info("当单元格对象是Null的时候,则创建单元格");
                Cell=Row.createCell(ColNum);
                Cell.setCellValue(Result);
                Log.info("创建单元格后可以调用单元格对象的setCellValue方法设定单元格的值");
            }
            else{
                Cell.setCellValue(Result);
                Log.info("单元格中有内容,则可以直接调用单元格对象的setCellValue方法设定单元格的值");
            }
            FileOutputStream fileOut=new FileOutputStream(path);
            ExcelWBook.write(fileOut);
            Log.info("将内容写入Excel中");
            fileOut.flush();
            fileOut.close();

        }catch(Exception e){
            throw(e);
        }
    }


    }

上面代码中往Excel中写入的操作还有问题没有完全实现,后续会进行修改完善。注意2003版的Excel和2007版的Excel创建对象的类不同:(最好利用正则表达式)

// HSSFWorkbook 2003的excel .xls,XSSFWorkbook导入2007的excel   .xlsx
        HSSFWorkbook workbook=new HSSFWorkbook(new FileInputStream(new File(file)));
        XSSFWorkbook workbook=new XSSFWorkbook(new FileInputStream(new File(file))));

3、在第二层框架中需要使用Excel表格中的数据时,先导入import framework.Excel;然后通过行和列取到Excel表格中的值:

type(username_inputBox,excel.getCellData(1,0));

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要创建一个 Maven 项目,并添加 TestNG 依赖。在 pom.xml 文件中添加以下依赖: ```xml <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.4.0</version> <scope>test</scope> </dependency> </dependencies> ``` 接下来,我们创建一个名为 `Sku` 的 Java 类,用于表示商品 SKU。 ```java public class Sku { private String id; private String name; private double price; public Sku(String id, String name, double price) { this.id = id; this.name = name; this.price = price; } public String getId() { return id; } public String getName() { return name; } public double getPrice() { return price; } } ``` 然后,我们创建一个名为 `SkuDao` 的 Java 类,用于实现 SKU 的增删改查。 ```java import java.util.ArrayList; import java.util.List; public class SkuDao { private List<Sku> skuList; public SkuDao() { skuList = new ArrayList<>(); } public void addSku(Sku sku) { skuList.add(sku); } public void deleteSku(String id) { skuList.removeIf(sku -> sku.getId().equals(id)); } public void updateSku(Sku sku) { for (int i = 0; i < skuList.size(); i++) { if (skuList.get(i).getId().equals(sku.getId())) { skuList.set(i, sku); break; } } } public Sku getSkuById(String id) { for (Sku sku : skuList) { if (sku.getId().equals(id)) { return sku; } } return null; } } ``` 最后,我们创建一个名为 `SkuDaoTest` 的 Java 类,用于测试 `SkuDao` 类的功能。 ```java import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class SkuDaoTest { private SkuDao skuDao; @BeforeMethod public void setUp() { skuDao = new SkuDao(); skuDao.addSku(new Sku("001", "iPhone 12", 9999.0)); skuDao.addSku(new Sku("002", "iPad Pro", 7999.0)); } @Test public void testAddSku() { skuDao.addSku(new Sku("003", "AirPods Pro", 1999.0)); Assert.assertEquals(skuDao.getSkuById("003").getName(), "AirPods Pro"); } @Test public void testDeleteSku() { skuDao.deleteSku("001"); Assert.assertNull(skuDao.getSkuById("001")); } @Test public void testUpdateSku() { Sku sku = new Sku("002", "iPad Air", 5999.0); skuDao.updateSku(sku); Assert.assertEquals(skuDao.getSkuById("002").getName(), "iPad Air"); } @Test public void testGetSkuById() { Assert.assertEquals(skuDao.getSkuById("001").getName(), "iPhone 12"); Assert.assertEquals(skuDao.getSkuById("002").getName(), "iPad Pro"); Assert.assertNull(skuDao.getSkuById("003")); } } ``` 在这个测试类中,我们使用 TestNG 提供的断言方法来验证每个方法的功能是否正确。 以上是一个简单的关于 SKU 的增删改查的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值