笔者接着 RobotFramework自动化测试框架-DatabaseLibrary库的使用(对数据库的操作)

继续分享robotframework 对数据库中的MongoDB的详细操作。这是笔者第二篇关于robotframework 对数据库的操作的分享介绍。

MongoDB是非常常用的一个非关系型数据库,在RobotFramework中,也提供了对MongoDB数据库测试操作的支持。我们可以通过在浏览器中访问github的网站地址

https://github.com/iPlantCollaborativeOpenSource/Robotframework-MongoDB-Library 即可以看到该库的相关安装说明和API介绍,如下图2-2-1所示。

 

 

图2-2-1

作者的原创文章,转载须注明出处。原创文章归作者所有,欢迎转载,但是保留版权。对于转载了博主的原创文章,不标注出处的,作者将依法追究版权,请尊重作者的成果,转载请注明链接:https://www.cnblogs.com/laoqing/p/11509042.html

 

安装完成后,在使用MongoDBLibrary库时,需要在测试套件中,预先导入该库,才可以在用例中使用MongoDBLibrary库中的关键字,如下图2-2-2所示。

 

 

图2-2-2

2.1.1        MongoDB数据库的连接和断开

 

在MongoDB Libray中通过Connect To Mongodb 关键字来连接到MongoDB数据库,该关键字接收[ dbHost=localhost | dbPort=27017 | dbMaxPoolSize=10 | dbNetworkTimeout=None | dbDocClass= | dbTZAware=False ]

这六个参数,dbHost参数指的是MongoDB数据库的IP地址,dbPort参数指的是MongoDB数据库的端口号,不输入时默认为27017,dbMaxPoolSize参数指的是数据库连接的最大线程池大小,不输入时默认大小为10。

示例1:我们连接到本地电脑上一个已经启动好的MongoDB数据库上,这里预先启动了一个3.2版本的MongoDB数据库,如下图2-2-3所示。

 

 

图2-2-3

在RIDE中,使用Connect To Mongodb来连接刚刚启动好的数据库,如下图2-2-4所示。

 

 

图2-2-4

运行结果如下:

Starting test: RobotFrameworkTest1.TestSute13.TestCase001

20180825 17:47:32.470 :  INFO :

| Connect To MondoDB | dbHost | dbPort | dbMaxPoolSize | dbNetworktimeout | dbDocClass | dbTZAware |

| Connect To MondoDB | 127.0.0.1 | 27017 | 2 | None | <type \’dict\’> | False |

Ending test:   RobotFrameworkTest1.TestSute13.TestCase001

我们执行完成后,然后我看下MongoDB服务端的日志,从如下的MongoDB服务端的日志可以看到,已经成功和MongoDB数据库建立了连接。

2018-08-25T17:45:30.134+0800 I CONTROL  [main] Hotfix KB2731284 or later update is not installed, will zero-out data files

2018-08-25T17:45:30.138+0800 I CONTROL  [initandlisten] MongoDB starting : pid=8964 port=27017 dbpath=D:\MongoDB\Server\3.2\data 64-bit host=yongqing-PC

2018-08-25T17:45:30.138+0800 I CONTROL  [initandlisten] targetMinOS: Windows Vista/Windows Server 2008

2018-08-25T17:45:30.139+0800 I CONTROL  [initandlisten] db version v3.2.4

2018-08-25T17:45:30.139+0800 I CONTROL  [initandlisten] git version: e2ee9ffcf9f5a94fad76802e28cc978718bb7a30

2018-08-25T17:45:30.140+0800 I CONTROL  [initandlisten] allocator: tcmalloc

2018-08-25T17:45:30.140+0800 I CONTROL  [initandlisten] modules: none

2018-08-25T17:45:30.140+0800 I CONTROL  [initandlisten] build environment:

2018-08-25T17:45:30.161+0800 I CONTROL  [initandlisten]     distarch: x86_64

