dp2 icon indicating copy to clipboard operation
dp2 copied to clipboard

盘点与Web API对接测试

Open renyh opened this issue 4 years ago • 14 comments

前提:在dp2ssl盘点系统的用户文件夹的 inventory.xml 文件根元素下配置这样一个元素: <uploadInterface protocol='' baseUrl='http://localhost:62022/'/> 其中 baseUrl 属性是实际的服务器 URL (Web API 基地址)。如果 inventory.xml 中没有定义这个元素,则不使用这个接口。如果定义了这个元素,则在盘点中每当需要写入册记录的时候,会调用这个接口上传数据。


1. 盘点时仅修改当前位置,上传的数据中barcode,currentLocation,currentShelfNo 有值且正确,符合预期。

盘点请求的数据样例:


{
  "items": [
    {
      "action": "update",
      "format": "json",
      "style": null,
      "data": "{\"batchNo\": \"inventory_2021/3/25\",\"barcode\": \"B002\",\"location\": null,\"shelfNo\": null,\"currentLocation\": \"阅览室\",\"currentShelfNo\": \"0201\",\"operatorPerson\": null,\"operatorTime\": null}"    
    }
  ]
}

服务器日志

2021-03-25 10:00:25.405 +08:00 [INF] action=upload,data={
  "batchNo": "inventory_2021/3/25",
  "barcode": "B002",
  "location": null,
  "shelfNo": null,
  "currentLocation": "阅览室",
  "currentShelfNo": "0201",
  "operatorPerson": null,
  "operatorTime": null
}

2. 盘点时仅修改永久位置,上传的数据中barcode,location,shelfNo 有值且正常,符合预期。

盘点请求的数据样例:

{
  "items": [
    {
      "action": "update",
      "format": "json",
      "style": null,
      "data": "{\"batchNo\": \"inventory_2021/3/25\",\"barcode\": \"B003\",\"location\": \"一楼大厅\",\"shelfNo\": \"0301\",\"currentLocation\": null,\"currentShelfNo\": null,\"operatorPerson\": null,\"operatorTime\": null}"    
    }
  ]
}

服务器日志

2021-03-25 10:03:19.989 +08:00 [INF] action=upload,data={
  "batchNo": "inventory_2021/3/25",
  "barcode": "B003",
  "location": "一楼大厅",
  "shelfNo": "0301",
  "currentLocation": null,
  "currentShelfNo": null,
  "operatorPerson": null,
  "operatorTime": null
}

3. 盘点时同时修改当前位置和永久位置,上传的数据中barcode,location,shelfNo,currentLocation,currentShelfNo有值且正确,符合预期。

盘点请求的数据样例:

{
  "items": [
    {
      "action": "update",
      "format": "json",
      "style": null,
      "data": "{\"batchNo\": \"inventory_2021/3/25\",\"barcode\": \"B005\",\"location\": \"阅览室\",\"shelfNo\": \"0201\",\"currentLocation\": \"阅览室\",\"currentShelfNo\": \"0201\",\"operatorPerson\": null,\"operatorTime\": null}"    
    }
  ]
}

服务器日志

2021-03-25 10:05:06.518 +08:00 [INF] action=upload,data={
  "batchNo": "inventory_2021/3/25",
  "barcode": "B005",
  "location": "阅览室",
  "shelfNo": "0201",
  "currentLocation": "阅览室",
  "currentShelfNo": "0201",
  "operatorPerson": null,
  "operatorTime": null
}

盘点时仅关联UID,不会调上传接口,符合预期。

renyh avatar Mar 25 '21 02:03 renyh

SetItems接口返回值说明

SetItems接口返回参数SetItemsResponse包含一个整体的result成员,和一个记录数组,其中每条记录对象中也有一个result成员。

    // SetItem返回对象
    public class SetItemsResponse
    {
        // 整体的返回结果
        public ApiResult result { get; set; }

        // 每一条记录各自的返回信息,记录数量与传入数量一致。
        public List<Item> outputItems { get; set; }

    }

    // API函数结果
    public class ApiResult
    {
        // -1表示出错,>=0 表示成功
        public long value { get; set; }

        // 错误码,字符串类型,目前值如下:
        // noError:成功
        // systemError:系统严重错误,导致没法任何处理记录。
        // partError:部分错误,在作为整体返回结果时,如果处理的记录一部分成功,一部分出错,返回的value=-1,errorCode=partError
        // parameterError:请求参数错误。
        public string errorCode { get; set; }  

        // 错误描述信息
        public string errorInfo { get; set; }
    }

    public class Item
    {
        //要执行的操作,值为new update delete move,默认是update
        public string action { get; set; }

        //风格。常用作附加的特性参数。
        public string style { get; set; }

        // 数据格式,值为json、xml
        public string format { get; set; }

        //数据内容,根据不同的Format,传入不同格式的内容
        public string data { get; set; }

        // 本条记录的处理结果,当用在返回参数时有意义
        public ApiResult result { get; set; }
    }

