如果您想为整个测试套件 建立一个gmongo 连接,然后在整个测试套件 之后在拆卸操作中关闭它strong> 然后被执行,我们怎么能那样做呢?
目前我正在做的是,我正在为特定的测试步骤 创建一个连接,然后在执行该测试步骤 之后,我使用代码 mongoClient.close()
但现在有一个要求,我需要在 test suite 开始执行之前创建连接,在 内的整个 test suite 使用相同的连接测试用例/测试步骤,然后在整个测试套件 执行完毕后关闭连接。
谁能告诉我如何使用 Ready!API 执行此操作?
我可能听起来有些迟钝,因为我是 Ready API 的新手,所以请多多包涵 这是我用来创建到 mongo 的连接的代码
def dbUser = context.expand( '${#Project#MongoUser}' )
def dbPassword = context.expand( '${#Project#MongoPassword}' )
def dbServer = context.expand( '${#Project#MongoServer}' )
def dbDatabase = context.expand( '${#Project#MongoDatabase}' )
def credentials = MongoCredential.createCredential(dbUser,dbDatabase,dbPassword as char[])
def mongoClient = new MongoClient( new ServerAddress(dbServer),Arrays.asList(credentials) )
context.gmongo = new GMongo( mongoClient )
context.mongoDB = context.gmongo.getDB(dbDatabase)
所以我一直在使用当前代码来创建连接。实际上,我希望将其作为三个测试套件。第一个测试套件将包含用于创建连接的 groovy 脚本,第二个测试套件将包含我所有的测试用例,第三个测试套件将包含 mongo 关闭连接脚本。
我们使用属性文件中的环境值。此处 MongoServer 具有建立连接的环境值
我无法理解@Rao,您如何在测试用例中调用 conn 变量。特别是 context.testCase.testSuite.db?.connection 部分。 “?”是什么意思?表示并请您告诉我在上述情况下,如何执行该过程
最佳答案
下面的脚本说明了如何在 ReadyAPI/SoapUI 中实现您正在寻找的内容。请注意,您已经知道如何在 Groovy 中连接到 gmongo,您需要按照内联注释在占位符中添加该逻辑。
下面是创建数据库连接的测试套件级别设置脚本。
class DatabaseDetails {
def server
def user
def password
def log
def getConnection() {
log.info 'connection created'
//Write logic to create connection
}
def closeConnection() {
log.info 'Closing connection'
//Write logic to close connection
}
}
//Change server, user, password values according to your environment
def db = [ server:'localhost', user:'dbuser', password: 'dbuserpasswd', log: log] as DatabaseDetails
if (!db.connection) {
db.connection
testSuite.metaClass.db = db
}
下面是测试套件级别的TearDown Script 来关闭数据库连接。由于这是在拆卸脚本中,一旦测试套件执行完成,连接就会自动关闭。
testSuite.db?.closeConnection()
现在,不需要再一次又一次地创建数据库连接了。
您只需要在 Groovy Script 测试步骤中使用以下脚本来获取现有的数据库连接。
def conn = context.testCase.testSuite.db?.connection
使用 conn 变量,您应该能够执行查询。
注意: 由于数据库连接是在测试套件的 Setup Script 中完成的,如果您只是运行测试用例(即,测试套件未被调用或执行) ,您可能无法获得连接。在这种情况下,手动执行测试套件的 Setup Script。
编辑:根据 OP 对问题的编辑和他的代码片段,这里是更新的测试套件的设置脚本。这负责根据 OP 的编辑实现 getConnection() 和 closeConnection()。请为使用的 Mongo 类添加/编辑导入语句,因为我不太了解这些。
更新了测试套件的设置脚本
import com.gmongo.*
import com.mongodb.*
class DatabaseDetails {
def context
def log
def mongoClient
def mongoDB
def getConnection() {
log.info 'Creating connection.'
//Write logic to create connection
if (!mongoDB){
def credentials = MongoCredential.createCredential(
context.expand('${#Project#MongoUser}'),
context.expand('${#Project#MongoDatabase}'),
context.expand('${#Project#MongoPassword}') as char[])
mongoClient = new MongoClient( new ServerAddress(context.expand('${#Project#MongoServer}')),Arrays.asList(credentials) )
mongoDB = new GMongo( mongoClient ).getDB(context.expand('${#Project#MongoDatabase}'))
}
mongoDB
}
def closeConnection() {
log.info 'Closing connection'
//Write logic to close connection
mongoClient.close()
}
}
def db = [ context: context, log: log] as DatabaseDetails
if (!db.connection) {
db.connection
testSuite.metaClass.db = db
}
如前所述,要获得连接,请使用以下代码并对其进行解释。
context.testCase.testSuite.db?.connection
Groovy 具有称为 ExpandoMetaclass 的强大功能。 db 被注入(inject)到 testSuite 类中,db 是我们在 中创建和实例化的 。 DatabaseDetails 类的对象测试套件的设置脚本
并且 db 包含 getConnection() 即 db.getConnection() 也可以与 db.connection。这就是上述语句中 connection 可用的方式。
关于mongodb - 创建一个 mongo 连接并使其存活以在 Ready!API 中执行整个测试套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42993841/
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?