2018-08-25T17:45:30.162+0800 I CONTROL  [initandlisten]     target_arch: x86_64

2018-08-25T17:45:30.162+0800 I CONTROL  [initandlisten] options: { storage: { dbPath: “D:\MongoDB\Server\3.2\data” }, systemLog: { destination: “file”, path: “D:\MongoDB\Server\3.2\logs\log.log” } }

2018-08-25T17:45:30.164+0800 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=4G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),

2018-08-25T17:45:31.202+0800 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory \’D:/MongoDB/Server/3.2/data/diagnostic.data\’

2018-08-25T17:45:31.202+0800 I NETWORK  [HostnameCanonicalizationWorker] Starting hostname canonicalization worker

2018-08-25T17:45:31.359+0800 I NETWORK  [initandlisten] waiting for connections on port 27017

2018-08-25T17:46:53.205+0800 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:2621 #1 (1 connection now open)

2018-08-25T17:46:53.730+0800 I NETWORK  [conn1] end connection 127.0.0.1:2621 (0 connections now open)

2018-08-25T17:47:32.471+0800 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:2650 #2 (1 connection now open)

2018-08-25T17:47:33.031+0800 I NETWORK  [conn2] end connection 127.0.0.1:2650 (0 connections now open)

在MongoDB Libra中通过Disconnect From Mongodb 关键字来断开已经建立的MongoDB数据库连接。

示例2:通过Disconnect From Mongodb关键字断开MongoDB的数据库连接,如下图2-2-5所示。

 

 

图2-2-5

运行结果如下:

Starting test: RobotFrameworkTest1.TestSute13.TestCase001

20180825 17:57:04.680 :  INFO :

| Connect To MondoDB | dbHost | dbPort | dbMaxPoolSize | dbNetworktimeout | dbDocClass | dbTZAware |

| Connect To MondoDB | 127.0.0.1 | 27017 | 2 | None | <type \’dict\’> | False |

20180825 17:57:04.684 :  INFO : | Disconnect From MongoDB |

Ending test:   RobotFrameworkTest1.TestSute13.TestCase001

从MongoDB的日志可以看到,在执行Disconnect From Mongodb关键字操作后,数据库服务端日志中已经显示数据库连接已经终止。

[conn3] end connection 127.0.0.1:2945 (0 connections now open)

2.1.2        Get Mongodb Databases和Get Mongodb Collections

在MongoDB Libray中通过Get Mongodb Databases关键字来获取当前MongoDB下的所有在用的数据库。

示例1:我们通过Get Mongodb Databases关键字来获取我们上面自己启动的MongoDB下的所有数据库,如下图2-2-6所示。

 

图2-2-6

运行结果如下:

Starting test: RobotFrameworkTest1.TestSute13.TestCase003

20180825 21:55:34.867 :  INFO :

| Connect To MondoDB | dbHost | dbPort | dbMaxPoolSize | dbNetworktimeout | dbDocClass | dbTZAware |

| Connect To MondoDB | 127.0.0.1 | 27017 | 2 | None | <type \’dict\’> | False |

20180825 21:55:34.873 :  INFO : | @{allDBs} | Get Mongodb Databases |

20180825 21:55:34.873 :  INFO : @{DBs} = [ local ]

20180825 21:55:34.875 :  INFO : local

20180825 21:55:34.877 :  INFO : | Disconnect From MongoDB |

Ending test:   RobotFrameworkTest1.TestSute13.TestCase003

从运行结果可以看到只获取到了一个名叫local的数据库,我们通过客户端连接到MongoDB服务端,然后执行show databases命令,可以看到得到的结果和我们通过 Get Mongodb Databases关键字来获取到的数据库信

息是一致的,如下图2-2-7所示。

 

 

图2-2-7

通过Get Mongodb Collections关键字可以获取到指定MongoDB数据库下的所有Collection,该关键字接收[ dbName ]一个参数。