注意事项

  1. 针对整体result成员,如果全部记录都处理成功,则result.value>=0。
  2. 针对整体result成员,如果一部分记录成功,一部分记录出错,则result.value=-1,并设置result.errorCode="partError"。
  3. 针对整体result成员,如果请求传来的items为null或者成员数量为0,则result.value=-1,并设置result.errorCode="parameterError"。
  4. 针对整体result成员,如果服务器自身有严重错误 ,导致没法任何处理记录。则result.value=-1,并设置result.errorCode="systemError"。
  5. 针对每条记录的result成员,如果本条记录处理成功,result.value>=0;如果处理失败,result.value=-1,result.errorInfo="失败原因";
  6. 如果部分记录成功,部分记录出错,返回的outputItems一定要包含所有出错的记录,并在出错的记录中设置result.value=-1和errorInfo。当然outputItems也可以含有成功的记录,但在成功的记录设置result.value>=0。
  7. 返回的outputItems中每条记录的data字段信息可以简化,只包含册条码就行。当然传完整信息也可以。

renyh avatar Mar 25 '21 09:03 renyh

Item 内 data 成员字符串,"json" 格式,推荐为如下类结构:

        public class Data
        {
            public string title { get; set; }
            public string batchNo { get; set; }
            public string uii { get; set; }     // 格式为 OI.PII
            public string barcode { get; set; } // PII
            public string location { get; set; }
            public string shelfNo { get; set; }
            public string currentLocation { get; set; }
            public string currentShelfNo { get; set; }
            public string operatorPerson { get; set; }
            public string operatorTime { get; set; }    // 时间格式为 "yyyy-MM-dd HH:mm:ss.ffff"
        }

(随时更新)

DigitalPlatform avatar Mar 25 '21 10:03 DigitalPlatform

测试请求中data的title、uii、barcode是否正确,uii 字段里面放的是 oi+pii,而 barcode 字段里面依然放的是不含机构代码的条码号。

2021/3/26 测试样例如下,title、barcode和uii都正确,符合预期。

2021-03-26 10:20:54.499 +08:00 [INF] action=upload,data={
  "title": "木偶奇遇记",
  "batchNo": "inventory_2021/3/26",
  "uii": "CN-110108-1-ABC.B003",
  "barcode": "B003",
  "location": "一层",
  "shelfNo": "0301",
  "currentLocation": "一层",
  "currentShelfNo": "0301",
  "operatorPerson": null,
  "operatorTime": "2021-03-26 10:20:54.3518"
}
2021-03-26 10:20:58.654 +08:00 [INF] action=upload,data={
  "title": "伊索寓言",
  "batchNo": "inventory_2021/3/26",
  "uii": "CN-110108-1-ABC.B004",
  "barcode": "B004",
  "location": "一层",
  "shelfNo": "0301",
  "currentLocation": "一层",
  "currentShelfNo": "0301",
  "operatorPerson": null,
  "operatorTime": "2021-03-26 10:20:58.6494"
}

renyh avatar Mar 26 '21 02:03 renyh

SIP2 上传数据接口测试:

环境准备:

