最近打算做公司的 web 端产品的接口测试,首先说明一下,后台接口有一大半是用于提供数据的查询,且接口返回的 json 较复杂,一个字段里可能有多个 list,list 里面包含的字段下面可能又有多个 list。我们选择的框架是 java+junit+maven,断言用的是 assert J。在落地的过程中,遇到了关于接口返回的复杂的 json 的验证问题。以下先展示我已完成的一个简单单接口的处理方法。
{ 
    "code": 0,
    "msg": null,
    "data": [
        {
            "year": 5262,
            "grade": 5265,
            "name": "312"
        },
        {
            "year": 89606,
            "grade": 5260,
            "name": "2"
        },
        {
            "year": 5262,
            "grade": 5258,
            "name": "9"
        },
    ]
}
public class Respones{
    private String code;
    private String msg;
        private List<Info> data;
        setter();getter();
}
public class Info{
    private String name;
    private int grade;
    private int year;
        setter();getter();
}
@Test()
    public void getClasses()        
    {
        GetInfoCommon getInfo =new GetInfoCommon();  //封装的接口方法类
        Respones respones=new Respones ();
        try {
            respones=getInfo.getClassesAPI("/class/get-classes");       //接口方法
            assertThat(respones).isEqualToComparingFieldByFieldRecursively(respones2);     //断言respones的属性值是否与期望值respones2一致
        }
}
我的处理方式是根据 json 设计 bean,然后将 json 数据反序列化为 javabean,最终判断两个 bean 的值是否一致达到断言。那么问题来了,针对例子中的 json,已经对应设计了两个 bean,而我还有更多更复杂的 json,是否是每个 json 都要设计对应的 bean。而且不同的 json 中,会有重复的 list。例如上面的 json 中有个 Info 类型的 list,而在其他 json 中,这个 list 又会在某个 list 下面的某个字段里,如:
{
    "code": 0,
    "msg": null,
    "data": {
        "list": {
            "2017-09-08": {
                "weekday": "周五",
                "info": {
             {
            "year": 89606,
            "grade": 5260,
            "name": "2"
              },
            {
            "year": 5262,
            "grade": 5258,
            "name": "9"
             }}},
         "2017-09-09": {
                "weekday": "周六",
                "info": {
             {
            "year": 89607,
            "grade": 5260,
            "name": "1"
              },
            {
            "year": 5272,
            "grade": 5258,
            "name": "9"
             }}},
}}}
如果在针对第二个 json 再重新设计 javabean,就有太多的 bean 类且部分内容字段存在重复。
初次结合实际项目开展接口测试,上文所介绍的处理方案也是我在 testerhome 社区及网上的其他处看到的接口测试文章借鉴而来。对于以上说到的疑惑,想请问下大家有没有一些好的方法处理,比如还可不可以在哪个层面进行封装。因为接口多数是提高查询服务,所以 json 中的每个节点都需要判断。我的想法还是希望能够继续对比 javabean 去实现断言,且期望值 javabean 是通过查询数据库进行赋值的。
第一次发帖,有点紧张。期待回复,感谢 testerhome 平台~