示例2:我们通过Get Mongodb Collections关键字来获取到local库下的所有Collection,如下图2-2-8所示。

 

 

图2-2-8

运行结果如下:

Starting test: RobotFrameworkTest1.TestSute13.TestCase002

20180825 22:03:31.189 :  INFO :

| Connect To MondoDB | dbHost | dbPort | dbMaxPoolSize | dbNetworktimeout | dbDocClass | dbTZAware |

| Connect To MondoDB | 127.0.0.1 | 27017 | 2 | None | <type \’dict\’> | False |

20180825 22:03:31.197 :  INFO : | @{allDBs} | Get Mongodb Databases |

20180825 22:03:31.198 :  INFO : @{DBs} = [ local ]

20180825 22:03:31.200 :  INFO : local

20180825 22:03:31.205 :  INFO : | @{allCollections} | Get MongoDB Collections | local |

20180825 22:03:31.206 :  INFO : @{allCollections} = [ startup_log ]

20180825 22:03:31.208 :  INFO : startup_log

20180825 22:03:31.210 :  INFO : | Disconnect From MongoDB |

Ending test:   RobotFrameworkTest1.TestSute13.TestCase002

从运行结果可以看到,获取到了local库下的Collection名叫startup_log,然后我们通过客户端连接到服务端后,通过客户端show collections命令来获取一下Collection,如下图所示,我们可以看到获取到的Collection是完

全一致的,如下图2-2-9所示。

 

 

图2-2-9

2.1.3      Save Mongodb Records

Save MongoDB Records关键字用来向指定的Collection中保存插入的记录,该关键字接收[ dbName | dbCollName | recordJSON ]这三个参数。

示例:我们向startup_log这个Collection中插入一条记录,如下图2-2-10所示。

 

 

图2-2-10

运行结果如下:

Starting test: RobotFrameworkTest1.TestSute13.TestCase004

20180825 22:16:34.333 :  INFO :

| Connect To MondoDB | dbHost | dbPort | dbMaxPoolSize | dbNetworktimeout | dbDocClass | dbTZAware |

| Connect To MondoDB | 127.0.0.1 | 27017 | 2 | None | <type \’dict\’> | False |

20180825 22:16:34.344 :  INFO : | ${allResults} | Save MongoDB Records | local | startup_log | {u\’book\’: u\’RobotFramework\’, \’_id\’: ObjectId(\’5b8164c2685b132ec4739503\’)} |

20180825 22:16:34.347 :  INFO : | Disconnect From MongoDB |

Ending test:   RobotFrameworkTest1.TestSute13.TestCase004

执行完成后,我们通过MongoDB客户端连接到服务端,执行db.startup_log.find()命令来查看startup_log这个Collection下的记录,如下图所示,可以看到{“book”:”RobotFramework”}这条数据记录已经成功插入到了

MongoDB中,如下图2-2-11所示。

 

 

图2-2-11

2.1.4        Retrieve All Mongodb Records

Retrieve All Mongodb Records关键字用来获取指定Collection下的所有数据记录,该关键字接收[ dbName | dbCollName | returnDocuments=False ]这三个参数。

示例:我们通过Retrieve All Mongodb Records关键字来获取startup_log下的数据记录,如下图2-2-12所示。

 

 

图2-2-12

运行结果如下:

Starting test: RobotFrameworkTest1.TestSute13.TestCase005

20180825 22:38:05.197 :  INFO :

| Connect To MondoDB | dbHost | dbPort | dbMaxPoolSize | dbNetworktimeout | dbDocClass | dbTZAware |

| Connect To MondoDB | 127.0.0.1 | 27017 | 2 | None | <type \’dict\’> | False |

20180825 22:38:05.213 :  INFO : ${allResults} = [{u\’hostname\’: u\’yongqing-PC\’, u\’pid\’: 8964L, u\’startTimeLocal\’: u\’Sat Aug 25 17:45:31.203\’, u\’cmdLine\’: {u\’storage\’: {u\’dbPath\’: u\’D:\\MongoDB\\Server\\3.2\\data\’}, u\’systemLog\’: {u\’path\’: u\’D:\\Mong…

20180825 22:38:05.215 :  INFO : [{u\’hostname\’: u\’yongqing-PC\’, u\’pid\’: 8964L, u\’startTimeLocal\’: u\’Sat Aug 25 17:45:31.203\’, u\’cmdLine\’: {u\’storage\’: {u\’dbPath\’: u\’D:\\MongoDB\\Server\\3.2\\data\’}, u\’systemLog\’: {u\’path\’: u\’D:\\MongoDB\\Server\\3.2\\logs\\log.log\’, u\’destination\’: u\’file\’}}, u\’startTime\’: datetime.datetime(2018, 8, 25, 9, 45, 31), u\’_id\’: u\’yongqing-PC-1535190331203\’, u\’buildinfo\’: {u\’storageEngines\’: [u\’devnull\’, u\’ephemeralForTest\’, u\’mmapv1\’, u\’wiredTiger\’], u\’maxBsonObjectSize\’: 16777216, u\’bits\’: 64, u\’sysInfo\’: u\’deprecated\’, u\’modules\’: [], u\’openssl\’: {u\’compiled\’: u\’disabled\’, u\’running\’: u\’disabled\’}, u\’javascriptEngine\’: u\’mozjs\’, u\’version\’: u\’3.2.4\’, u\’gitVersion\’: u\’e2ee9ffcf9f5a94fad76802e28cc978718bb7a30\’, u\’versionArray\’: [3, 2, 4, 0], u\’debug\’: False, u\’buildEnvironment\’: {u\’cxxflags\’: u\’/TP\’, u\’cc\’: u\’cl: Microsoft (R) C/C++ Optimizing Compiler Version 18.00.31101 for x64\’, u\’linkflags\’: u\’/nologo /DEBUG /INCREMENTAL:NO /LARGEADDRESSAWARE /OPT:REF\’, u\’distarch\’: u\’x86_64\’, u\’cxx\’: u\’cl: Microsoft (R) C/C++ Optimizing Compiler Version 18.00.31101 for x64\’, u\’ccflags\’: u\’/nologo /EHsc /W3 /wd4355 /wd4800 /wd4267 /wd4244 /wd4290 /wd4068 /wd4351 /we4013 /we4099 /we4930 /Z7 /errorReport:none /MT /O2 /Oy- /Gw /Gy /Zc:inline\’, u\’target_arch\’: u\’x86_64\’, u\’distmod\’: u\’\’, u\’target_os\’: u\’windows\’}, u\’targetMinOS\’: u\’Windows Vista/Windows Server 2008\’, u\’allocator\’: u\’tcmalloc\’}}, {u\’_id\’: ObjectId(\’5b8164c2685b132ec4739503\’), u\’book\’: u\’RobotFramework\’}]

20180825 22:38:05.217 :  INFO : | Disconnect From MongoDB |

Ending test:   RobotFrameworkTest1.TestSute13.TestCase005

如下图2-2-13所示,运行结果与我们在客户端通过db.startup_log.find()命令行获取到结果是一致的。

 

 

 

图2-2-13

2.1.5       Update Many Mongodb Records

Update Many Mongodb Records关键字用来更新Collection中的数据记录,该关键字接收[ dbName | dbCollName | queryJSON | updateJSON | upsert=False ]这五个参数。

示例1:我们更新上面示例中插入的这条{“book”:”RobotFramework”}记录为{“book”:”robotFramework”},即将RobotFramework变为robotFramework,如下图2-2-14所示。

 

 

图2-2-14

运行结果如下:

Starting test: RobotFrameworkTest1.TestSute13.TestCase006

20180825 23:05:53.692 :  INFO :

| Connect To MondoDB | dbHost | dbPort | dbMaxPoolSize | dbNetworktimeout | dbDocClass | dbTZAware |

| Connect To MondoDB | 127.0.0.1 | 27017 | 2 | None | <type \’dict\’> | False |

20180825 23:05:53.700 :  INFO : ${newJson} = {“$set”: {“book”:”robotFramework”}}

20180825 23:05:53.708 :  INFO :

Matched: 1 documents

| ${allResults} | Update Many MongoDB Records | local | startup_log | {u\’book\’: u\’RobotFramework\’} | {u\’$set\’: {u\’book\’: u\’robotFramework\’}} |

20180825 23:05:53.710 :  INFO : | Disconnect From MongoDB |

Ending test:   RobotFrameworkTest1.TestSute13.TestCase006

更新完成后,我们通过客户端的db.startup_log.find()命令行来进行重新查询,如下图2-2-15所示,从查询的结果可以看到指定的记录已经更新完成了。

 

 

图2-2-15

2.1.6        Remove Mongodb Records

Remove Mongodb Records关键字用来删除指定Collection中的数据记录,该关键字接收[ dbName | dbCollName | recordJSON ]这三个参数。

示例:我们重新创建一个capped属性为false的Collection,因为之前的Collection的capped属性为true,会导致数据记录无法被删除,客户端创建一个Collection的命令为db.createCollection(“RobotFramework”,{capped :

false}),如下图2-2-16所示新的名叫RobotFramework的Collection的已经创建完成。

 

图2-2-16

如下图2-2-17所示,创建完成后,我们使用Remove Mongodb Records关键字来删除{“book”:”robotFramework”}这条记录,如下图2-2-18所示。

 

 

图2-2-17

 

 

图2-2-18

运行结果如下:

Starting test: RobotFrameworkTest1.TestSute13.TestCase007

20180826 09:40:05.945 :  INFO :

| Connect To MondoDB | dbHost | dbPort | dbMaxPoolSize | dbNetworktimeout | dbDocClass | dbTZAware |

| Connect To MondoDB | 127.0.0.1 | 27017 | 2 | None | <type \’dict\’> | False |

20180826 09:40:05.947 :  INFO : ${Json} = {“book”:”RobotFramework”}

20180826 09:40:05.970 :  INFO : | ${allResults} | Remove MongoDB Records | local | RobotFramework | {u\’book\’: u\’RobotFramework\’} |

20180826 09:40:05.972 :  INFO : | Disconnect From MongoDB |

Ending test:   RobotFrameworkTest1.TestSute13.TestCase007

执行完成后,我们在客户端执行db.RobotFramework.find()进行查询时,如下图2-2-19所示,从查询的结果可以看到{“book”:”robotFramework”}这条记录已经被删除了

 

 

 

 

图2-2-19

2.1.7       MongoDB Libray库的其它关键字介绍

下表2-2-1中介绍了MongoDBLibrary库中其它关键字的使用示例

关键字

使用描述

Drop Mongodb Database

该关键字用来删除指定的MongoDB数据库,接收[ dbDelName ]一个参数,示例:

Drop Mongodb Database

Local

 

Drop Mongodb Collection

该关键字用来删除指定的Collection,接收[ dbName | dbCollName ]两个参数,示例:

Drop Mongodb Collection

local

RobotFramework

 

Get Mongodb Collection Count

该关键字用来获取指定Collection下的数据记录总数,接收[ dbName | dbCollName ]两个参数,示例:

${counts}

Get Mongodb Collection Count

local

RobotFramework

log

${counts}

 

 

 

Retrieve And Update One Mongodb Record

该关键字用来获取并且更新指定的数据记录,关键字接收[ dbName | dbCollName | queryJSON | updateJSON | returnBeforeDocument=False ]这五个参数,示例:

${queryJson}

Set Variable

{“book”:”RobotFramework”}

 

 

${newJson}

Set Variable

{“$set”: {“book”:”robotFramework”}}

 

 

Retrieve and Update One Mongodb Record

local

RobotFramework

${queryJson}

${newJson}

 

Retrieve Mongodb Records With Desired Fields

该关键字用来从Collection中根据指定的字段查询出对应的满足要求的数据记录,接收[ dbName | dbCollName | recordJSON | fields | return__id=True | returnDocuments=False ]六个参数,示例:

${result}

Retrieve Mongodb Records With Desired Fields

local

RobotFramework

{}

book

log

${result}

 

 

 

 

 

Retrieve Some Mongodb Records

该关键字用来从Collection中查询出根据指定json匹配到的数据记录,接收

[ dbName | dbCollName | recordJSON | returnDocuments=False ]这四个参数,示例:

${result}

Retrieve Some Mongodb Records

local

RobotFramework

{“book”:”robotFramework”}

log

${result}

 

 

 

 

表2-2-1

 

 

 更多更具体和详细的精彩,敬请关注作者新书:


Robot Framework自动化测试框架核心指南京东官方购买

Robot Framework自动化测试框架核心指南电子版试读

Robot Framework自动化测试框架核心指南天猫官方旗舰店购买

Robot Framework自动化测试框架核心指南当当网购买

Robot Framework自动化测试框架核心指南 作者签名版本购买

相关博文汇总:

RobotFramework下的http接口自动化Create Http Context关键字的使用

 

RobotFramework下的http接口自动化Get关键字的使用

RobotFramework下的http接口自动化post关键字的使用

如何创建一个自动化测试项目

RobotFramework下的http接口自动化Get Response Body关键字的使用

RobotFramework下的http接口自动化Get Response Status 关键字的使用

RobotFramework下的http接口自动化Get Response header 关键字的使用

RobotFramework下的http接口自动化Set Request Header 关键字的使用

RobotFramework下HttpLibrary库其它关键字

RobotFramework下的http接口自动化Set Request Body 关键字的使用

RobotFramework下的http接口自动化Follow Response关键字的使用

RobotFramework自动化测试框架的基础关键字(一)

RobotFramework自动化测试框架的基础关键字(二)

RobotFramework自动化测试框架的基础关键字(三)

RobotFramework自动化测试框架的基础关键字(四)

RobotFramework自动化测试框架的基础关键字(五)

RobotFramework自动化测试框架-移动手机自动化测试AppiumLibrary介绍

RobotFramework自动化测试框架-移动手机自动化测试Open Application关键字的使用

RobotFramework自动化测试框架-常用断言关键字

RobotFramework自动化测试框架-移动手机自动化测试AppiumLibrary库其它的常见自动化关键字

RobotFramework自动化测试框架-移动手机自动化测试Input Text和Click Button关键字的使用

RobotFramework自动化测试框架-移动手机自动化测试Clear Text关键字的使用

RobotFramework自动化测试框架-移动手机自动化测试Click Element关键字的使用

RobotFramework自动化测试框架-移动手机自动化测试Click A Point关键字的使用

RobotFramework自动化测试框架-移动手机自动化测试Click Element At Coordinates关键字的使用

RobotFramework自动化测试框架-移动手机自动化测试Get Element Location关键字的使用

RobotFramework自动化测试框架-移动手机自动化测试Get Network Connection Status和Set Network Connection Status关键字的使用

RobotFramework自动化测试框架-移动手机自动化测试Element Attribute Should Match关键字的使用

RobotFramework自动化测试框架-DatabaseLibrary库的使用(对数据库的操作)

RobotFramework自动化测试框架-使用Python编写自定义的RobotFramework Lib

RobotFramework自动化测试框架-Selenium Web自动化(-)-Open Browser和Close Browser

RobotFramework自动化测试框架-MongoDBLibrary库的使用

版权声明:本文为laoqing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/laoqing/p/11509042.html