参数配置:

  1. dp2ssl连接sip2 服务器,用于盘点图书。
  2. inventory.xml 中参数<sip localStore="uid,inventory"/>配置成半功能状态。
  3. inventory.xml文件在根目录()下新增 <uploadInterface protocol='' baseUrl='http://localhost:5000/'/>字段,(测试服务器地址为http://xxx)目前我们只需测试上传的数据。所以用”http://localhost:5000/“本地服务器。
  4. 计算机电脑安装vs2019版本。下载 https://github.com/renyh/InventoryAPI 链接中地址

依据层架标要求将层架标规则配置为:

 <barcodeValidation>
    <validator >
     <shelf>
        <range value='00000001A-99999999A'></range>
        <range value='00000001B-99999999B'></range>
      </shelf>
    </validator>
  </barcodeValidation>

以下是层架标案例,测试的时候观察盘点右侧层架标时与左侧信息是否一致

wuayang001 avatar Apr 02 '21 03:04 wuayang001

测试目录:

  1. 仅勾选【更新当前位置】查看上传信息是否正确
  2. 仅勾选【更新永久馆藏地】查看上传信息是否正确
  3. 同时勾选【更新当前位置】、【更新当前位置】查看上传信息是否正确
  4. 盘点途中停掉服务观察报错信息是否正常
  5. 配置上传错误的URL情况
  6. 回归测试以前的盘点功能

  1. 连接测试接口测试情况(测试同时发送、接收的情况)

wuayang001 avatar Apr 02 '21 04:04 wuayang001

测试用例1

测试目的:

仅勾选【更新当前位置】查看上传信息是否正确

测试步骤:

  1. 打开vs2019,进入打开“InventoryAPI-master”文件,点击运行。
  2. 打开内务进入RFID工具窗,创建“10010101A”层架标。
  3. 打开dp2ssl盘点模块,连接sip2协议,配置第三方URL参数,设备连接小白读写器。(参考上面:准备环境)随后重启dp2ssl
  4. 点击绿色快进入盘点操作界面。
  5. 点击最左侧【开始盘点】按钮。在跳出的开始盘点准备对话框中单选【更新当前位置】,馆藏地选择【保存本库】。
  6. 放入层架标到读写器上面,语音播报:切换层架标10010101A。同时界面显示出 层架标信息
  7. 然后放入两本馆内图书到读写器上面(B003,B004),界面显示图书信息。当前位置为:保存本库
  8. 锁定“InventoryAPI-master”中“InventoryAPI-master\bin\Debug\net5.0\log”找到今天的日志。观察新增信息:
  "title": "",
  "batchNo": "inventory_2021/4/2",
  "uii": "CN-320506-C-XZXX.B004",
  "barcode": "B004",
  "location": null,
  "shelfNo": null,
  "currentLocation": "保存本库",
  "currentShelfNo": "10010101A",
  "operatorPerson": null,
  "operatorTime": "2021-04-02 13:50:38.4565"
}

上传信息与盘点信息一致,符合预期。

测试结果:

20210402-wy:dp2ssl版本:1.8.12.0 测试结果符合预期


用户对接获取到的信息

  1. 在浏览器上搜索网址:“http://xxx/api/BookInfo?barcode=B004”
  2. 观察到界面显示:“保存本库/03区书墙01列01层” 与用户的层架标对应。符合预期

wuayang001 avatar Apr 02 '21 04:04 wuayang001

测试用例2

测试目的:

仅勾选【更新永久位置】查看上传信息是否正确

测试步骤:

  1. 打开vs2019,进入打开“InventoryAPI-master”文件,点击运行。
  2. 打开内务进入RFID工具窗,创建“10010101A”层架标。
  3. 打开dp2ssl盘点模块,连接sip2协议,配置第三方URL参数,设备连接小白读写器。(参考上面:准备环境)随后重启dp2ssl
  4. 点击绿色快进入盘点操作界面。
  5. 点击最左侧【开始盘点】按钮。在跳出的开始盘点准备对话框中单选【更新永久位置】,馆藏地选择【保存本库】。
  6. 放入层架标到读写器上面,语音播报:切换层架标10010101A。同时界面显示出 层架标信息
  7. 然后放入两本馆内图书到读写器上面(B003,B004),界面显示图书信息。当前位置为:保存本库
  8. 锁定“InventoryAPI-master”中“InventoryAPI-master\bin\Debug\net5.0\log”找到今天的日志。观察新增信息:
 2021-04-02 14:38:58.450 +08:00 [INF] action=update,data={
  "title": "",
  "batchNo": "inventory_2021/4/2",
  "uii": "CN-320506-C-XZXX.B004",
  "barcode": "B004",
  "location": "保存本库",
  "shelfNo": "10010101A",
  "currentLocation": null,
  "currentShelfNo": null,
  "operatorPerson": null,
  "operatorTime": "2021-04-02 14:38:58.0530"
}
共上传1条记录

上传信息与盘点信息一致,符合预期。

测试结果:

20210402-wy:dp2ssl版本:1.8.12.0 测试结果符合预期

wuayang001 avatar Apr 02 '21 07:04 wuayang001

测试用例3

测试目的:

同时勾选【更新当前位置】、【更新永久位置】查看上传信息是否正确

