章魚教你自動生成json數據來測試~

若是你正在測試一個線上產品,你會想確保你的密切模擬生產環境條件下的測試。在生產中,你將有用戶的軍隊在你的應用程序乒乒乓乓,並用數據填充數據庫,這是你的代碼壓力。更糟的是,你輸入的數據將偏向你本身的使用模式,將不符合實際使用,可能會留下嚴重的錯誤未被發現。某些應用程序框架,如做爲Ruby on Rails的,有很大的數據庫。但並非每一個人都是程序員,有時間去學習一個新的框架,或者是隨意採用一個新的平臺。java

當咱們進行測試的時候,可能會有須要進行批量的驗證帳號和密碼的可用性。若是手動的維護編寫json格式的數據是很麻煩的,因此推薦生成json數據來方便咱們進行api接口的測試。程序員

參數名 參數類型 必須
userId String
password String

首先咱們先使用Java模擬一個數據並生成一個接口須要的json數據(開始啦~~)sql

/**
 * User基礎類
 */
public class User{
    private String userId;
    private String password;

    public User(){
        
    }
    
    public User(String userId, String password){
        this.userId = userId;
        this.password = password;
    }
    
    /**省略get和set方法**/
}

/**
 * 模擬數據測試類
 */
public class TestUser{
    @Test
    public void test(){
        User user1 = new User("TestUser01", "eyJtZW1iZXJMaXN0I");
        /*
         * 這裏咱們已經模擬好了1個用戶數據了。
         * 若是咱們須要將他們變爲json格式的數據則須要借用工具來實現
         * 例如常見的jackson,fastjson,和gson
         * 這裏使用fastjson做爲示範,請看官們自備fastjson的jar包
         * http://repo1.maven.org/maven2/com/alibaba/fastjson/
         */
         
        String jsonStr = JSON.toJSONString(user1);
        
        System.out.println(jsonStr);
    }
}

控制檯會輸出:
{"userId":"TestUser01","password":"eyJtZW1iZXJMaXN0I"}數據庫

看,這樣咱們就擁有了簡單的單個數據的json格式啦json

這些用戶名和密碼都是事先指定好的,能夠寫在程序裏面,也能夠批量的寫在txt文檔中,若是有多個用戶,能夠一行寫一個用戶名和密碼。通常用戶名和密碼之間用一個空格分隔就好了,由於用戶名和密碼通常狀況下都是不容許使用空格的,分割符能夠根據狀況更換,可是須要注意,分割符不容許能在兩個字段出現的。api

如今咱們來實現從文本中批量的讀取數據,並生成咱們須要的json格式:
有一個text文本:
user.txt數組

TestUser01 eyJtZW1iZXJMaXN0I
TestUser02 Q4US8wIiwibGFpeXV
TestUser03 ajVnRXVxWlZyQUNWS
TestUser04 oi6Zi/6IO257OV5Lu
TestUser05 In0seyJhZGRyZXNzI
TestUser06 wiaWNvblVybCI6IiI

文本里面記錄了多個用戶信息,這裏是6個哦微信

public static List<User> readUserText() {
    File file = new File("text.txt");
    List<User> data = new LinkedList<>();
    try (BufferedReader br = new BufferedReader(
            new InputStreamReader(new FileInputStream(file), "utf-8"))) {
        String readLine = null;
        while (null != (readLine = br.readLine())) {
            String[] userData = readLine.split(" ");
            data.add(new User(userData[0], userData[1]));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return data;
}

而後咱們一行一行的讀取,把每行拆分,並封裝成用戶數據,最後放到List數組中。
最後咱們把模擬的數組數據轉換成數組型的json數據框架

@Test
public void test2(){
    List<User> data = readUserText();
    String jsonStr = JSON.toJSONString(data);
    System.out.println(jsonStr);
}

控制檯會輸出maven

[{"password":"eyJtZW1iZXJMaXN0I","userId":"TestUser01"},{"password":"Q4US8wIiwibGFpeXV","userId":"TestUser02"},{"password":"ajVnRXVxWlZyQUNWS","userId":"TestUser03"},{"password":"oi6Zi/6IO257OV5Lu","userId":"TestUser04"},{"password":"In0seyJhZGRyZXNzI","userId":"TestUser05"},{"password":"wiaWNvblVybCI6IiI","userId":"TestUser06"}]

如今咱們看到的json數據是屬於壓縮的格式,因此可讀性並不高,咱們須要格式化一下這些json數據,也就是俗稱的美化~ ~

[
    {
        "password":"eyJtZW1iZXJMaXN0I",
        "userId":"TestUser01"
    },
    {
        "password":"Q4US8wIiwibGFpeXV",
        "userId":"TestUser02"
    },
    {
        "password":"ajVnRXVxWlZyQUNWS",
        "userId":"TestUser03"
    },
    {
        "password":"oi6Zi/6IO257OV5Lu",
        "userId":"TestUser04"
    },
    {
        "password":"In0seyJhZGRyZXNzI",
        "userId":"TestUser05"
    },
    {
        "password":"wiaWNvblVybCI6IiI",
        "userId":"TestUser06"
    }
]

看,是否是清晰多了~ ~ ~

當你的測試數據庫中充滿了逼真的數據,你會更多地參與做爲一個測試儀。當你表現出新的特徵的人,他們會明白他們更快。真實的數據是多種多樣的,包含字符,不玩弄你的代碼,如省略號,或從其餘語言中的Unicode字符。用真實數據測試將使你的應用程序更加健壯,由於你會有可能發現生產前一天發佈的錯誤。

做者信息
原文做者Maxleap團隊_雲服務研發成員:Sunny Zhang【原創】
力譜宿雲 LeapCloud 團隊首發:https://blog.maxleap.cn/archi...
歡迎關注微信訂閱號:MaxLeap_yidongyanfa

相關閱讀
Amazon和Mysql之間的那點事兒
當咱們說數據挖掘的時候咱們在說什麼

做者往期佳做
單元測試和集成測試業務應用程序

相關文章
相關標籤/搜索