54. 如何在测试中触发服务器上运行的代理
2013-09-09 11:52
169 查看
Lotus Notes应用程序中的代理按照运行的场所可以分为两类,第一类在客户端上运行,第二类在应用程序所在的服务器上运行。测试代理时,前者可以很简单地通过操作、按钮或从Designer里的代理列表触发运行;后者则没有这样方便。具体地,在服务器上运行的代理又可以分为两类:一类,也是最主要的,是定时运行的;另一类则是由客户段代码调用在服务器上运行的(以下简称被调用的代理)。在测试中要触发这些在服务器上运行的代理,根据情况有几种方法可以选择:
1. 对于定时代理,最易想到的方法就是修改代理的时程设置,改为服务器当前时间的两三分钟后。这个方法比较费神麻烦,如果多测试几次,等待的时间也不少。而且测试完成后还要记得把时程设置恢复原样。
2. 对于被调用的代理,当然也可以和在正式运行时一样,用代码来触发运行。
3. 如果包含代理的数据库所在的服务器开启了HTTP服务,则一个很便捷的方法就是通过Web调用,比如:http://DominoServer/path/test.nsf/agReminder?OpenAgent
4. 写通用的代码来调用。既然在实际开发中,有些代理因为某种需要须在服务器上运行并由客户端上运行的代码调用,那么为了测试我们就可以写一段通用的代码来调用所有在服务器上运行的代理。这段代码可以置于一个工具数据库中,本身也以一个代理的形式被调用。运行后开发人员可以选择要测试的代理所在的数据库,然后程序从其中所有的代理里挑出可以在服务器上测试运行的那些,把它们的名称显示在一个列表里供开发人员选择,最后调用被选中的代理在服务器上运行。
运行工具代理
选择应用程序
选择要运行的代理
运行完成
下面就是调用代理运行的代码:
1. 对于定时代理,最易想到的方法就是修改代理的时程设置,改为服务器当前时间的两三分钟后。这个方法比较费神麻烦,如果多测试几次,等待的时间也不少。而且测试完成后还要记得把时程设置恢复原样。
2. 对于被调用的代理,当然也可以和在正式运行时一样,用代码来触发运行。
3. 如果包含代理的数据库所在的服务器开启了HTTP服务,则一个很便捷的方法就是通过Web调用,比如:http://DominoServer/path/test.nsf/agReminder?OpenAgent
4. 写通用的代码来调用。既然在实际开发中,有些代理因为某种需要须在服务器上运行并由客户端上运行的代码调用,那么为了测试我们就可以写一段通用的代码来调用所有在服务器上运行的代理。这段代码可以置于一个工具数据库中,本身也以一个代理的形式被调用。运行后开发人员可以选择要测试的代理所在的数据库,然后程序从其中所有的代理里挑出可以在服务器上测试运行的那些,把它们的名称显示在一个列表里供开发人员选择,最后调用被选中的代理在服务器上运行。
运行工具代理
选择应用程序
选择要运行的代理
运行完成
下面就是调用代理运行的代码:
Option Public Option Declare Use "Commons" Sub Initialize Call RunAgentOnServer() End Sub %REM Function RunAgentOnServer Description: Run a selected agent on the server containing the agent. %END REM 'Run a selected agent on the server containing the agent. Public Function RunAgentOnServer() On Error GoTo ErrHandler Dim s As New NotesSession Dim ws As New NotesUIWorkspace Dim dbinfo As Variant 'PROMPT_CHOOSEDATABASE=13 dbinfo=ws.Prompt(13, "Please select the database containing agents.", "Select Database") If IsEmpty(dbinfo) Then Exit Function Dim db As NotesDatabase Set db=s.GetDatabase(dbinfo(0), dbinfo(1)) If Not db.IsOpen Then Print "Database " & dbinfo(2) & " cannot be opened." Exit Function End If Dim agents() As String, i As Integer, agName As String i=0 ForAll ag In db.Agents Select Case ag.Target Case TARGET_ALL_DOCS_IN_VIEW, TARGET_SELECTED_DOCS, TARGET_UNREAD_DOCS_IN_VIEW Case Else ReDim Preserve agents(i) 'ag.Name: name | alias agName=ag.Name If ag.Trigger=TRIGGER_SCHEDULED Then agName="(Scheduled) | " & agName End If agents(i)=agName i=i+1 End Select End ForAll Dim sortedAgents As Variant sortedAgents=QuickSort(agents) Dim agentName As Variant agentName=ws.Prompt(PROMPT_OKCANCELLIST, "Select Agent", "Please select the agent to run on server.", "", sortedAgents) If IsEmpty(agentName) Then Exit Function 'Get the agent last alias agentName=Split(agentName, "|") agentName=agentName(UBound(agentName)) agentName=Trim(agentName) Dim agent As NotesAgent Set agent=db.GetAgent(agentName) Call agent.RunOnServer() Print "Agent " & agentName & " ran successfully." Exit Function ErrHandler: MsgBox GetErrorMsg() Exit Function End Function5. 保存后运行。最后说的这个方法是基于Domino服务器对定时代理的一个规则:每当一个定时代理被新建或修改后,Domino为了防止当前时间已超过代理时程所预定的第一次运行时间从而错过了一次运行,执行一次代理。因此实际上,服务器上数据库里的某个定时代理在被修改后,无论是直接地还是籍替换设计,很快都会被运行一次。所以如果要测试某个代理,只需变动一下代码再保存就可以。但是这个特性往往会导致代理不必要的运行,所以IBM从R7新增了一个Notes.ini参数:Amgr_SkipPriorDailyScheduledRuns,只要将它设置为1,定时代理在保存后就不会立即执行。这样一来,“保存后运行”这个测试方法就无效了,还是根据情况选择前面四种方法之一合宜。
相关文章推荐
- 54. 如何在测试中触发服务器上运行的代理
- Hadoop配置文件 HDFS垃圾回收,无密码登录和各个服务组件如何配置那台服务器运行并测试
- Robot---如何自动定时运行测试
- DI v6.2,从测试环境移植到生产环境,如何清理以前运行过的垃圾数据(作业监控记录等信息及后台日志记录相关数据)
- ASP.NET - 如何:以编程方式测试 ASP.NET 服务器控件的有效性
- 如何搭建web服务器 使用Nginx搭建反向代理服务器 .
- 我们应当如何监控服务器的运行情况
- hadoop生态系统学习之路(二)如何编写MR以及运行测试
- ICE专题:在客户端中如何定位服务器(即如何寻找代理)
- HOWTO: 黑莓模拟器 企业激活到BES服务器上(没有黑莓手机如何测试黑莓Push邮件,Push应用程序呢?)
- 如何在适合OpenCart系统运行的美国服务器空间建立SMTP服务
- 如何在适合OpenCart系统运行的美国服务器空间建立SMTP服务
- 如何防止ASP木马在服务器上运行
- 如何测试和调试Linux的Apache服务器
- 本地写的web services 如何发布到远程服务器上运行
- 在SQL Server 2005上遇到了先删除已运行维护计划后,再删除代理中由其产生的作业时,提示删除失败,如何处理?
- 如何在linux系统的服务器上创建用户,并运行python图形化界面
- 【转】Yelp是如何实现每天运行数百万个测试的
- 如何解决在运行 SQL Server 的服务器之间移动数据库时的权限问题
- [54] 测试技术常见的十一种问题之二:如何理解强度测试?