测试步骤:

  1. 打开vs2019,进入打开“InventoryAPI-master”文件,点击运行。
  2. 打开内务进入RFID工具窗,创建“10010101A”层架标。
  3. 打开dp2ssl盘点模块,连接sip2协议,配置第三方URL参数,设备连接小白读写器。(参考上面:准备环境)随后重启dp2ssl
  4. 点击绿色快进入盘点操作界面。
  5. 点击最左侧【开始盘点】按钮。在跳出的开始盘点准备对话框中单选【更新当前位置】、【更新永久位置】,馆藏地选择【外借库】。
  6. 放入层架标到读写器上面,语音播报:切换层架标10010101A。同时界面显示出 层架标信息
  7. 然后放入两本馆内图书到读写器上面(B003,B004),界面显示图书信息。当前位置为:保存本库
  8. 锁定“InventoryAPI-master”中“InventoryAPI-master\bin\Debug\net5.0\log”找到今天的日志。观察新增信息:
2021-04-02 15:22:06.896 +08:00 [INF] action=update,data={
  "title": "",
  "batchNo": "inventory_2021/4/2",
  "uii": "CN-320506-C-XZXX.B004",
  "barcode": "B004",
  "location": "外借库",
  "shelfNo": "10010101A",
  "currentLocation": "外借库",
  "currentShelfNo": "10010101A",
  "operatorPerson": null,
  "operatorTime": "2021-04-02 15:22:06.5021"
}
共上传1条记录

上传信息与盘点信息一致,符合预期。

测试结果:

20210402-wy:dp2ssl版本:1.8.12.0 测试结果符合预期

wuayang001 avatar Apr 02 '21 07:04 wuayang001

测试用例 4

测试目的:

盘点途中停掉服务观察报错信息是否正常

测试步骤:

  1. 打开vs2019,进入打开“InventoryAPI-master”文件,点击运行。
  2. 打开内务进入RFID工具窗,创建“10010101A”层架标。
  3. 打开dp2ssl盘点模块,连接sip2协议,配置第三方URL参数,设备连接读写器。(参考上面:准备环境)随后重启dp2ssl
  4. 点击绿色快进入盘点操作界面。
  5. 点击最左侧【开始盘点】按钮。在跳出的开始盘点准备对话框中单选【更新当前位置】、【更新永久位置】,馆藏地选择【外借库】。
  6. 放入层架标到读写器上面,语音播报:切换层架标10010101A。同时界面显示出 层架标信息
  7. 然后放入两本馆内图书到读写器上面(B003,B004),界面显示图书册条码号。当前位置为:保存本库
  8. 此时关闭vs2019服务。
  9. 继续放图书到读写器上面(B005)界面停顿了一下,显示错误信息:”RequestInventoryUploadAsync() 出现异常:发送请求时出错。“同时语音提示:PII(...)上传数据失败。 符合预期
  10. 锁定“InventoryAPI-master”中“InventoryAPI-master\bin\Debug\net5.0\log”找到今天的日志,观察到新增两条B003、B004的册信息记录,B005的没有保存成功。符合预期

测试结果:

20210402-wy:dp2ssl版本:1.8.12.0 当服务器断开时,数据无法上传。符合预期

wuayang001 avatar Apr 02 '21 08:04 wuayang001

测试用例5

测试目的:

配置上传错误的URL情况

测试步骤:

  1. 打开vs2019,进入打开“InventoryAPI-master”文件,点击运行。
  2. 打开内务进入RFID工具窗,创建“10010101A”层架标。
  3. 打开dp2ssl盘点模块,连接sip2协议,配置错误第三方URL参数:http://39.98.57.213:005
  4. 设备连接小白读写器。随后重启dp2ssl。点击绿色快进入盘点操作界面。
  5. 点击最左侧【开始盘点】按钮。在跳出的开始盘点准备对话框中单选【更新当前位置】、【更新永久位置】,馆藏地选择【外借库】。
  6. 放入层架标到读写器上面,语音播报:切换层架标10010101A。同时界面显示出 层架标信息
  7. 然后放入两本馆内图书到读写器上面(B003,B004),界面显示图书的册条码号。当前位置为:保存本库
  8. 随后,语音提示:“NKX0006196上传请求出错”,同时新增错误信息:“RequestInventoryUploadAsync() 出现异常:发送请求时出错。”
  9. 打开InventoryAPI-master\bin\Debug\net5.0\log日志中发现没有新增信息,表示发送不成功。符合预期

测试结果:

20210402-wy:dp2ssl版本:1.8.12.0 测试结果符合预期

wuayang001 avatar Apr 02 '21 11:04 wuayang001

与第三方sip2接口对接情况

环境准备:

参数配置:

  1. dp2ssl连接sip2 服务器,用于盘点图书。
  2. inventory.xml 中参数<sip localStore="uid,inventory"/>配置成半功能状态。
  3. inventory.xml文件在根目录下新增 <uploadInterface protocol='' baseUrl='http://39.98.57.213:89'/>字段。

