1. 程式人生 > >RobotFramework自動化測試框架-MongoDBLibrary庫的使用

RobotFramework自動化測試框架-MongoDBLibrary庫的使用

筆者接著 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

RobotFramework自動化測試框架-MongoDBLibrary庫的使用

 

安裝完成後,在使用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庫的