基於Java+HttpClient+TestNG的接口自動化測試框架(六)-------隨機函數的處理


  我們之前使用接口類及接口實現類的方式,來定義了我們使用的工具類。

  而所有的工具類中,隨機函數是比較難於處理的。因為隨機的對象不明確,隨機的個數不明確。我們可以使用定義隨機類的方式,來簡單而快速的處理我們的隨機對象生成的需要。

  首先,我們先定義一個randomUtil的類,在這個類中,我們可以將想生成的隨機函數進行具體的定義。在此,我們舉幾個例子。比如,隨機生成一個整數,隨機生成一個定長(或不定長)的,帶漢字(或不帶漢字)的字符串,隨機生成一個數組等等。

來看一下具體的RandomUtil類的代碼:

import java.util.Random;

public class RandomUtil {
    //定義字母和數字
    public static String randomBase = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    public static String randomNumberBase = "0123456789";
    
    
    //Unicode 基本漢字編碼范圍0x4e00~0x9fa5 共 20902個,這個是從網上查到的。因此,我們要把這個隨機的范圍給計算出來。
    private final static int HANZI_LENGTH = 20902 ; 
    
    public static Random random = new Random();  
    
    /**
     * 隨機生成一個漢字
     * @return
     */
    protected static char getRandomHanZi() {
        Random ran = new Random();
     //漢字編碼從0x4e00開始到后面的20902之間
return (char) (0x4e00 + ran.nextInt(HANZI_LENGTH)); } /** * 隨機生成一個字母 * @return */ protected static char getRandomStr() { Random ran = new Random(); return (char) randomBase.charAt(ran.nextInt(62)); } /** * 隨機生成一個帶有中文的字符串 * @param length為字符串長度的參數 * @return */ public static String getRandomText(int length) { Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) {
       //使用一個隨機數字作為開關
int randomNum = random.nextInt(2); char ch = 0 ; if (randomNum==0) {//生成漢字 ch = getRandomHanZi(); }else if (randomNum==1) {//生成數字或者字符 ch = getRandomStr(); } sb.append(String.valueOf(ch)); } return sb.toString(); }

     /**
     * 隨機生成一個帶有中文的字符串
     * @param length為字符串長度的參數,false為字符串,true為數字
     * @return
     */

public static String getRandom(int length, boolean onlyNumber) {
        String base;
        if (onlyNumber) {
            base = randomNumberBase;
        } else {
            base = randomBase;
        }
        
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < length; i++) {
            char chr;
            do {
                int number = random.nextInt(base.length());
                chr = base.charAt(number);
            } while (i==0&&chr=='0') ;//第一個字符不能為0,
            
            sb.append(chr);
        }
        return sb.toString();
    }

    
    public static String getRandomArr(int arrLength, int length, boolean flag) {
        StringBuffer sBuffer = new StringBuffer();
        for (int i = 0; i < arrLength; i++) {
            sBuffer.append(getRandom(length, flag)).append(",");
        }
        int leng = sBuffer.toString().length();
        return sBuffer.toString().substring(0, leng-1);
    }

    /**
     * 生成定長的字符串數組
     * @param arrLength  數組長度
     * @param paramStr   
     * @return
     */
    public static String generateStrArr(int arrLength, String paramStr) {
        StringBuffer sBuffer = new StringBuffer();
        for (int i = 0; i < arrLength; i++) {
            sBuffer.append("\"").append(paramStr).append("\"").append(",");
        }
        int leng = sBuffer.toString().length();
        return sBuffer.toString().substring(0, leng-1);
    }

}

  在這個隨機類中,我們定義了很多關於隨機對象生成的方法,並確切定義了參數。於是,我們根據這個類,以及前面接口實現類定義的方法,可以快速的定義相關的隨機函數。例如:

public class RandomFunction implements functionInterface {
    @Override
    public String execute(String[] args) {
        int len = args.length;
        int length = 6;// 默認為6
        boolean flag = false;// 默認為false
        if (len > 0) {// 第一個參數字符串長度
            length = Integer.valueOf(args[0]);
        }
        if (len > 1) {// 第二個參數是否純字符串
            flag = Boolean.valueOf(args[1]);
        }
        return RandomUtil.getRandom(length, flag);
    }

    @Override
    public String getReferenceKey() {
        return "random";
    }

}

  在這里,我們定義了該random函數。使用方法如下:

  • __random(param1,param2):隨機生成一個定長的字符串(不含中文)。param1:長度(非必填,默認為6),param2:純數字標識(非必填,默認為false)。

接下來,我們再繼續第二個隨機函數:

public class RandomStrArrFucntion implements functionInterface{

    @Override
    public String execute(String[] args) {
        // 第一個參數為數組長度 即生成參數個數
        // 第二個參數為參數長度
        // 第三個參數為是否只有數字標志
        int len = args.length;
        int arrLength = 1; // 默認數組長度為1
        int length = 6;// 默認參數長度為6
        boolean flag = false;// 默認為false
        if (len == 1) {
            arrLength = Integer.valueOf(args[0]);
        } else if (len == 2) {
            arrLength = Integer.valueOf(args[0]);
            length = Integer.valueOf(args[1]);
        } else if (len == 3) {
            arrLength = Integer.valueOf(args[0]);
            length = Integer.valueOf(args[1]);
            flag = Boolean.valueOf(args[1]);
        }
        return RandomUtil.getRandomArr(arrLength, length, flag);
    }
@Override
public String getReferenceKey() { // TODO Auto-generated method stub return "randomStrArr"; } }

  在這里我們定義了隨機生成字符串數組的的函數randomStrArr,使用形式如下:

  • __randomStrArr(param1,param2,param3):隨機生成一個定長字符串數組。param1:數組長度(非必填,默認為1),param2:單個字符串長度(非必填,默認6),param3:純數字標識(非必填,默認為false)。

接下來,我們再看第三個隨機函數:

public class RandomTextFunction implements functionInterface{

    @Override
    public String execute(String[] args) {
        int length = 6;// 默認為6
        if (StringUtil.isNotEmpty(args[0])) {
            length = Integer.valueOf(args[0]);// 參數是長度
        }
        return RandomUtil.getRandomText(length);
    }

    @Override
    public String getReferenceKey() {
        // TODO Auto-generated method stub
        return "randomText";
    }

}

  在這里我們定義了第三個隨機函數randomText,使用方式如下:

  • __randomText(param1): 隨機生成一個定長的字符串(含中文)。param1:長度(非必填,默認為6)

  可以看到,我們再定義以上三個隨機函數實現類的時候,都調用了RandomUtil里定義的方法。因此,如果我們在RandomUtil中定義了相關的方法后,用來生成隨機函數,是非常快速和方便的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM