分页查询接口测试(后台接口测试之列表分页加载测试小结)

您所在的位置:网站首页 mybatisplus分页查询total为0 分页查询接口测试(后台接口测试之列表分页加载测试小结)

分页查询接口测试(后台接口测试之列表分页加载测试小结)

2023-03-23 13:46| 来源: 网络整理| 查看: 265

本文目录后台接口测试之列表分页加载测试小结在JPA进行分页查询时,Query接口中的什么方法用于设定需要获取的总行数接口对接说明文档JPA分页查询与条件分页查询restful api 一般怎么测试postman微信公众号接口测试MybatisPlus分页条件查询Spring Webflux + r2dbc 分页查询 示例2oracle做分页查询怎么做后台接口测试之列表分页加载测试小结

    在项目测试过程中,很多产品的UI界面都会涉及到列表 分页 显示。本篇就是针对此列表分页加载的接口做出测试,测试时可以先判断接口是否有问题,才去判断客户端写的UI界面是否没对分页做出处理。

    首先呢,分页加载数据的接口请求参数是有共性的,一般都是由pageCount&pageNo组成,pageCount是加载1页的数量,pageNo是加载第几页,pageNo是从0开始算起的,也就是说pageNo=0是加载第1页数据的意思。

    然后呢,打开Postman输入请求方式和请求的URL,再把请求参数输入进去。这里的请求参数的输入值也有一个共性,如果是接口分页出现了问题,一般数据就会出现 重复 。而如果列表的数据不是很多的时候,在客户端呢很难发现问题,因为客户端加载的一页数量一般是10,而你数量少于10的时候,就不会发现分页的问题。这里在测试接口层面的时候,只要有1条数据,就可以看出是否有重复的问题。

    举个例子,我们现在要测试一个分页的接口,我们先给列表加入1条数据,然后第一次请求的时候pageCount=1&pageNo=0,这个的意思就是请求第1页的数据,并且1页加载1条数据,按理来说,这样我们就已经加载完毕了。接着,我们第二次请求pageCount=1&pageNo=1,加载第2页的数据的时候,就应该是没有数据,返回空数组才对。而往往分页有问题的话,你请求pageCount=1&pageNo=1的时候,它会返回数据给你,返回的数据恰恰好就是第1页的最后1条数据,这就是我要说的重复问题。

    在Postman上面的操作就是:

    1、第一次请求(如下是没问题的):

    2、第二次请求(如下是有问题的,数据重复了,第2页是不应该有数据的):

  下面我们来看一下,修复之后,第二次请求返回正常的结果,如下图:

    修复后的客户端显示正常,也不重复了:

    这个就是1条数据测试接口是否分页有重复问题,当然修复了接口分页,还需要测试下客户端有没有对分页做出处理,这个的话,就需要加入多条,一般是10或者20条数据进行验证了。

在JPA进行分页查询时,Query接口中的什么方法用于设定需要获取的总行数

在hibernate的query接口查询出一个list后 list里有两个方法 list.setFirstResult(int a); list.setMaxSize(int a); 第一个方法用来设置当前页要显示的第一条记录是从哪一个记录开始的 第二个方法用来设置每页的最大记录数 通过这个就足以实现分页了,先实现了功能再说吧,这样做反正是不太好呵呵

接口对接说明文档

接口对接说明文档*以下是入库,修改,出库,查询,领取操作,上传文件,扫面快件,后台手工操作等等系统所需要接口,接口时区,时间格式后台服务器统一处理,前端只做展示,不处理,后台优化。接口在线测试地址为   “account“: “001“,《SaaS账户码,必填》

  “imgUrl“: “group1/M00/00/00/rBAzTFst2PmAFYHoAAE2VbemYe8895.jpg“,

  “number“: “a123456“,

  “remark“: “备注“《非必填》

}

1

2

3

4

5

6

响应体{

  “message“: {

    “code“: “200“,

    “msg“: “获取成功“

  },

  “data“: 1

}

1

2

3

4

5

6

7

2.根据快点单号查询

get请求   “message“: {

    “code“: “200“,

    “msg“: “获取成功“

  },

  “data“: {

    “id“: 6,

    “account“: “扫描枪1号“,

    “number“: “b13131321“,

    “phone“: “14758265423“,

    “code“: “0123“,

    “imgUrl“: null,

    “successDate“: null,

    “status“: “wait“,

    “remark“: “备注“,

    “createDate“: null,

    “updateDate“: null

  }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

3.分页查询 支持模糊查询,支持查询总记录数

    “pageNo“:“1“,

    “pageSize“:“10“,

    “id“:10, 《条件查询非必填》

    “account“:“003“, 《SaaS账户码,必填》

    “number“:“abc123456“, 《条件查询非必填,支持模糊查询》

    “phone“:“15638458525“, 《条件查询非必填,支持模糊查询》

    “code“:“1234“, 《条件查询非必填,支持模糊查询》

    “imgUrl“:“group1/M00/00/00/rBAzTFtFqi-AV8qNAAgr7tOdRhg298.jpg“, 《条件查询非必填》

    “status“:“success“ 《条件查询非必填》

    “startCreateDate“:“2018-08-10 13:42:45“ 《开始入库时间,非必填》

    “endCreateDate“:“2018-08-10 13:42:45“ 《结束入库时间,非必填》

}

1

2

3

4

5

6

7

8

9

10

11

12

13

响应体{

  “message“: {

    “code“: “200“,

    “msg“: “获取成功“

  },

  “data“: {

    “total“: 67,

    “rows“: [

      {

        “id“: “1826“,

        “account“: null,

        “number“: “3866940607293“,

        “phone“: “17760746217“,

        “code“: “5-5-5003“,

        “imgUrl“: “http://image.31xiaoyuan.com:80/group1/M00/00/07/rBAzTlttJdSAFHLSAASq5DS_AEs492.jpg“,

        “successDate“: null,

        “status“: “wait“,

        “remark“: “已发送短信“,

        “createDate“: “2018-08-10 13:42:45“,

        “updateDate“: “2018-08-10 15:42:51“

      }

    ]

  }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

4 .领取操作 后台自动更新remark 为已领取

POST 请求   “message“: {

    “code“: “212“,

    “msg“: “快递已领取,不可重复领取“

  },

  “data“: null

}

1

2

3

4

5

6

7

5.删除快件

get请求   “message“: {

    “code“: “200“,

    “msg“: “删除成功“

  },

  “data“: 0

}

1

2

3

4

5

6

7

6.上传文件

post请求     “message“:{

        “code“:“200“,

        “msg“:“获取成功“

    },

    “data“:“group1/M00/00/00/rBAzTFst89WAU3TkAAAQBiAihO4765.jpg“

}

1

2

3

4

5

6

7

5.查看文件

get请求   “message“: {

    “code“: “200“,

    “msg“: “获取成功“

  },

  “data“: “120.27.209.6:8888/group1/M00/00/00/rBAzTFst89WAU3TkAAAQBiAihO4765.jpg“

}

1

2

3

4

5

6

7

6.修改快件-入库修改

  “id“: “8“,

  “account“: “00000“,《SaaS账户码,必填》

  “code“: “1111“,《非必填,有值即修改》

  “imgUrl“: “group1/M00/00/00/rBAzTFtFqi-AV8qNAAgr7tOdRhg298.jpg“,《非必填,有值即修改》

  “status“: “scanning“,《非必填,有值即修改》

  “remark“: “修改图片“《非必填,有值即修改》

}

1

2

3

4

5

6

7

8

响应体{

  “message“: {

    “code“: “200“,

    “msg“: “获取成功“

  },

  “data“: 0

}

1

2

3

4

5

6

7

7. 登录入口传参数–也可参考swagger

  “password“: “123456“,《密码》

  “username“: “18337151123“《手机号》

}

1

2

3

4

