章鱼教你自动生成json数据来测试~
如果你正在测试一个线上产品,你会想确保你的密切模拟生产环境条件下的测试。在生产中,你将有用户的军队在你的应用程序乒乒乓乓,并用数据填充数据库,这是你的代码压力。更糟的是,你输入的数据将偏向你自己的使用模式,将不符合实际使用,可能会留下严重的错误未被发现。某些应用程序框架,如作为Ruby on Rails的,有很大的数据库。但并不是每个人都是程序员,有时间去学习一个新的框架,或者是随意采用一个新的平台。
当我们进行测试的时候,可能会有需要进行批量的验证账号和密码的可用性。如果手动的维护编写json格式的数据是很麻烦的,所以推荐生成json数据来方便我们进行api接口的测试。
参数名 | 参数类型 | 必须 |
---|---|---|
userId | String | 是 |
password | String | 是 |
首先我们先使用Java模拟一个数据并生成一个接口需要的json数据(开始啦~~)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
/**
* 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
1
2
3
4
5
6
|
TestUser01 eyJtZW1iZXJMaXN0I
TestUser02 Q4US8wIiwibGFpeXV
TestUser03 ajVnRXVxWlZyQUNWS
TestUser04 oi6Zi/6IO257OV5Lu
TestUser05 In0seyJhZGRyZXNzI
TestUser06 wiaWNvblVybCI6IiI
|
文本里面记录了多个用户信息,这里是6个哦
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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数据
1
2
3
4
5
6
|
@Test
public void test2(){
List<User> data = readUserText();
String jsonStr = JSON.toJSONString(data);
System.out.println(jsonStr);
}
|
控制台会输出
1
|
[{"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数据,也就是俗称的美化~ ~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
[
{
"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 团队首发-
欢迎关注微信订阅号:MaxLeap_yidongyanfa