• 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:MongoDBServer3.2data 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:MongoDBServer3.2data" }, systemLog: { destination: "file", path: "D:MongoDBServer3.2logslog.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库的使用

  • 相关阅读:
    Jmeter(五十)
    实践理解mysql的联合索引
    ElasticSearch---查询es集群状态、分片、索引
    Java8 函数式接口
    Java8 CompletableFuture
    java8多线程的lambda
    java线程池异步
    InputStream输入流,传输数据不完整
    RestEasy上传文件的工具类
    ElasticSearch---es之Post Filter,聚合后过滤
  • 原文地址:https://www.cnblogs.com/laoqing/p/11509042.html
Copyright © 2020-2023  润新知