响应体{

  “message“: {

    “code“: “200“,

    “msg“: “获取成功“

  },

  “data“: {

    “deptId“: “1“,  《SaaS账户码》

    “userId“: “140“《用户ID,现在简单做,没有token等,后期加入》

  }

}

1

2

3

4

5

6

7

8

9

10

8. 注册接口传参数–也可参考swagger   “deptId“: 1,《SaaS账户码,由后台管理开户审核》

  “password“: “123456“,《登录密码》

  “username“: “18337157111“《注册登录账户》

}

1

2

3

4

5

响应体{

  “message“: {

    “code“: “200“,

    “msg“: “获取成功“

  },

  “data“: {}

}

1

2

3

4

5

6

7

JPA分页查询与条件分页查询

整合JPA和使用方法见: 整合JPA 继承JpaRepository接口后,自动拥有了按“实例”进行查询的诸多方法。先来列举常用的一些方法

无条件分页查询可以使用PagingAndSortingRepository中的方法

有条件分页查询可用QueryByExampleExecutor中的方法

我们自动注入的Respository输入.find会显示如下列表,基本上查询也就用下面这些方法就够了

如果需要其他简单的列表查询可直接在我们自己定义的ProductRespository接口中添加方法,也是可以直接调用查询 不需要写实现

实例讲解一下Example和Pageable的用法 ///返回单一对象精准匹配:

///多条件,返回Page对象:

备注: ExampleMatcher:

restful api 一般怎么测试

