Selenium Java中无法读取CSV/Excel文件的更新数据
TestNG读写Excel/CSV时读取旧数据的解决方案
1. 彻底关闭文件输出流
写操作后如果没把文件流完全关闭,数据可能还停留在内存缓冲区,没真正写入磁盘,读操作自然拿不到新数据。
- 用Apache POI写Excel的话,写完后按顺序关闭
FileOutputStream和Workbook:FileOutputStream fos = new FileOutputStream("data.xlsx"); workbook.write(fos); // 必须按顺序关闭,先关流再关工作簿 fos.close(); workbook.close(); - 写CSV时,先刷新缓冲区再关闭
BufferedWriter:BufferedWriter writer = new BufferedWriter(new FileWriter("data.csv")); writer.write("新增的测试数据"); writer.flush(); // 强制把缓冲区数据写入磁盘 writer.close();
2. 强制指定测试用例执行顺序
TestNG默认不会按代码顺序执行测试方法,要是读操作先跑,肯定读的是旧数据。
- 用
@Test(priority)设置执行优先级,写方法设为1,读方法设为2;或者用dependsOnMethods让读方法依赖写方法,确保写完成后再执行读:@Test(priority = 1) public void writeDataToFile() { // 写文件逻辑 } @Test(priority = 2, dependsOnMethods = {"writeDataToFile"}) public void readDataFromFile() { // 读文件逻辑 }
3. 每次读操作都重新加载文件
有些读取库会缓存文件内容,复用旧的读取实例就会读到旧数据。
- 读Excel时,每次都重新创建
FileInputStream和Workbook:FileInputStream fis = new FileInputStream("data.xlsx"); Workbook workbook = WorkbookFactory.create(fis); // 读取数据... // 读完后及时关闭流和工作簿 fis.close(); workbook.close(); - 读CSV同理,每次读都重新打开
BufferedReader,不要复用之前的对象。
4. 确认读写的是同一个文件
有时候写和读的路径不一致,比如写的是项目根目录下的文件,读的时候因为工作目录变化,读到了其他位置的旧文件。
- 统一用绝对路径,或者打印文件绝对路径验证:
File file = new File("data.xlsx"); System.out.println("实际操作的文件路径:" + file.getAbsolutePath());
5. 关闭测试并行执行
如果TestNG开了并行测试,写和读可能同时跑,读的时候写还没完成。
- 在
testng.xml里把并行模式设为none,确保同一类的测试方法串行执行:<suite name="FileOperationSuite" parallel="none"> <test name="ReadWriteTest"> <classes> <class name="com.yourpackage.ReadWriteTest"/> </classes> </test> </suite>
内容的提问来源于stack exchange,提问作者kavya s
相关产品推荐
相关产品推荐

