首先,如果你是看到这个标题进来的
那我先泼你一盆冷水…这个不是多么的实用小工具(只是一个偶尔可以偷懒的工具)
当然,大神你如果拿过去再写的高深一点的话也可以
。。。
背景:当时候项目比较忙,很多需求都是同时进行测试。天天开需求分析会,很多案例需要写。在我看来,案例中很多的字段都是比较鸡肋的字段且耗时间的。那时候案例是写在excel上的,我就想着能不能通过POI来进行读写(其实具体怎么操作就是字符串如何处理而已),所以我这个小菜鸡能写出来的,基本上都没多少技术含量的。
大神看看笑笑就算了。
最主要的——写的案例没有太严格的要求。开会的时候,开发和业务看到用例名称知道你已经覆盖到这个点就行了(最重要是这一点)。
话不多说,直接上代码(身为一个菜鸡,说这话的时候感觉自己天下无敌-。 -)。
package AnLi;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import tool_date.date;
public class anli_maker{
static File src = null;
static FileInputStream fis=null;
static XSSFWorkbook wb=null;
//第一次赋值的方法-主要是针对一些相同字段的信息
public static void fuzhi (String col,String value){
try{
// 指定excel的路径
//加载sheet,这里我们只有一个sheet,默认是sheet1
XSSFSheet sh1= wb.getSheetAt(0);
for(int j=0;j<sh1.getPhysicalNumberOfRows()-1;j++){
for(int k=1; k<22; k++){
// 第一行第二列内容进行比较
if(!sh1.getRow(0).getCell(k).getStringCellValue().trim().equals(col)){
continue;
}
sh1.getRow(j+1).getCell(k,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue(value);
}
}
// 保存文件
FileOutputStream fout=new FileOutputStream(new File(".\\Files_AnLi\\test-data.xlsx"));
//覆盖写入内容
wb.write(fout);
// 关闭文件
fout.close();
} catch (Exception e){
e.printStackTrace();
}
}
//第一次进行赋值,主要是针对可以批量赋值的部分
public static void fuzhi_1(){
//fuzhi("测试用例编号","001");
//fuzhi("测试要点编号","001");
fuzhi("所属子系统","新柜面");
fuzhi("涉及的关联系统","T24");
//fuzhi("用例名称","");
//fuzhi("用例性质","");
fuzhi("优先级","1-高");
fuzhi("前置条件","准备测试数据");
fuzhi("步骤名","1");
//fuzhi("步骤描述","");
fuzhi("测试数据","");
//fuzhi("预期结果","");
fuzhi("设计者","小鱼炒辣椒");
fuzhi("创建日期",new date().datetime());
fuzhi("用例复用状态","已复用");
fuzhi("测试用例状态","已执行");
fuzhi("类型","手工测试");
fuzhi("审阅状态","已审阅");
fuzhi("执行日期",new date().datetime_2());
}
//第二次进行赋值,主要是针对无法批量赋值的字段
public static void fuzhi_2(){
fuzhi_1();
try{
XSSFSheet sh1= wb.getSheetAt(0);
for(int j=0;j<sh1.getPhysicalNumberOfRows()-1;j++){
// 根据“用例名称”中的正流程、反流程 来设置性质
boolean status = sh1.getRow(j+1).getCell(5).getStringCellValue().contains("正交易");
if(status){
sh1.getRow(j+1).getCell(6,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue("正用例");
}else{
sh1.getRow(j+1).getCell(6,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue("反用例");
}
//用例描述------复制用例名称单元格内容
sh1.getRow(j+1).getCell(9,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue(
sh1.getRow(j+1).getCell(5).getStringCellValue());
//步骤描述-------具体通用的动作描述,会拿用例名称中的前八位作为其中一部分内容
String tx=sh1.getRow(j+1).getCell(5).getStringCellValue().substring(0,8);
sh1.getRow(j+1).getCell(11,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue(
"1.打开柜面,输入交易码"+tx+";"+
"2.输入相关内容,点击提交;"+
"3.查看结果"
);
//预期结果---取决于 用例性质 正用例-交易成功 反用例-交易失败
if(sh1.getRow(j+1).getCell(6).getStringCellValue().equals("正用例")){
sh1.getRow(j+1).getCell(13,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue("交易成功");
}else{
sh1.getRow(j+1).getCell(13,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue("交易失败");
}
}
FileOutputStream fout=new FileOutputStream(new File(".\\Files_AnLi\\test-data.xlsx"));
wb.write(fout);
fout.close();
} catch (Exception e){
e.printStackTrace();
}
}
public static void fuzhi_3 (){
fuzhi_2();
try{
XSSFSheet sh1= wb.getSheetAt(0);
for(int j=0;j<sh1.getPhysicalNumberOfRows()-1;j++){
sh1.getRow(j+1).getCell(1,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue(j+1);
sh1.getRow(j+1).getCell(2,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue(j+1);
}
FileOutputStream fout=new FileOutputStream(new File(".\\Files_AnLi\\test-data.xlsx"));
wb.write(fout);
fout.close();
} catch (Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
src = new File("./Files_AnLi/test-data.xlsx");
// 加载文件
try {
fis = new FileInputStream(src);
wb =new XSSFWorkbook(fis);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long t1 = System.currentTimeMillis();
fuzhi_3();
long t2 = System.currentTimeMillis();
System.out.println(" 已完成所有 <陈曦组专用测试案例-赋值>! "+" 用时 " + (t2 - t1) + " 毫秒");
}
}
其实很简单,都是一些基础的字符串方法和IO的应用。
脚本可以根据你们自己的案例要求进行修改一下。
看下效果:运行前
运行的时候在控制台看到这句话,顿时回忆无限。
那段快乐的工作时光。
以上的功能可能比较简单,如果能给各位一点启发,那我就知足了。
-。 -