定义了RestFul Api,必须先做单元测试,确保Api可用,然后再交给别人去调用,这样才能确保工作进度(1)使用Apache的jmeter测试工具,很方便,可以批量测试Api,(2) 使用JerseyClient写测试程序。因为我们用的是jersey实现的RestFul。(3) 使用浏览器插件工具,我用的是火狐的插件RESTClient(4)使用curl命令行工具。使用工具测试Api,GET方法还好,如果是POST方法需要指定方法的Headers(数据格式),Body(请求参数),Api的url。Body请求参数,如何获取呢,在这里我使用了Gson,先用java组织参数对象,然后用Gson将参数对象转化为json串。Gson gson = new Gson(); String wqtString = gson.toJson(wqt);System.out.println(wqtString)举例说明:我们框架中封装了一个查询参数WebQueryTerm。我获取到它的json串格式为:{“page“:{“number“:1,“size“:10,“total“:0,“sorts“:}其中page表示分页属性。number当前页,size一页显示多少条数据,sorts排序:field表示排序字段。type表示排序类型,是desc降序还是asc升序terms表示查询。field表示查询字段;operator表示是模糊查询Like还是精确查询Equal,value表示你输入的查询值。追答这里简单说一下,怎么使用火狐的RESTClient。(1)首先,在火狐浏览器菜单-附件组件-插件,中搜索RESTClient,并安装(2)打开RESTClient,点击菜单Headers。输入自定义Request Headers。例如Name = Content-Type Value=application/json 点击okay!(3)选择Method,我选择Post,因为我测试获取应用列表,带分页,带查询条件。(4)输入a测试工作完成!

postman微信公众号接口测试

1、拿到api接口文档:熟悉接口业务、接口地址、鉴权、入参、出参、错误码

2、接口测试计划和方案:正例、反例、分页异常

3、编写用例和评审

4、执行接口测试

5、输出接口测试报告

在企业中做接口测试是不会把参数写死过去的

时间戳:

生成0-100的随机整数:

生成一个GUID的字符串:

一个接口中可能存在多个环境如:开发、测试、生产环境

环境和globals都是全局变量

多个接口之前都是有相互关联的

如:注册之后就是登陆,一个业务增删改查不可能一个接口一个接口测

如果一个参数可能从新增到修改再到删除D都是关联,则需要在第一个接口先去获取到,然后在下面接口使用时可以调用

可以在Tests界面上使用

1、json提取器

2、正则表达式提取器

3、cookie提取器精确断言: 如果需要精确断言的,即这个是个变量,可以提取获取到值,保存到一个全局变量中,并通过获取全局变量来进行断言

一般是在这个Pre-request Script界面上全局断言: 就是所有接口都用到这个断言

一般用于状态断言

MybatisPlus分页条件查询

前提:先导入MybatisPlus相关依赖

1、配置分页插件(不需要修改)

2、将查询条件封装成类

3、接口使用get请求,传入需要的参数 query接口

4、获得条件后,执行多条件分页查询 myquery()方法

(5、控制台查看底层执行的SQL) 配置属性

按照以上配置后MyBatis-Plus分页后total和pages总为0,需要添加添加MyBatis-Plus分页的配置:

注意新版配置和老版配置有区别:

老版本:

新版本:

Spring Webflux + r2dbc 分页查询 示例2

我们可以看到, 如果使用R2dbc 已经实现的分页, 那么我们可以使用Pageable 进行分页查询, 但是如果我们需要使用offset 此时, 现有的支持也许并不够用, 那么我们需要自己来实现 Pageable 接口来实现offset分页

由于项目需要, 决策层决定只给API调用者提供获取下一页的功能, 而不是提供给API 调用者提供直接查询某一页的功能, 我个人理解是, 这样做可以直接让API调用方调用指定的需要的查询记录的位置而不是必须要页首.

这里我们就已经实现了所有需要的方法, 那么我们可以使用我们的实现来使用 Offset 类来进行分页查询, 这里笔者觉得如果Spring Pageable 提供泛型会更加灵活, 这样的话我们直接可以指定返回类型, 不过也有可能Spring 本身有其他考量在此.

但是这里还是有缺陷的, 如果外部调用构造函数, 例如 new Offset(5, 10, false), 那么势必,我们使用 pageable.isPaged() 会得到false, 那么我们接下来很可能会碰到一些问题, 但很显然我们需要使用new Offset(5, 10, true). 那么这里最后将构造函数私有, 然后提供,比如一个of的静态方法来让外部使用:

其实这里我们依然有一些问题存在, 例如, 如果控制层调用时, 提供的参数为空的情况, 我们就比较被动了, 以为我们使用的是int 型, 不允许为null, 所以有一种情况, 假设用户请求为: GET “/dosomting?limit=10“, 此时, 我们获得的offset是空, 那么我们可能想设定offset = 0, 那么如果使用int 就办不到了, 所以我们需要 offset 为 Integer, 或者给offset 一个默认值等.

由于时间有限, 笔者没有进行过多的测试, 可能实现类中还有隐含问题待解决, 不过自己实现接口往往会遇到各种问题, 这也是很难避免的, 一般建议, 如果依赖包本身含有现成的实现类, 那么我们最好不要重复造轮子, 但是如果必须自己实现, 那良好的测试是必要的

oracle做分页查询怎么做

  sql语句如下:

分页1

SELECT *

 FROM (Select ROWNUM AS ROWNO, T.*

      from 表名 T(别名)

     where 表字段 between to_date(’20060501’, ’yyyymmdd’) and  to_date(’20060731’, ’yyyymmdd’)

      AND ROWNUM 《= 20) TABLE_ALIAS

WHERE TABLE_ALIAS.ROWNO 》= 10;

经过测试,此方法成本最低,只嵌套一层,速度最快,即使查询的数据量再大,也几乎不受影响,速度依然.

分页2:

SELECT *

 FROM (SELECT TT.*, ROWNUM AS ROWNO

      FROM (Select t.*

          from 表名 T(别名)

          where flight_date between to_date(’20060501’, ’yyyymmdd’) and

             to_date(’20060531’, ’yyyymmdd’)

          ORDER BY FACT_UP_TIME, flight_no) TT(别名二)

     WHERE ROWNUM 《= 20) TABLE_ALIAS

where TABLE_ALIAS.rowno 》= 10;

经过测试,此方法随着查询范围的扩大,速度也会越来越慢,

   



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3