章鱼教你自动生成json数据来测试~

力谱宿云 发布于 2016/10/11 10:31
阅读 1K+
收藏 6

如果你正在测试一个线上产品,你会想确保你的密切模拟生产环境条件下的测试。在生产中,你将有用户的军队在你的应用程序乒乒乓乓,并用数据填充数据库,这是你的代码压力。更糟的是,你输入的数据将偏向你自己的使用模式,将不符合实际使用,可能会留下严重的错误未被发现。某些应用程序框架,如作为Ruby on Rails的,有很大的数据库。但并不是每个人都是程序员,有时间去学习一个新的框架,或者是随意采用一个新的平台。

封面

当我们进行测试的时候,可能会有需要进行批量的验证账号和密码的可用性。如果手动的维护编写json格式的数据是很麻烦的,所以推荐生成json数据来方便我们进行api接口的测试。

参数名 参数类型 必须
userId String
password String

首先我们先使用Java模拟一个数据并生成一个接口需要的json数据(开始啦~~)

/**
 * 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格式啦

这些用户名和密码都是事先指定好的,可以写在程序里面,也可以批量的写在txt文档中,如果有多个用户,可以一行写一个用户名和密码。一般用户名和密码之间用一个空格分隔就行了,因为用户名和密码一般情况下都是不允许使用空格的,分割符可以根据情况更换,但是需要注意,分割符不允许能在两个字段出现的。

现在我们来实现从文本中批量的读取数据,并生成我们需要的json格式: 有一个text文本: user.txt

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

文本里面记录了多个用户信息,这里是6个哦

public static List readUserText() {
    File file = new File("text.txt");
    List 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 data = readUserText();
    String jsonStr = JSON.toJSONString(data);
    System.out.println(jsonStr);
}

控制台会输出

[{"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/archives/1192

欢迎关注微信订阅号:MaxLeap_yidongyanfa

相关阅读
Amazon和Mysql之间的那点事儿
当我们说数据挖掘的时候我们在说什么

作者往期佳作

单元测试和集成测试业务应用程序

关于MaxLeap

MaxLeap 移动业务研发的云服务平台,为企业提供包括应用开发所需的后端云数据库、云数据源、云代码、云容器、 IM、移动支付、应用内社交、第三方登录、社交分享、数据分析、推送营销,用户支持等服务, MaxLeap 致力于让移动应用开发更快速简单。

加载中
0
Sel8616
Sel8616

引用来自“卡布达巨人”的评论

...
...
0
抓沃啊
抓沃啊

那个@Test是什么东西啊,新手求解释啊

返回顶部
顶部