• httpclient框架实现接口自动化的思路(二)


    1.编写testcase,并将执行结果写入excel

    (1)编写testcase

    public class Login extends BaseTest {
    //继承可以不写该test ,但是不想通过testng.xml执行
    @Test(dataProvider ="loginPasswordCase")
    public void loginPassword(String caseId, String apiId,String parameters){
    String url= RestfulUtil.getUrlByApiId(apiId);
    String requestMdode= RestfulUtil.getRequestModeByApiId(apiId);
    //解析json格式
    JSONObject jsonObject = JSONObject.parseObject(parameters);
    HashMap<String,String> hashMap=new HashMap<String, String>();
    for (String key: jsonObject.keySet()) {
    hashMap.put(key, (String) jsonObject.get(key));
    }
    String result= HttpUtil.doService(url,requestMdode, hashMap);
    System.out.println(result);
    //新建一个类,将要写入的内容封装至类,并统一放在集合内,等套件执行完毕后再批量写入至excel
    WriteBackData writeBackData=new WriteBackData("测试用例",caseId,"ActualResponseData",result);
    ExcelUtil.list.add(writeBackData);
    }
    @DataProvider(name = "loginPasswordCase")
    public Object[][] testCase(){
    Object[]value={"CaseId","ApiId","Parameter"};
    Object[][] datas = CaseUtil.getCaseByApiId("1", value);
    return datas;

    }
    @AfterSuite
    public void batchWriteBack(){
    ExcelUtil.batchWriteBackToExcel("D:\Documents\Desktop\tester\Api_auto\src\test\resources\testcase_v2.xls");
    }
    }

    (2)将执行结果结果批量写入excel 

    I.写入excel 之前,首先要获取写入位置的行索引和列索引

    public class ExcelUtil {
    public static HashMap<String,Integer> cellMapping=new HashMap<>();
    public static HashMap<String,Integer> rowMapping=new HashMap<>();
    static {
    loadRowNumAndCellNumMapping("D:\Documents\Desktop\tester\Api_auto\src\test\resources\testcase_v2.xls","测试用例");
    }
    public static void loadRowNumAndCellNumMapping(String path, String sheetName) {
    InputStream inputStream=null;
    try {
    inputStream = new FileInputStream(new File(path));
    Workbook workbook = WorkbookFactory.create(inputStream);
    Sheet sheet = workbook.getSheet(sheetName);
    // 通过标题获取标题所在的cellNum
    Row titleRow = sheet.getRow(0);
    int lastCellNum = titleRow.getLastCellNum();
    if (titleRow != null && !isEmptyRow(titleRow)) {
    for (int j = 0; j < lastCellNum; j++) {
    Cell cell = titleRow.getCell(j, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
    //获取行号
    int column = cell.getAddress().getColumn();
    //获取行号对应的标题
    String title=new DataFormatter().formatCellValue(cell);
    if(title.contains("(")) {
    title=title.substring(0,title.indexOf("("));
    }
    cellMapping.put(title,column);
    }
    }
    //获取每一行的数据
    int lastRowNum = sheet.getLastRowNum();
    for (int i = 1; i <=lastRowNum ; i++) {
    Row data=sheet.getRow(i);
    Cell FirstCellOfRow = data.getCell(0, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
    String caseId=new DataFormatter().formatCellValue(FirstCellOfRow);
    int rowNum=data.getRowNum();
    rowMapping.put(caseId,rowNum);
    }
    } catch (Exception e) {
    e.printStackTrace();
    }finally {
    if (inputStream != null) {
    try {
    inputStream.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }


    }

    }
    II.创建类数据回写的类,将数据即将要回写到excel的数据回写到类,再从类中获取数据批量写到excel
    public class WriteBackData {
    private String sheetName;
    private String caseId;
    private String cellName;
    private String result;
    }
    III.批量回写excel 操作
    public static void batchWriteBackToExcel(String path){
    InputStream inp= null;
    OutputStream outputStream=null;
    try {
    inp = new FileInputStream(new File(path));
    Workbook workbook = WorkbookFactory.create(inp);
    for (WriteBackData writeBackData:list) {
    //获取表单
    Sheet sheet = workbook.getSheet(writeBackData.getSheetName());
    //获取writeBackData中getcaseid的值,才能通过rowMapping中获取行号
    String caseId = writeBackData.getCaseId();
    Row row = sheet.getRow(rowMapping.get(caseId));
    //获取类中cellName的值,才能获取对应的列号
    Cell cell = row.getCell(cellMapping.get(writeBackData.getCellName()), Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
    cell.setCellValue(writeBackData.getResult());
    }
    outputStream=new FileOutputStream(new File(path));
    workbook.write(outputStream);
    } catch (Exception e) {
    e.printStackTrace();
    }finally {
    try {
    if(inp!=null){
    inp.close();
    }
    if(outputStream!=null){
    outputStream.close();
    }
    } catch (IOException e) {
    e.printStackTrace();
    }

    }
     
     
  • 相关阅读:
    大型网站架构系列:20本技术书籍推荐
    程序员进阶顺序
    乐观锁与悲观锁——解决并发问题
    Redis的事务功能详解
    驱动开发(8)处理设备I/O控制函数DeviceIoControl
    钱币兑换问题(杭电1284)(母函数)
    jqm文件上传,上传图片,jqm的表单操作,jqm的ajax的使用,jqm文件操作大全,文件操作demo
    问:简述一下内部类的实质是什么?
    Android 删除新版安卓fragment_main.xml
    保温饭盒毕业设计程序
  • 原文地址:https://www.cnblogs.com/yangxiaobai/p/12786544.html
Copyright © 2020-2023  润新知