以下是层架标案例,测试的时候观察盘点右侧层架标时与左侧信息是否一致

测试目录:

7.1 仅勾选【更新当前位置】查看信息是否正确 7.2 仅勾选【更新永久馆藏地】查看信息是否正确 7.3 同时勾选【更新当前位置】、【更新当前位置】查看信息是否正确

wuayang001 avatar Apr 08 '21 02:04 wuayang001

测试用例 7.1

测试目的:

仅勾选【更新当前位置】查看信息是否正确

测试步骤:

  1. 在dp2ssl用户文件夹中配置”http://39.98.57.213:89“接口
  2. 打开dp2ssl,点击绿色快”盘点“按钮,进入开始盘点菜单界面
  3. 点击左侧开始【盘点按钮】,跳出开始盘点设置对话框,仅勾选【更新当前位置】、馆藏地选择【外借库】。点击最下方【开始盘点】
  4. 放入层架标(DPB10010101B),界面显示出层架标信息。并且语音播报:切换层架标DPB10010101B
  5. 放入图书(998),界面显示出图书当前位置为:外借库:10010101B,随后软件”嘟“的一声。
  6. 在浏览器中搜索”http://39.98.57.213:89/api/BookInfo?barcode=998“
  7. 观察到界面显示:外借库/03区书墙01列01层
  8. 显示信息与上图表格中层架标对应。符合预期。

测试结果:

20210408-wy:dp2ssl版本:1.8.12.0 dp2library版本:3.50.7766.34217 dp2capo版本:1.35.7745.21241 仅仅勾选当前位置时,盘点结果可在网页中查询到,符合预期

wuayang001 avatar Apr 08 '21 03:04 wuayang001

测试用例 7.2

测试目的:

仅勾选【更新永久馆藏地】查看信息是否正确

测试步骤:

  1. 在dp2ssl用户文件夹中配置”http://39.98.57.213:89“接口
  2. 打开dp2ssl,点击绿色快”盘点“按钮,进入开始盘点菜单界面
  3. 点击左侧开始【盘点按钮】,跳出开始盘点设置对话框,仅勾选【更新永久馆藏地】、馆藏地选择【外借库】。点击最下方【开始盘点】
  4. 放入层架标(DPB10010101B),界面显示出层架标信息。并且语音播报:切换层架标DPB10010101B
  5. 放入图书(998),界面显示出图书当前位置为:外借库:10010101B,随后软件”嘟“的一声。
  6. 在浏览器中搜索”http://39.98.57.213:89/api/BookInfo?barcode=998“
  7. 观察到界面显示:外借库/03区书墙01列01层
  8. 上面显示信息为当前位置,因为当前位置数据没有更新,经之前测试为当前位置上传数据是”NULL“值,接收信息接口更新后可以显示原来的位置,符合预期

测试结果:

20210408-wy:dp2ssl版本:1.8.12.0 dp2library版本:3.50.7766.34217 dp2capo版本:1.35.7745.21241 测试结果符合预期

wuayang001 avatar Apr 08 '21 03:04 wuayang001

测试用例 7.3

测试目的:

同时勾选【更新当前位置】、【更新永久馆藏地】查看信息是否正确

测试步骤:

  1. 在dp2ssl用户文件夹中配置”http://39.98.57.213:89“接口
  2. 打开dp2ssl,点击绿色快”盘点“按钮,进入开始盘点菜单界面
  3. 点击左侧开始【盘点按钮】,跳出开始盘点设置对话框,同时勾选【更新当前位置】、【更新永久馆藏地】、馆藏地选择【保存本库】。点击最下方【开始盘点】
  4. 放入层架标(DPB10010101B),界面显示出层架标信息。并且语音播报:切换层架标DPB10010101B
  5. 放入图书(998),界面显示出图书当前位置为:外借库:10010101B,随后软件”嘟“的一声。
  6. 在浏览器中搜索”http://39.98.57.213:89/api/BookInfo?barcode=998“
  7. 观察到界面显示:保存本库/03区书墙01列01层
  8. 显示信息与上图表格中层架标对应。目前因为永久位置查询不到,所以永久位置无法测试 。

测试结果:

20210408-wy:dp2ssl版本:1.8.12.0 dp2library版本:3.50.7766.34217 dp2capo版本:1.35.7745.21241 当前位置传空值时,系统会自动找到原来的值,显示出来。永久位置目前无法测试 符合预期

wuayang001 avatar Apr 08 '21 03:04 wuayang001