谈谈自己搭建接口自动化踩得坑

一、前言
这搭建这套框架的时候使用到了testhome上一位大神GitHub上写的一个封装Excel表的工具类,通过testNG框架提供的@Dataprovider去获取Excel表的内容,实现Excel表充当测试用例跑接口脚本,当时我实在Windows环境下进行脚本开发,所以当时进行调试全部正常,但是当我通过Jenkins进行持续集成的时候会绕过测试用例的执行,编译无报错。根本找不到问题来源,只能自己一步一步分析

二、问题分析拆分
Windows环境下能运行,Linux环境下不能(Jenkins启动环境)
分析系统环境不同会影响那些点?Windows下能打开Excel表,Linux终端下打开乱码分析可能是这方面的问题(但是想想都是在JVM环境下运行,Java跨平台的,即使Linux下乱码并不影响Java的读取运行遂排除这一可能)
文件路径导致?(想到Linux、Windows环境的路径读取方式不同),查看引入的testhome大神写的工具类ExcelData

package com.sdk.utils;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * @Author: ****
 * @Date: 2019/3/19 14:03
 */

public class ExcelData {
    public Workbook workbook;
    public Sheet sheet;
    public Cell cell;
    int rows;
    int columns;
    public String fileName;
    public String caseName;
    public ArrayList arrkey = new ArrayList();
    String sourceFile;

    /**
     * @param fileName   excel文件名
     * @param caseName   sheet名
     */
    public ExcelData(String fileName, String caseName) {
        super();
        this.fileName = fileName;
        this.caseName = caseName;
    }

    /**
     * 获得excel表中的数据
     */
    @SuppressWarnings("unchecked")
    public Object[][] getExcelData() throws BiffException, IOException {

        workbook = Workbook.getWorkbook(new File(getPath()));
        sheet = workbook.getSheet(caseName);
        rows = sheet.getRows();
        columns = sheet.getColumns();
        // 为了返回值是Object[][],定义一个多行单列的二维数组
        HashMap[][] arrmap = new HashMap[rows - 1][1];
        // 对数组中所有元素hashmap进行初始化
        if (rows > 1) {
            for (int i = 0; i < rows - 1; i++) {
                arrmap[i][0] = new HashMap<>();
            }
        } else {
            System.out.println("excel中没有数据");
        }

        // 获得首行的列名,作为hashmap的key值
        for (int c = 0; c < columns; c++) {
            String cellvalue = sheet.getCell(c, 0).getContents();
            arrkey.add(cellvalue);
        }
        // 遍历所有的单元格的值添加到hashmap中
        for (int r = 1; r < rows; r++) {
            for (int c = 0; c < columns; c++) {
                String cellvalue = sheet.getCell(c, r).getContents();
                arrmap[r - 1][0].put(arrkey.get(c), cellvalue);
            }
        }
        return arrmap;
    }

    /**
     * 获得excel文件的路径
     * @return
     * @throws IOException
     */
    public String getPath() throws IOException {
        File directory = new File(".");
        sourceFile = directory.getCanonicalPath() + "\\src\\main\\resources\\testCaseExcelData\\"
                + fileName + ".xls";
        return sourceFile;
    }
}

4.上述工具类:"\src\main\resources\testCaseExcelData\",这种路径格式在Linux下就没办法获取,导致绕过测试用例执行,实在有点坑,没有报错分析问题源头很痛苦
5.改成如下图所示,Jenkins运行又出现另外一个报错,但是很高兴,因为不是这个问题导致,证明这个问题已经解决了
谈谈自己搭建接口自动化踩得坑_第1张图片
6.Jenkins打印的log4j日志一直在链接jdbc池,问题来了现在池连不上了
谈谈自己搭建接口自动化踩得坑_第2张图片
7.分析一波,查看自己jdbc的配置文件数据连接池地址、账号、密码发现都没有问题,因为我Windows下能运行
谈谈自己搭建接口自动化踩得坑_第3张图片
8.遂在Linux下链接MySQL试了一下,输入正确密码后还是无法连接上,瞬间感觉发现新大陆问题就出在这台服务器的网关出口上谈谈自己搭建接口自动化踩得坑_第4张图片
9.由于我们公司的数据都是放在阿里云的RDS上,因为之前频繁被竞争对手恶意网络攻击,所以为了安全公司的服务、数据都是放在阿里云
10.阿里云RDS运维设置了白名单IP访问入口,里面去云上RDS是否对这台服务器网关出口设置了白名单,发现并没有设置【运维太粗心了】,后面加上这台服务的网关IP,问题遂解决万事大吉

三、回顾
这套东西搭建下来这两个问题让人印象深刻,因为第一个问题没有任何指向性的错误,只能一步一步分析的确花了不少时间,相比第二个问题也是运维操作不当导致也记录一下

你可能感兴趣的:(谈谈自己搭建接口自动化踩得坑)