盘点与Web API对接测试
前提:在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,不会调上传接口,符合预期。
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; }
}
注意事项
- 针对整体result成员,如果全部记录都处理成功,则result.value>=0。
- 针对整体result成员,如果一部分记录成功,一部分记录出错,则result.value=-1,并设置result.errorCode="partError"。
- 针对整体result成员,如果请求传来的items为null或者成员数量为0,则result.value=-1,并设置result.errorCode="parameterError"。
- 针对整体result成员,如果服务器自身有严重错误 ,导致没法任何处理记录。则result.value=-1,并设置result.errorCode="systemError"。
- 针对每条记录的result成员,如果本条记录处理成功,result.value>=0;如果处理失败,result.value=-1,result.errorInfo="失败原因";
- 如果部分记录成功,部分记录出错,返回的outputItems一定要包含所有出错的记录,并在出错的记录中设置result.value=-1和errorInfo。当然outputItems也可以含有成功的记录,但在成功的记录设置result.value>=0。
- 返回的outputItems中每条记录的data字段信息可以简化,只包含册条码就行。当然传完整信息也可以。
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"
}
(随时更新)
测试请求中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"
}
SIP2 上传数据接口测试:
环境准备:
参数配置:
- dp2ssl连接sip2 服务器,用于盘点图书。
- inventory.xml 中参数
<sip localStore="uid,inventory"/>配置成半功能状态。 - inventory.xml文件在根目录(
)下新增 <uploadInterface protocol='' baseUrl='http://localhost:5000/'/>字段,(测试服务器地址为http://xxx)目前我们只需测试上传的数据。所以用”http://localhost:5000/“本地服务器。 - 计算机电脑安装vs2019版本。下载 https://github.com/renyh/InventoryAPI 链接中地址
依据层架标要求将层架标规则配置为:
<barcodeValidation>
<validator >
<shelf>
<range value='00000001A-99999999A'></range>
<range value='00000001B-99999999B'></range>
</shelf>
</validator>
</barcodeValidation>
以下是层架标案例,测试的时候观察盘点右侧层架标时与左侧信息是否一致

测试目录:
- 仅勾选【更新当前位置】查看上传信息是否正确
- 仅勾选【更新永久馆藏地】查看上传信息是否正确
- 同时勾选【更新当前位置】、【更新当前位置】查看上传信息是否正确
- 盘点途中停掉服务观察报错信息是否正常
- 配置上传错误的URL情况
- 回归测试以前的盘点功能
- 连接测试接口测试情况(测试同时发送、接收的情况)
测试用例1
测试目的:
仅勾选【更新当前位置】查看上传信息是否正确
测试步骤:
- 打开vs2019,进入打开“InventoryAPI-master”文件,点击运行。
- 打开内务进入RFID工具窗,创建“10010101A”层架标。
- 打开dp2ssl盘点模块,连接sip2协议,配置第三方URL参数,设备连接小白读写器。(参考上面:准备环境)随后重启dp2ssl
- 点击绿色快进入盘点操作界面。
- 点击最左侧【开始盘点】按钮。在跳出的开始盘点准备对话框中单选【更新当前位置】,馆藏地选择【保存本库】。
- 放入层架标到读写器上面,语音播报:切换层架标10010101A。同时界面显示出 层架标信息
- 然后放入两本馆内图书到读写器上面(B003,B004),界面显示图书信息。当前位置为:保存本库
- 锁定“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 测试结果符合预期
用户对接获取到的信息
- 在浏览器上搜索网址:“http://xxx/api/BookInfo?barcode=B004”
- 观察到界面显示:“保存本库/03区书墙01列01层” 与用户的层架标对应。符合预期
测试用例2
测试目的:
仅勾选【更新永久位置】查看上传信息是否正确
测试步骤:
- 打开vs2019,进入打开“InventoryAPI-master”文件,点击运行。
- 打开内务进入RFID工具窗,创建“10010101A”层架标。
- 打开dp2ssl盘点模块,连接sip2协议,配置第三方URL参数,设备连接小白读写器。(参考上面:准备环境)随后重启dp2ssl
- 点击绿色快进入盘点操作界面。
- 点击最左侧【开始盘点】按钮。在跳出的开始盘点准备对话框中单选【更新永久位置】,馆藏地选择【保存本库】。
- 放入层架标到读写器上面,语音播报:切换层架标10010101A。同时界面显示出 层架标信息
- 然后放入两本馆内图书到读写器上面(B003,B004),界面显示图书信息。当前位置为:保存本库
- 锁定“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 测试结果符合预期
测试用例3
测试目的:
同时勾选【更新当前位置】、【更新永久位置】查看上传信息是否正确
测试步骤:
- 打开vs2019,进入打开“InventoryAPI-master”文件,点击运行。
- 打开内务进入RFID工具窗,创建“10010101A”层架标。
- 打开dp2ssl盘点模块,连接sip2协议,配置第三方URL参数,设备连接小白读写器。(参考上面:准备环境)随后重启dp2ssl
- 点击绿色快进入盘点操作界面。
- 点击最左侧【开始盘点】按钮。在跳出的开始盘点准备对话框中单选【更新当前位置】、【更新永久位置】,馆藏地选择【外借库】。
- 放入层架标到读写器上面,语音播报:切换层架标10010101A。同时界面显示出 层架标信息
- 然后放入两本馆内图书到读写器上面(B003,B004),界面显示图书信息。当前位置为:保存本库
- 锁定“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 测试结果符合预期
测试用例 4
测试目的:
盘点途中停掉服务观察报错信息是否正常
测试步骤:
- 打开vs2019,进入打开“InventoryAPI-master”文件,点击运行。
- 打开内务进入RFID工具窗,创建“10010101A”层架标。
- 打开dp2ssl盘点模块,连接sip2协议,配置第三方URL参数,设备连接读写器。(参考上面:准备环境)随后重启dp2ssl
- 点击绿色快进入盘点操作界面。
- 点击最左侧【开始盘点】按钮。在跳出的开始盘点准备对话框中单选【更新当前位置】、【更新永久位置】,馆藏地选择【外借库】。
- 放入层架标到读写器上面,语音播报:切换层架标10010101A。同时界面显示出 层架标信息
- 然后放入两本馆内图书到读写器上面(B003,B004),界面显示图书册条码号。当前位置为:保存本库
- 此时关闭vs2019服务。
- 继续放图书到读写器上面(B005)界面停顿了一下,显示错误信息:”RequestInventoryUploadAsync() 出现异常:发送请求时出错。“同时语音提示:PII(...)上传数据失败。 符合预期
- 锁定“InventoryAPI-master”中“InventoryAPI-master\bin\Debug\net5.0\log”找到今天的日志,观察到新增两条B003、B004的册信息记录,B005的没有保存成功。符合预期
测试结果:
20210402-wy:dp2ssl版本:1.8.12.0 当服务器断开时,数据无法上传。符合预期
测试用例5
测试目的:
配置上传错误的URL情况
测试步骤:
- 打开vs2019,进入打开“InventoryAPI-master”文件,点击运行。
- 打开内务进入RFID工具窗,创建“10010101A”层架标。
- 打开dp2ssl盘点模块,连接sip2协议,配置错误第三方URL参数:http://39.98.57.213:005
- 设备连接小白读写器。随后重启dp2ssl。点击绿色快进入盘点操作界面。
- 点击最左侧【开始盘点】按钮。在跳出的开始盘点准备对话框中单选【更新当前位置】、【更新永久位置】,馆藏地选择【外借库】。
- 放入层架标到读写器上面,语音播报:切换层架标10010101A。同时界面显示出 层架标信息
- 然后放入两本馆内图书到读写器上面(B003,B004),界面显示图书的册条码号。当前位置为:保存本库
- 随后,语音提示:“NKX0006196上传请求出错”,同时新增错误信息:“RequestInventoryUploadAsync() 出现异常:发送请求时出错。”
- 打开InventoryAPI-master\bin\Debug\net5.0\log日志中发现没有新增信息,表示发送不成功。符合预期
测试结果:
20210402-wy:dp2ssl版本:1.8.12.0 测试结果符合预期
与第三方sip2接口对接情况
环境准备:
参数配置:
- dp2ssl连接sip2 服务器,用于盘点图书。
- inventory.xml 中参数<sip localStore="uid,inventory"/>配置成半功能状态。
- inventory.xml文件在根目录下新增
<uploadInterface protocol='' baseUrl='http://39.98.57.213:89'/>字段。
以下是层架标案例,测试的时候观察盘点右侧层架标时与左侧信息是否一致

测试目录:
7.1 仅勾选【更新当前位置】查看信息是否正确 7.2 仅勾选【更新永久馆藏地】查看信息是否正确 7.3 同时勾选【更新当前位置】、【更新当前位置】查看信息是否正确
测试用例 7.1
测试目的:
仅勾选【更新当前位置】查看信息是否正确
测试步骤:
- 在dp2ssl用户文件夹中配置”http://39.98.57.213:89“接口
- 打开dp2ssl,点击绿色快”盘点“按钮,进入开始盘点菜单界面
- 点击左侧开始【盘点按钮】,跳出开始盘点设置对话框,仅勾选【更新当前位置】、馆藏地选择【外借库】。点击最下方【开始盘点】
- 放入层架标(DPB10010101B),界面显示出层架标信息。并且语音播报:切换层架标DPB10010101B
- 放入图书(998),界面显示出图书当前位置为:外借库:10010101B,随后软件”嘟“的一声。
- 在浏览器中搜索”http://39.98.57.213:89/api/BookInfo?barcode=998“
- 观察到界面显示:外借库/03区书墙01列01层
- 显示信息与上图表格中层架标对应。符合预期。
测试结果:
20210408-wy:dp2ssl版本:1.8.12.0 dp2library版本:3.50.7766.34217 dp2capo版本:1.35.7745.21241 仅仅勾选当前位置时,盘点结果可在网页中查询到,符合预期
测试用例 7.2
测试目的:
仅勾选【更新永久馆藏地】查看信息是否正确
测试步骤:
- 在dp2ssl用户文件夹中配置”http://39.98.57.213:89“接口
- 打开dp2ssl,点击绿色快”盘点“按钮,进入开始盘点菜单界面
- 点击左侧开始【盘点按钮】,跳出开始盘点设置对话框,仅勾选【更新永久馆藏地】、馆藏地选择【外借库】。点击最下方【开始盘点】
- 放入层架标(DPB10010101B),界面显示出层架标信息。并且语音播报:切换层架标DPB10010101B
- 放入图书(998),界面显示出图书当前位置为:外借库:10010101B,随后软件”嘟“的一声。
- 在浏览器中搜索”http://39.98.57.213:89/api/BookInfo?barcode=998“
- 观察到界面显示:外借库/03区书墙01列01层
- 上面显示信息为当前位置,因为当前位置数据没有更新,经之前测试为当前位置上传数据是”NULL“值,接收信息接口更新后可以显示原来的位置,符合预期
测试结果:
20210408-wy:dp2ssl版本:1.8.12.0 dp2library版本:3.50.7766.34217 dp2capo版本:1.35.7745.21241 测试结果符合预期
测试用例 7.3
测试目的:
同时勾选【更新当前位置】、【更新永久馆藏地】查看信息是否正确
测试步骤:
- 在dp2ssl用户文件夹中配置”http://39.98.57.213:89“接口
- 打开dp2ssl,点击绿色快”盘点“按钮,进入开始盘点菜单界面
- 点击左侧开始【盘点按钮】,跳出开始盘点设置对话框,同时勾选【更新当前位置】、【更新永久馆藏地】、馆藏地选择【保存本库】。点击最下方【开始盘点】
- 放入层架标(DPB10010101B),界面显示出层架标信息。并且语音播报:切换层架标DPB10010101B
- 放入图书(998),界面显示出图书当前位置为:外借库:10010101B,随后软件”嘟“的一声。
- 在浏览器中搜索”http://39.98.57.213:89/api/BookInfo?barcode=998“
- 观察到界面显示:保存本库/03区书墙01列01层
- 显示信息与上图表格中层架标对应。目前因为永久位置查询不到,所以永久位置无法测试 。
测试结果:
20210408-wy:dp2ssl版本:1.8.12.0 dp2library版本:3.50.7766.34217 dp2capo版本:1.35.7745.21241 当前位置传空值时,系统会自动找到原来的值,显示出来。永久位置目前无法测试 符合预期