存档
% Processor Time (Processor _Total) & %Processor Time (Process _Total)
% Processor Time (Processor _Total)无法超过100%,但%Processor Time (Process _Total)能超过。
Examining Processor Time Data:
On multiprocessor systems, the Processor\% Processor Time value reported by System Monitor will never exceed 100 percent for any particular processor or thread. On the other hand, the value of the % Processor Time reported for the Process object can report values over 100 percent; if such values occur, this could indicate that threads of the process are cumulatively using more than 100 percent of a processor. To get more detailed information, use the Thread object counters to analyze the processor time each thread within a process is using. Investigating other data described in this section, such as DPC activity or context switching, might help you to interpret high processor-time values.
多处理器系统中,由系统监视报告的处理器Processor Time%值对任何个别处理器或线程不会超出100%。另一方面,进程对象Processor Time%报告值能超出100%,如果超出就意味着该进程的这些线程在累加地超出100%使用一个处理器。要得到更详尽的信息,使用线程对象计数器去分析该处理器在一个进程里使用每个线程的时间。调查在这部分描述的其它数据,如DPC活动或上下文切换,可能会帮助你去解释高Processor Time%值。
% Processor Time(Processor_Total)
指处理器用来执行非闲置线程时间的百分比。计算方法是:度量处理器用来执行空闲线程的时间,然后用100%减去该值。(每个处理器有一个空闲线程,该线程在没有其他线程可以运行时消耗周期)。此计数器是处理器活动的主要指示器,显示在采样间隔期间所观察的繁忙时间平均百分比。应注意,对处理器是否空闲的计算是在系统时钟的内部采样间隔期间(10ms)执行的。考虑到现在的处理器速度非常快,因此,在处理器可能会用大量时间为系统时钟采样间隔之间的线程提供服务时,% Processor Time 会低估处理器利用率。当恰好进行采样后即向计时器发出信号时,更可能对应用程序做出不准确地度量,基于工作负荷的计时器应用程序是一个这样的示例。
%Processor Time (Process _Total)
是所有进程线程使用处理器执行指令所花的时间百分比。指令是计算机执行的基础单位。线程是执行指令的对象,进程是程序运行时创建的对象。此计数包括处理某些硬件间隔和陷阱条件所执行的代码。
多处理器系统中,对任何处理器或线程,系统监视器报告的Processor\% Processor Time值不会超出100%。另一方面,进程对象(也就是Process)Processor Time%值能超出100%;如果超出就意味着该进程的线程累计使用超出了一个处理器的100%。要得到更详尽的信息,使用线程对象计数器去分析在该进程中每个线程的Processor Time%值。调查在这部分描述的其它数据,如延迟过程调用(DPC)活动或上下文切换,可能会帮助你去解释高Processor Time%值。
1.“\Process(…)\% Processor Time” can go up to N*100 (where N is the number of CPUs) because it adds up the CPU usage of the requested process across all the CPUs.
2.“\Process(_Total)\% Processor Time” should always be around N*100 (where N is the number CPUs) because it adds up the CPU usage of each process, including the idle process.
3.“\Processor(…)\% Processor Time” can go up to 100 because it’s the CPU usage of the requested CPU.
“\Processor(_Total)\% Processor Time” can go up to 100 because it’s the average CPU usage across all CPUs.
Processor(_Total)\% Processor Time
This counter gives the total processor utilization figure for the server as a whole. For example, on a dual processor system with one processor pegged out at 100% utilization and the other processor standing idle, a figure of about 50% would be recorded.
This server metric is useful for gauging overall how busy a server is or, put in another way, how much spare capacity there is available (by subtracting from 100%).
If per-processor information is required to be monitored by Resource Manager, then additional server metrics may be configured for monitoring:
Processor(0)\% Processor Time
Processor(1)\% Processor Time
... etc.
(See the Resource Manager Administrator’s Guide and the help within the Presentation Server Console for information on Customizing Server Metrics).
Process Processor Utilization
In addition to monitoring server metrics Resource Manager also monitors process activity; one aspect of process activity monitored is the degree to which the processor(s) is being used.
Processor usage of each process on the server is sampled at regular intervals using a standard operating system call - note that the operating system call used returns the sum of processor time used by all threads within the process. Resource Manager expresses the processor time used during the sampled interval as a percentage by dividing this time by the elapsed time since the previous sample.
On a multi-processor system it is quite possible for the percentage reported to exceed 100% in the case of a multi-threaded process. For example, on a dual-processor system, a multi-threaded process in which two threads are performing lengthy processor intensive calculations would cause a value of about 200% to be recorded.
This process-specific processor utilization is useful for gauging the state (and possibly health) of the process; if a process which normally uses little processor time is seen to be consuming a figure approaching 100%, a likely explanation is that it has encountered a bug which has caused it to enter an uncontrolled looping state.
原文:http://www.51testing.com/?27242/action_viewspace_itemid_77655.html
HP Mercury 系列测试工具使用注意事项
·系统中使用中文用户名(如XP系统),会造成以下异常:
1、LoadRunner中录制的WS脚本回放通不过。
2、QTP打开后,使用不了(如录制按钮失效等等)。
·将安装文件放置于中文目录中,安装过程会提示文件找不到或缺失某个文件之类的错。(也不要放在桌面上,桌面路径为C:\Documents and Settings\Administrator\桌面)
我要告诉测试新手的
作者:Randall W.Rice, CSQA, CST, CSTM
翻译:skinapi
前言
因为已经带领和训练测试团队多年,所以按惯例我总有些东西确定需要传达给测试新手。不管你是一个测试新手还是一个经验丰富的测试专家,都有不少有益的东西需要牢记在心。
1、你是一个检查者,你不需要为质量负责
很多测试人员误入歧途,不明白他们是评测产品的而不是控制产品的。这两者之间有着天壤之别。例如,一个测试团队花费好几周时间测试并发现很多缺陷,只是为了看着管理层决定发布一个有已知严重缺陷的产品。测试团队经常会感到士气受挫,置疑他们测试的目的。
我询问团队中的成员他们是否被支付薪水了,通常得到的回答都是“是”。我又询问他们是否尽力去做工作了,再一次,通常得到的回答都是“是”。我于是告诉他们,“你们做了你们的工作。你们尽力测试,发现了缺陷并进行了上报。那么现在可以回家休息了。实际上,作为一名测试人员唯一失败的地方是不上报一个已知的缺陷。”
这不会提高士气,但却有助于事情向正确的方向发展,特别是能让人不用每天晚上都在家接着办公。
很多测试人员,包括我,当我们刚开始测试工作时,似乎会觉得自己对我们所测试的系统应用的质量负责。尽管这个工作的出发点是让人钦佩的,可实际上我们测试人员对于产品的质量基本没有控制能力。也是由于这个原因,测试人员不为质量负责。现在问题是管理层并不总是能看到这种区别。所以经常看见管理层提出类似于“我们付钱给这些人不是为了获得高质量的软件吗?”的问题。
2、缺陷都是有价值的
每一个缺陷都是深入了解和提高的机会。我们可能只有一次机会观察到一个缺陷,所以我总是告诉测试人员始终保持高度注意力,不要为测试的乏味所折磨。
缺陷信息可能是可获取的项目数据中最有效的资源之一。但是这都取决于我们能多好的捕捉和传达我们所发现的缺陷的相关信息。
每个缺陷都会花费整个组织的金钱。如果我们不能从中更进一步了解产品,我们会浪费大量时间和金钱。当我们把一个错误转换成一次深入了解的机会时杠杆作用就出现了。让我们面对它――有些教训只能通过经历来学习的。
由于一个缺陷而责备谁不会有任何好的作用。责备只会让士气低落、沟通中断。这就像不断鞭打一匹死马希望它能活过来一样。
3、你报告第一个问题之前一切都是美好的
这就是一个测试人员所面对的现实。你可以计划测试,获取所需要的资源,看起来所有人都站在你这边。可当你报告第一个问题之后,事情就开始变得紧张了。
出现这种态度上的突然变化的原因是现在你在批评某些人的工作了。自尊心使得自我收到伤害,关系变得紧张。有些情况下自尊心是值得期盼的,只要知道当你开始发现问题的时候态度有可能变化就可以了。
我经常建议测试人员做的一件事是读一读一些你过去写的缺陷报告,假设自己是接收缺陷报告的人。你会发现自己需要更老练一些。写一个没有任何挖苦语句的缺陷报告可能没什么乐趣,但它的确有助于和开发人员之间保持一个好的关系。
4、只能测试你能观察的
你可能总想测试一些真正有创造性的用例,但如果你没有办法观察到结果,那有什么意义?尽管有些应用让你能观察到很多,但仍然有你没办法接近的,例如结构、隐藏的对象、后台进程等。
5、别忘记你是怎样到一个地方的
我不是在谈论知道为什么你走进一个房间,而是在测试时执行的步骤。对于测试新手常见的是发现了一个重大的缺陷,但却无法复现它以便定位解决。这样你只会觉得不舒服,不知道自己到底是真发现了一个缺陷,还是说仅仅是错误的使用了应用。
你能用来跟踪你的测试步骤的方法有测试脚本、测试记录、敲键记录器如Spector和屏幕视频捕捉工具如Hypercam。
6、标准和流程是你的朋友
尽管标准和流程让一些人觉得受限,但它们为你的工作提供了有价值的指导。不要拒绝标准因为它们是详细的、具体的。因此用它们指导自己更快、更一致的完成自己的工作。
7、没有足够的时间用于测试
几乎每一个测试人员都抱怨没有足够的时间用于测试,但实际情况是测试任何东西到完整的程度都是不可能有充足时间的。当你充分考虑软件的特性如可用性、安全性、兼容性、互操作性等时这一点尤其正确。
不要再抱怨缺少时间,学会根据风险来进行优先级排序,把注意力都放在对管理层很重要的应用目标上。有时候我们测试的内容超出了我们需要测试的,因为我们的目标偏离了产品的价值。
8、你不可能发现所有的缺陷
如果你测试的东西后来有缺陷被发现,不要变得气馁。你可能已经做了非常全面的工作,获得了高水平的缺陷移除,但100%都是不可能的目标。
9、保持幽默感和对前景充满信心
经常微笑、保持健康可能是你最好的生存方式。如果你正处在困难条件下,请相信,这一切都将过去。
10、争取做到最好而不是完美
测试新手经常会陷入追求完美的过程中,认为100%的正确才是标准。我曾经也是受害者之一,但要为自己辩护的是,我以前深受80年代后期类似于“99.9%还不够好”的TQM帖子和文章的影响。
追求完美的问题在于它会让测试进程变慢,将担心引入你所做的一切,使得你对别人更挑剔,而且通常会让你的朋友和家人感到失望。
当然,没人愿意犯错误,但他们稍不注意就出现了。想不犯错误就是否认现实。争取做到最好是一种好的习惯,表明你对工作的态度和投入程度。如果你想努力做到最好,你就会往前再多走一点。
根据我的观察,大多数人看到错误或者经历失误时都是很宽容的。人们最关心的是你对待问题的反应。
11、开发人员不是敌人
需要整个项目团队的努力才能递交高质量的产品。有时候似乎开发人员不太关心质量,这个时候事情背后可能存在隐情。这时候你需要更好的和开发人员合作而不是反对他们。要始终牢记良好的交流是一个项目成功的关键因素。当你和开发人员站到对立面时,交流就停止了,你测试所需的很多信息也无法获取了。
12、建立和维护一个私人的交际网
你的私人和工作关系是一个很重要的资产。无论时当你有工作时还是当你没工作时他们都是一个很好的支持系统。找一个好的指导者,而当你学到足够的东西时成为别人的指导者。
13、持续锻炼自己的技能
你的技能把你和别人区分开。始终通过参加专业会议、获取认证、阅读专业资料等来不断学习。我给自己制定的目标是每周至少读一本和个人发展以及职业发展相关的书(测试、领导艺术、商业、IT等)。
一个个人发展方面的专家说过如果你每天在任何特定的主题上花费30分钟进行阅读,五年之内你肯定能成为这个主题方面的专家。这一点对我是起作用的――你也可以试试。
另一种让自己始终内行并建立网络的好的方式是活跃在一些QA或者测试论坛上。
14、当前进变得困难,懒惰就需要创造力了
当我第一次成为一个测试团队负责人时,我用这句话做了一个字条挂在我的桌上。它不断提醒我把创造力作为我解决问题的一个杠杆。
学着从一个新的有创造性的方式来看待问题。你可能有一个好的测试计划,但你如何应付各种变化呢?弹性是一个优秀的问题解决负责人的关键特性。
15、简单并不总是很容易
我们测试中做的很多工作看起来都很简单。但是,挑战在于保持努力的连贯性。
有些解决问题的方式刚开始看起来很简单,但不要由于它简单和明显就丢弃任何一种想法。同样,不要低估实现一个简单想法所需要付出的努力。
一些看过我和William E.Perry合著的书“Surviving the Top Ten Challenges of Software Testing”评论说这些挑战都很简单且很容易解决。这就让我奇怪为什么人们还在年复一年的提出“人的问题”。我认为在大脑中产生想法比实际实现出来要简单的多。
结论
智慧比知识更重要。你可能已经学习了大量测试技术,但如果你没有足够的智慧判断什么时候采用它们,没有从整体上理解它们,你应用它们的能力将受到很大限制。对任何都有涉猎的你存在的一个问题是“你不知道什么你不知道”。智慧帮助你明白你需要知道哪些东西才能成功。
[ASP.NET] System.Exception: System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本
环境:WIN2003+IIS+Oracle 9i+.NET Framework 3.0+IE 7
在IIS上部署无线**系统的WS模块时,IE中运行时WS的asmx调用页,提示如下错误:
System.Exception: System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。 在 System.Data.OracleClient.OCI.DetermineClientVersion() 在 System.Data.OracleClient.OracleInternalConnection.OpenOnLocalTransaction(String userName, String password, String serverName, Boolean integratedSecurity, Boolean unicode, Boolean omitOracleConnectionName) 在 System.Data.OracleClient.OracleInternalConnection..ctor(OracleConnectionString connectionOptions) 在 System.Data.OracleClient.OracleConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) 在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 在 System.Data.OracleClient.OracleConnection.Open() 在 HISPlus.DbAccess.Connect() 在 HISPlus.OracleAccess.SelectData(String sqlSel, String tableName, DataSet& ds, Boolean blnWithKey) 在 HISPlus.DbAccess.SelectData(String sqlSel, String tableName) 在 DataWebSrv.GetPdaDbTableList(DateTime dtLastUpdate) 位置 c:\MobileWebSrv\App_Code\DataWebSrv.cs:行号 60
解决方法:
使用administrator用户登陆,
在ORACLE_HOME目录(默认为C:\Oracle\ora92),右键"属性" -> "安全"选项卡,点击"添加",在"选择用户和组"中点击"高级",
点击"立即查找",在搜索结果中将ASPNET用户添加进去,并将相应的权限赋给ASPNET用户。
将IIS重启即可(可以在命令行中使用iisreset命令重启IIS)。
[LR] 无线**系统的WS模块测试过程记录
无线**系统的WS模块测试过程记录
测试环境:
WIN2003 + WINXP + ASP.net(asmx/*.cs) + IIS + Oracle10G
IBM 3400 (Xeon E5420 2.50G 四核 ,8G RAM / Server,WIN2003) + Lenovo R61 (Core 2.1G , 2G RAM /Client,WIN2003) + Lenovo R61(Core 2.2G,3G RAM /Client,WINXP)
WS测试:
1.Import WSDL: 搭建好测试环境后,在LR的manage services中以URL方式导入WSDL文件,导入成功后,会在界面最下方提示"The WSDL file associated with this service passed validation with on errors."
2.Add Service Call: Click Add Service Call 按钮,在弹出的窗口中选择WEB 服务以及要对该服务进行的操作(web method),可以在这里对输入输出参数进行设置,也可以在添加完成后对输入输出进行参数化。
3.Replay: Click RUN.
4.Create Scenario.
问题记录:
Q1:
Action.c(4): Error: C interpreter run time error: Action.c (4): Error -- memory violation : Exception ACCESS_VIOLATION received.
A:该问题有不同的解决方法:
(一)、查看参数设置是否正确,传入参数不匹配,或非空的参数为空,都会造成该问题。
(二)、run time settings->Miscellaneous中将thread(线程)换成process(进程)。
Q2:R612003机器上录制脚本没问题,同样的录制方法在R61XP机器上录制,脚本死活通不过,报以下错误:
错误一:
Microsoft Visual C++ Runtime Library
Runtime Error!
Program:
This application has request the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
错误二:
mmdrv.exe遇到问题需要关闭。我们对此引起的不便表示抱歉。
如果你正处在进程当中,信息可能丢失。
A:对比脚本的WSDL,发现XP当前的用户为中文名,于是换一英文用户登陆,再录制WS脚本,回放通过,该脚本在2003中回放也顺利通过。在录制的过程中最好使用administrator帐户录制。
Q3: 一台机器上录制的脚本,回放通过,在另一台机器上回放通不过。
A:由于录制时使用localhost录制,虽然另一台机器上也有相同的环境,回放是通不过的,所以要想共享脚本,最好使用将localhost换成IP。应该是录制时脚本中会加入唯一识别的标识。
PS:
关于录制协议的选择,WS可以采有Web services 协议进行录制,也可以采用WEB(http/html)方式录制(不需添加WS CALL),只要有类似如aps.net中的.asmx文件提供对WS的支持,并且能通过WEB方式访问得到,业务能成功就是正确的协议。
附代码:
//WEB协议
Action()
{
web_url("localhost:801",
"URL=http://localhost:801/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTTP",
LAST);
lr_think_time(14);
web_url("DataWebSrv.asmx",
"URL=http://localhost:801/DataWebSrv.asmx",
"Resource=0",
"RecContentType=text/html",
"Referer=http://localhost:801/",
"Snapshot=t2.inf",
"Mode=HTTP",
LAST);
web_url("GetPdaDbTableList",
"URL=http://localhost:801/DataWebSrv.asmx?op=GetPdaDbTableList",
"Resource=0",
"RecContentType=text/html",
"Referer=http://localhost:801/DataWebSrv.asmx",
"Snapshot=t3.inf",
"Mode=HTTP",
LAST);
lr_think_time(5);
web_submit_data("GetPdaDbTableList_2",
"Action=http://localhost:801/DataWebSrv.asmx/GetPdaDbTableList",
"Method=POST",
"RecContentType=text/xml",
"Referer=http://localhost:801/DataWebSrv.asmx?op=GetPdaDbTableList",
"Snapshot=t4.inf",
"Mode=HTTP",
ITEMDATA,
"Name=dtLastUpdate", "Value=2008.09.05", ENDITEM,
LAST);
return 0;
}
//WS协议
Action()
{
web_service_call( "StepName=GetPdaDbTableList_101",
"SOAPMethod=DataWebSrv.DataWebSrvSoap.GetPdaDbTableList",
"ResponseParam=response",
"Service=DataWebSrv",
"Snapshot=t1243912498.inf",
BEGIN_ARGUMENTS,
"dtLastUpdate=2008.09.05",
END_ARGUMENTS,
BEGIN_RESULT,
END_RESULT,
LAST);
lr_think_time(3);
return 0;
}
感谢ZEE老师和坛里的OK兄,在这个过程中给了我很多的帮助和意见。。。
