日历
| |||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
| 1 | 2 | 3 | 4 | 5 | |||||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 | |||
| 13 | 14 | 15 | 16 | 17 | 18 | 19 | |||
| 20 | 21 | 22 | 23 | 24 | 25 | 26 | |||
| 27 | 28 | 29 | 30 | 31 | |||||
搜索标题
最新评论
我的收藏
统计信息
- 访问量: 1179
- 日志数: 19
- 建立时间: 2007-12-06
- 更新时间: 2008-04-18
我的最新日志
-
LoadRunner CPC认证考试复习试题
2008-4-18
LoadRunner CPC认证考试复习试题
x.w*v W!Lv156874LoadRunner CPC认证考试复习试题(2006年12月版本),部分答案将在以后公布. CPC考试在2006年12月之前是实验室上机考试,主要分为问答题,选择题和编程题,考试结果一个月之后揭晓,批卷在Mercury的亚太总部新加坡进行的.这里是部分的选择题. 另外,2007年据说将实行新的题型,改为跟SP考试同样的类型,所以题目难度可能有所降低.1. How many default Widows: Apache counters are added?
a) 10 : 5
b) 11 : 9
c) 6 : 10
d) 9 : 4
e) 5 : 2
f) None of above
2. Can the list of default Windows monitors be changed?
a) No-this list is determined by Microsoft Corporation
b) Yes-modify the scenario .Irs file
c) No-only the domain administrator can modify it
d) Yes-modify a cfg file in LoadRunner’s installation directory
e) Yes-modify a dft file in LoadRunner’s \dat directory
f) All of the above
软件测试专业网站:51Testing软件测试网c.DB"V$O5[
3. For a host machine in a different domain, you try to monitor PerfMon on it and get an “access denied” message. What might resolve this problem?a) Edit a cfy file in the LoadRunner installation directory to update permissions
b) Edit the registry on the host machine to update permissions by granting READ access toHKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Perflib
c) Ensure the host machine and the controller machine use the same version of WindowsNT
d) Run the netstat command from the host machine to update permissions
e) Run the net use command to update permissions
f) All of the above
9O[T9[{IG{1568744. If you run tracert and notice significant network delays while running the load test, depending on the network configuration, you could try the following to reduce net-work traffic:a) Run PerMon and check network byte transfer rate on the controller machine
b) Have the network admin increase the physical packet size (MTU)for large data sets since fragments degrade performance
c) Initialize all vusers before loading them for the test
d) If the problem is the network, upgrade the NIC
e) Configure the controller to write run-time data to a shared network drive, rather than to the host machines
f) None of the above
+?0V M+M)P4V-Hx1568745. To monitor an Apache server:a) You need the correct URL that reports server statistics
b) You need to monitor through port 80 to accurately measure the end user experience.
c) You can update the monitor defaults via a .cfg file in LoadRunner’s \monitors folder
d) You can update the defaults via a dft file in LoadRunner’s\dat directory
e) You can monitor Apache even if there is a proxy server between the controller and the Apache servers, after updating a LoadRunner .cfg file
f) All of above
7I;H C)d2R,]1568746. Choose the true answer(s) from the list belowa) You can change the agent’s working language from a list of 4 languages
b) Use path translation where controller and hosts map a different path to a shared drive where scrīpts are stored
c) You can select to not collate log files after a run
d) You can set a file transfer trace if you have problems transferring files
e) Temporary files ate saved during a run: LoadRunner agent files ate stored in Irr folders and controller files ate stored in brr folders
f) All temporary files are automatically deleted at the end of the run and cannot be automatically saved
软件测试专业网站:51Testing软件测试网(R_8n:jW:]
7. Which of the following is true when trouble-shooting the controller’s communication with load generators?a) The controller always uses the host machine’s short name so all host machines must be in the same domain as the controller
b) To ensure the full machine name is used, modify a .ini file in LoadRunner’s \dat directory
c) An .exe file in LoadRunner’s \bin lets you check that tcp/ip is properly installed on a current machine since tcp/ip problems can prevent load testing
d) If the controller has multiple IPs, alias the controller’s name on all load generators via their. Hosts file
e) Path translation is only effective across different OS platforms
f) All of the above
2]Y,H8Q#Lu }1568748. When configuring online graphs per load test, you :a) Can choose to display the x-axis with or without clock time
b) Can choose to let LR automatically pick the Y-axis or set s min max value for custom scaling
c) Can modify line colors, scaling and visibility of measurements on graphs
d) Can monitor multiple machine on one monitor graph
e) Cannot monitor multiple machines on multiple monitor graphs
f) All of above
,[O7ID imz/b^1568749. During a scenario run, the default storage location for vuser data is :a) The controller’s temporary folder- this is configurable
b) The controller’s result folder- this is not configurable
c) The host’s installation folder-this is not configurable
d) The host’s temporary folder- this is configurable
e) The controller’s installation folder- this is configurable
f) None of above
软件测试专业网站:51Testing软件测试网\0XL0w+Sn:h/H_
10. New features in LR 7.6 include:a) Wan emulator
b) Multi-protocol support
c) Remote global performance monitor
d) MS-Word report generator
e) EJB analysis – new views
f) Analysis data import wizard
g) All of the above
软件测试专业网站:51Testing软件测试网!} yL#AN@ V7|[0u(C9T6M
11. Pick the top time transaction(s) for your 3 rd run :a) Login
b) Logout
c) FlightSearch_roundTrip
d) FlightSelect_roundTrip
e) FlightPurchase_roundTrip
f) FlightSearch _oneWay
g) FlightSelect_ oneWay
h) FlightPurchase_oneWay
i) DeleteItinerary
j) ViewItineraryh_roundTrip
12. What must happen in order to generate analysis data :
a) Transactions must be used
b) Performance monitors must be used
c) User data points must be defined
d) Rendezvous functions must be enabled
e) Online graphs must be viewed
4z"QI#]6}f(Y L15687413. You can prevent excessive use of disk space for the analysis database by :a) Verifying list separator registry options ate the same on your machine as on the database machine
b) Instructing LoadRunner to save in Access 2000 rather than Access 97
c) Storing small databases on a SQL server or MSDE machine
d) Storing large databases on a SQL server or MSDE machine
e) Clicking a button in the Options>database tab
软件测试专业网站:51Testing软件测试网F,P7h MO8a6B
14. If using a time range filter for stored scenario data:a) The running vusers graph expands to suit
b) The processing time decreases
c) The db size increases to track what is ignored
d) The db size decreases
e) This behavīor will be globally applied
软件测试专业网站:51Testing软件测试网 lRK,}4v:xe}
15. When saving display options and filters for future reuse, available features include:a) Automatically apply this template to a new session
b) Use automatic granularity
c) Generate the following automatic HTML report
d) Automatically save the session as
e) All of the above
软件测试专业网站:51Testing软件测试网C uD:@u7z
16. From recent versions of the analysis tool, you :a) Cannot view the controller’s vuser groups information
b) Can view the controller’s build number
c) Can view the controller’s scheduling details
d) Can distinguish between summary and complete analysis data
e) All of above
d\UM H$p'DGd15687417. Which of the following customizations can you apply to a subset of graphs?a) Can change the title font and text
b) Cannot change the background/foreground colors or add images unless exported
c) Can change the depth perception on the graph using an additional dimension
d) Cannot rotate or tilt
e) All of the above
,g"B,c0s/r%g15687418. To standardize a gragh is toa) Focus on behavīor patterns
b) Cancel axtual vaues
c) Have y-axis values converge around zero
d) Plot standard deviation values
e) None of the above
%N Ra ] k8Us4l15687419. The Transactions per Second graph helps you to determine load on the system at any given momenta) False
b) True
软件测试专业网站:51Testing软件测试网:cvY.H+Q8[b'y
20. The Response Time (under load) graph helps you create a gradual loada) False
b) True
软件测试专业网站:51Testing软件测试网\JjJm
21. The graph helps you calculate the time to first buffer.a) False
b) True
E\(~ ?)B15687422. If you have min and max acceptable transaction times defined, you can use the Distribution graph to determine if server performance is within an acceptable range.a) False
b) True
软件测试专业网站:51Testing软件测试网"_6UWu3b)QdG\
23. The auto correlation options include:a) Automatic
b) Correlate data based on X second intervals
c) Manual
d) Correlate data based on X minute intervals
e) None of the above
7irNF G.J|`m15687424. When tuning a system, web/web-app server metrics to check include:a) Browser version
b) Physical memory
c) Load balancing algorithm
d) Images per page
e) CPU
软件测试专业网站:51Testing软件测试网N"O N8Y:^g!j
25. Two examples of common database server problems are:a) Corrupt .dll files
b) Inefficient index design
c) Fragmented databases
d) Compacted data
e) Short transactions
软件测试专业网站:51Testing软件测试网kq2G"Jh9|bt6u
26. When making improvements to SSL web application performance, include these steps:a) Cache the session identifiers from each transaction
b) Avoid excessive use of SSL and re-design pages that have low data sensitivity to not use SSL.
c) Use “keep-alive” enhancement features available with most web browsers
d) Change level of security according to level of data sensitivity
e) Use SSL accelerator appliances and cards
软件测试专业网站:51Testing软件测试网,ekO+{0~(G!g
27. Network bottlenecks are indicated during a test when you add considerable load but:a) Sever-side components are barely affected
b) Outgoing replied are significantly delayed compared to incoming requests
c) Receive timeouts only
d) No idle servers available
e) All of above
3I7mz)ui.LE15687428. Load tests and subsequent data analysis are recommended:a) During initial load testing of the test system to determine its final state
b) After tuning the system to ensure previous problems were fixed
c) During finial load testing of the system to prove new bottlenecks exist
d) When determining configuration changes to improve response times
e) When determining architectural changes to improve response times
软件测试专业网站:51Testing软件测试网/X jq/A@
29. Available performance reports include:a) Detailed Summary
b) Transaction Performance by Vuser
c) Detail Transaction
d) Failed Transactions
e) All of above
1n2a-| LS0bBXd7J15687430. Available activity reports include:a) Scenario Summary
b) Failed Transaction
c) Failed Vuser
d) Scenario Execution
e) All of above
软件测试专业网站:51Testing软件测试网|2}0RD-o A u{
31. Two prerequisites for merging graphs are:a) Both graphs must be identical
b) The graph should have identical axes
c) Both graphs should be opened first
d) Both graphs should share one common axis
e) None of the above
$?U})R'P0K U At"@h15687432. Cross-result graphs can be use to:a) Check 2 different result files(maximum)
b) Test software versions
c) Determine system capacity
d) Benchmark hardware
e) All of above
-
木马和病毒的区别
2008-3-19
木马和病毒的区别木马和病毒的区别,主要体现在两个方面,一个是它的传播性,程序本身自己就可以传播,比如说插一个U盘有病毒,在这种情况下就会把这个病毒程序自动复制到你的U盘上,这是病毒本身就具备这种能力,但是木马通常不具备这种能力,木马是需要靠欺骗的手法让中木马的人去运行,诱骗你去下载,或者直接干脆给你说欺骗的工具,我这儿有一个好玩儿的软件,有一些什么功能发给你,木马是不能自动的进行传播,需要利用特殊的途径。
第二个特点就是隐蔽性,木马的隐蔽性要远比病毒的隐蔽性好很多,因为病毒入侵之后可以很方便的能观察到你机器当中有一些什么样的限制,你能感觉到你的机器中毒。木马入侵之后,大多数情况下,木马入侵之后普通用户感觉不到任何的异常,不会把你的系统性能变低,我们在前一段时间发现终结者的病毒非常的多见,我们检查到通过日志的判断,还有收集的信息来看这种病毒非常的猖獗,我们了解到很多普通用户在他的电脑上已经找不出来这种病毒,找出来的木马都是没有感觉的,杀毒软件不能用了他都感觉不到。所以木马的隐蔽性很好
-
内存分配方式
2008-3-19
内存分配方式
-------------------------------------------------------------------------内存分配方式有三种:
(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量static变量。
(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存 分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。常见的内存错误及其对策
-------------------------------------------------------------------------
发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。
常见的内存错误及其对策如下:
1>内存分配未成功,却使用了它。
------------------------------------------
编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检 指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc或new来申请内存,应该用if(p==NULL) 或if(p=NULL)进行防错处理。2>内存分配虽然成功,但是尚未初始化就引用它
------------------------------------------
犯这种错误主要有两个起因:一是没有初始化的观念;二是误以为内存的缺省初值全为零,导致引用初 错误(例如数组)。
内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无不可信其有。所 以无论用何种方式创建数组,都别忘了赋初值,即便是赋零值也不可省略,不要嫌麻烦。3>内存分配成功并且已经初始化,但操作越过了内存的边界。
------------------------------------------
例如在使用数组时经常发生下标"多1"或者"少1"的操作。特别是在for循环语句中,循环次数很容易搞错,导致数组操作越界。4>忘记了释放内存,造成内存泄露。
------------------------------------------
含有这种错误的函数每被调用一次就丢失一块内存。刚开始时系统的内存充足,你看不到错误。终有一次程序突然死掉,系统出现提示:内存耗尽。动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同,否则肯定有错误(new/delete同理)。5>释放了内存却继续使用它。
------------------------------------------
有三种情况:
(1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。
(2)函数的return语句写错了,注意不要返回指向"栈内存"的"指针"或者"引用",因为该内存在函数体结束时被自动销毁。
(3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生"野指针"。【规则1】用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。
【规则2】不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。
【规则3】避免数组或指针的下标越界,特别要当心发生"多1"或者"少1"操作。
【规则4】动态内存的申请与释放必须配对,防止内存泄漏。
【规则5】用free或delete释放了内存之后,立即将指针设置为NULL,防止产生"野指针"。-------------------------------------------------------------------------
指针与数组的对比
C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。
数组
-------------
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针
--------------
指针可以随时指向任意类型的内存块,它的特征是"可变",所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。下面以字符串为例比较指针与数组的特性。
1.修改内容
------------------------------------------
示例1中,字符数组a的容量是6个字符,其内容为hello\0。a的内容可以改变,如a[0]= 'X'。
指针p指向常量字符串"world"(位于静态存储区,内容为world\0),常量字符串的内容是不可以被修改的。
从语法上看,编译器并不觉得语句p[0]= ‘X'有什么不妥,但是该语句企图修改常量字符串的内容而导致运行错误。示例7-3-1 修改数组和指针的内容
------------------------------
char a[] = "hello";
a[0] = 'X';
cout << a << endl;
char *p = "world"; // 注意p指向常量字符串
p[0] = 'X'; // 编译器不能发现该错误cout << p << endl;
2.内容复制与比较
------------------------------------------
数组复制
--------
不能对数组名进行直接复制与比较。示例2中,若想把数组a的内容复制给数组b,不能用语句 b = a ,否则将产生编译错误。应该用标准库函数strcpy进行复制。同理,比较b和a的内容是否相同,不能用if(b==a) 来判断,应该用标准库函数strcmp进行比较。指针复制
--------
语句p = a 并不能把a的内容复制指针p,而是把a的地址赋给了p。要想复制a的内容,可以先用库函数malloc为p申请一块容量为strlen(a)+1个字符的内存,再用strcpy进行字符串复制。同理,语句if(p==a) 比较的不是内容而是地址,应该用库函数strcmp来比较。示例2 数组和指针的内容复制与比较
-----------------------------------
// 数组...
char a[] = "hello";
char b[10];
strcpy(b, a); //不能用b = a;
if(strcmp(b, a) == 0) // 不能用 if (b == a)...
// 指针...
int len = strlen(a);
char *p = (char *)malloc(sizeof(char)*(len+1));
strcpy(p,a); // 不要用 p = a;
if(strcmp(p, a) == 0) // 不要用 if (p == a)...3 计算内存容量
------------------------------------------
数组
----
用运算符sizeof可以计算出数组的容量(字节数)。
示例3中,sizeof(a)的值是12(注意别忘了'\0')。指针
----
指针p指向a,但是sizeof(p)的值却是4。这是因为sizeof(p)得到的是一个指针变量的字节数,
相当于sizeof(char*),而不是p所指的内存容量。C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。
注意
----
当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
示例3中,不论数组a的容量是多少,sizeof(a)始终等于sizeof(char *)。
示例3 计算数组和指针的内存容量
-----------------------------
char a[] = "hello world";
char *p = a; cout<< sizeof(a) << endl;// 12字节
cout<< sizeof(p) << endl;// 4字节示例3(b) 数组退化为指针
-----------------------------
void Func(char a[100])
{
cout<< sizeof(a) << endl;// 4字节而不是100字节
}4、指针参数是如何传递内存的?
------------------------------------------
如果函数的参数是一个指针,不要指望用该指针去申请动态内存。
示例4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是NULL,为什么?示例4-1 试图用指针参数申请动态内存
----------------------------------
void GetMemory(char *p, int num)
{
p = (char *)malloc(sizeof(char) * num);
}
void Test(void)
{
char *str = NULL;
GetMemory(str, 100);// str 仍然为 NULL
strcpy(str, "hello"); // 运行错误
}毛病出在函数GetMemory中。编译器总是要为函数的每个参数制作临时副本,
指针参数p的副本是 _p,编译器使 _p = p。如果函数体内的程序修改了_p的内容,
就导致参数p的内容作相应的修改。这就是指针可以用作输出参数的原因。
在本例中,_p申请了新的内存,只是把_p所指的内存地址改变了,但是p丝毫未变。
所以函数GetMemory并不能输出任何东西。
事实上,每执行一次GetMemory就会泄露一块内存,因为没有用free释放内存。如果非得要用指针参数去申请内存,那么应该改用"指向指针的指针",见示例4-2。
示例4-2用指向指针的指针申请动态内存
------------------------------------
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(sizeof(char) * num);
}
void Test2(void)
{
char *str = NULL;
GetMemory2(&str, 100); // 注意参数是 &str,而不是str
strcpy(str, "hello");
cout<< str << endl;
free(str);
}
由于"指向指针的指针"这个概念不容易理解,我们可以用函数返回值来传递动态内存。
这种方法更加简单,见示例4-3。示例4-3 用函数返回值来传递动态内存
-----------------------------------
char *GetMemory3(int num)
{
char *p = (char *)malloc(sizeof(char) * num);
return p;
}
void Test3(void)
{
char *str = NULL;
str = GetMemory3(100);
strcpy(str,"hello");
cout<< str << endl;
free(str);
}
用函数返回值来传递动态内存这种方法虽然好用,但是常常有人把return语句用错了。这里强调不要用return语句返回指向"栈内存"的指针,因为该内存在函数结束时自动消亡,见示例4-4。示例4-4 return语句返回指向"栈内存"的指针
--------------------------------------------
char *GetString(void)
{
char p[] = "hello world";
return p;// 编译器将提出警告
}
void Test4(void)
{
char *str = NULL;str = GetString();// str 的内容是垃圾
cout<< str << endl;
}
用调试器逐步跟踪Test4,发现执行str = GetString语句后str不再是NULL指针,
但是str的内容不是"hello world"而是垃圾。如果把示例4-4改写成示例4-5,会怎么样?
示例4-5 return语句返回常量字符串
-----------------------------------
char *GetString2(void)
{
char *p = "hello world";
return p;
}
void Test5(void)
{
char *str = NULL;
str = GetString2();
cout<< str << endl;
}
函数Test5运行虽然不会出错,但是函数GetString2的设计概念却是错误的。
因为GetString2内的"hello world"是常量字符串,位于静态存储区,它在程序生命期内恒定不变。
无论什么时候调用GetString2,它返回的始终是同一个"只读"的内存块。5 free和delete把指针怎么啦?
------------------------------------------
别看free和delete的名字恶狠狠的(尤其是delete),
它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。
用调试器跟踪示例5,发现指针p被free以后其地址仍然不变(非NULL),
只是该地址对应的内存是垃圾,p成了"野指针"。
如果此时不把p设置为NULL,会让人误以为p是个合法的指针。
如果程序比较长,我们有时记不住p所指的内存是否已经被释放,
在继续使用p之前,通常会用语句if (p !=NULL)进行防错处理。
很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,
它也不指向合法的内存块。示例5 p成为野指针
--------------------
char *p = (char *) malloc(100);
strcpy(p, "hello");
free(p); // p 所指的内存被释放,但是p所指的地址仍然不变 ...
if(p != NULL) // 没有起到防错作用
{ strcpy(p, "world"); // 出错
}6 动态内存会被自动释放吗?
------------------------------------------
函数体内的局部变量在函数结束时自动消亡。很多人误以为示例6是正确的。
理由是p是局部的指针变量,它消亡的时候会让它所指的动态内存一起完蛋。这是错觉!示例7-6 试图让动态内存自动释放
------------------------------
void Func(void)
{
char *p = (char *) malloc(100); // 动态内存会自动释放吗?
}
我们发现指针有一些"似是而非"的特征:
------------------------------------
(1)指针消亡了,并不表示它所指的内存会被自动释放。
(2)内存被释放了,并不表示指针会消亡或者成了NULL指针。
这表明释放内存并不是一件可以草率对待的事。也许有人不服气,
一定要找出可以草率行事的理由:
如果程序终止了运行,一切指针都会消亡,动态内存会被操作系统回收。
既然如此,在程序临终前,就可以不必释放内存、不必将指针设置为NULL了。
终于可以偷懒而不会发生错误了吧?
想得美。如果别人把那段程序取出来用到其它地方怎么办?7 杜绝"野指针"
------------------------------------------
"野指针"不是NULL指针,是指向"垃圾"内存的指针。
人们一般不会错用NULL指针,因为用if语句很容易判断。
但是"野指针"是很危险的,if语句对它不起作用。"野指针"的成因主要有两种:
(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,
它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,
要么将指针设置为NULL,要么让它指向合法的内存。例如
char *p = NULL;
char *str = (char *) malloc(100);(2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。参见7.5节。
(3)指针操作超越了变量的作用范围。这种情况让人防不胜防,示例程序如下:
class A
{
public:
void Func(void){ cout << "Func of class A" << endl;
}void Test(void)
{
A *p;
{
A a;
p = &a; // 注意 a 的生命期
}
p->Func();// p是"野指针"
}函数Test在执行语句p->Func()时,对象a已经消失,而p是指向a的,所以p就成了"野指针"。
但奇怪的是我运行这个程序时居然没有出错,这可能与编译器有关。8 有了malloc/free为什么还要new/delete ?
------------------------------------------
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。
它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。
对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。
由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,
不能够把执行构造函数和析构函数的任务强加于malloc/free。
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
我们先看一看malloc/free和new/delete如何实现对象的动态内存管理,见示例8。示例8 用malloc/free和new/delete如何实现对象的动态内存管理
-------------------------------------------------------------
class Obj
{
public :
Obj(void){ cout << "Initialization" << endl; }
~Obj(void){cout << "Destroy" << endl; }
void Initialize(void){ cout << "Initialization" << endl; }
void Destroy(void){ cout << "Destroy" << endl; }
};
void UseMallocFree(void)
{
Obj *a = (obj *)malloc(sizeof(obj)); // 申请动态内存
a->Initialize(); // 初始化
a->Destroy(); // 清除工作
free(a);// 释放内存
}
void UseNewDelete(void)
{
Obj *a = new Obj;// 申请动态内存并且初始化
delete a;// 清除并且释放内存
}类Obj的函数Initialize模拟了构造函数的功能,函数Destroy模拟了析构函数的功能。
函数UseMallocFree中,由于malloc/free不能执行构造函数与析构函数,
必须调用成员函数Initialize和Destroy来完成初始化与清除工作。
函数UseNewDelete则简单得多。所以我们不要企图用malloc/free来完成动态对象的内存管理,应该用new/delete。
由于内部数据类型的"对象"没有构造与析构的过程,对它们而言malloc/free和new/delete是等价的。
既然new/delete的功能完全覆盖了malloc/free,为什么C++不把malloc/free淘汰出局呢?
这是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。如果用free释放"new创建的动态对象",那么该对象因无法执行析构函数而可能导致程序出错。
如果用delete释放"malloc申请的动态内存",理论上讲程序不会出错,但是该程序的可读性很差。
所以new/delete必须配对使用,malloc/free也一样。9 内存耗尽怎么办?
------------------------------------------
如果在申请动态内存时找不到足够大的内存块malloc和new将返回NULL指针,宣告内存申请失败。
通常有三种方式处理"内存耗尽"问题。(1)判断指针是否为NULL,如果是则马上用return语句终止本函数。例如:
void Func(void)
{
A *a = new A;
if(a == NULL)
{
return;
}
...
}(2)判断指针是否为NULL,如果是则马上用exit(1)终止整个程序的运行。例如:
void Func(void)
{
A *a = new A;
if(a == NULL)
{
cout << "Memory Exhausted" << endl;
exit(1);
}
...
}(3)为new和malloc设置异常处理函数。
例如Visual C++可以用_set_new_hander函数为new设置用户自己定义的异常处理函数,
也可以让malloc享用与new相同的异常处理函数。详细内容请参考C++使用手册。上述(1)(2)方式使用最普遍。如果一个函数内有多处需要申请动态内存,
那么方式(1)就显得力不从心(释放内存很麻烦),应该用方式(2)来处理。很多人不忍心用exit(1),问:"不编写出错处理程序,让操作系统自己解决行不行?"
不行。如果发生"内存耗尽"这样的事情,一般说来应用程序已经无药可救。
如果不用exit(1) 把坏程序杀死,它可能会害死操作系统。
道理如同:如果不把歹徒击毙,歹徒在老死之前会犯下更多的罪。有一个很重要的现象要告诉大家。对于32位以上的应用程序而言
,无论怎样使用malloc与new,几乎不可能导致"内存耗尽"。
我在Windows 98下用Visual C++编写了测试程序,见示例9。
这个程序会无休止地运行下去,根本不会终止。
因为32位操作系统支持"虚存",内存用完了,自动用硬盘空间顶替。
我只听到硬盘嘎吱嘎吱地响,Window 98已经累得对键盘、鼠标毫无反应。我可以得出这么一个结论:对于32位以上的应用程序,"内存耗尽"错误处理程序毫无用处。这下可把Unix和Windows程序员们乐坏了:反正错误处理程序不起作用,我就不写了,省了很多麻烦。
我不想误导读者,必须强调:不加错误处理将导致程序的质量很差,千万不可因小失大。
示例9试图耗尽操作系统的内存
void main(void)
{
float *p = NULL;
while(TRUE)
{
p = new float[1000000];
cout << "eat memory" << endl;
if(p==NULL) exit(1);
}
}10 malloc/free 的使用要点
------------------------------------------
函数malloc的原型如下:
void * malloc(size_t size);
用malloc申请一块长度为length的整数类型的内存,程序如下:
int *p = (int *) malloc(sizeof(int) * length);
我们应当把注意力集中在两个要素上:"类型转换"和"sizeof"。
malloc返回值的类型是void *,所以在调用malloc时要显式地进行类型转换,
将void * 转换成所需要的指针类型。
malloc函数本身并不识别要申请的内存是什么类型,它只关心内存的总字节数。
我们通常记不住int,float等数据类型的变量的确切字节数。例如int变量在16位系统下是2个字节
,在32位下是4个字节;而float变量在16位系统下是4个字节,在32位下也是4个字节。最好用以下程序作一次测试:
cout << sizeof(char) << endl;
cout << sizeof(int) << endl;
cout << sizeof(unsigned int) << endl;
cout << sizeof(long) << endl;
cout << sizeof(unsigned long) << endl;
cout << sizeof(float) << endl;
cout << sizeof(double) << endl;
cout << sizeof(void *) << endl;
在malloc的"()"中使用sizeof运算符是良好的风格,但要当心有时我们会昏了头,写出 p = malloc(sizeof(p))这样的程序来。函数free的原型如下:
void free( void * memblock );
为什么free函数不象malloc函数那样复杂呢?这是因为指针p的类型以及它所指的内存的容量事先都是知道的,语句free(p)能正确地释放内存。如果p是NULL指针,那么free对p无论操作多少次都不会出问题。
如果p不是NULL指针,那么free对p连续操作两次就会导致程序运行错误。11 new/delete 的使用要点
------------------------------------------
运算符new使用起来要比函数malloc简单得多,例如:
int *p1 = (int *)malloc(sizeof(int) * length);
int *p2 = new int[length];
这是因为new内置了sizeof、类型转换和类型安全检查功能。对于非内部数据类型的对象而言,
new在创建动态对象的同时完成了初始化工作。
如果对象有多个构造函数,那么new的语句也可以有多种形式。
例如
class Obj
{
public :
Obj(void); // 无参数的构造函数
Obj(int x); // 带一个参数的构造函数
...
}
void Test(void)
{
Obj *a = new Obj;
Obj *b = new Obj(1); // 初值为1
...
delete a;
delete b;
}
如果用new创建对象数组,那么只能使用对象的无参数构造函数。例如
Obj *objects = new Obj[100]; // 创建100个动态对象
不能写成
Obj *objects = new Obj[100](1);// 创建100个动态对象的同时赋初值1
在用delete释放对象数组时,留意不要丢了符号‘[]'。例如
delete []objects; // 正确的用法
delete objects; // 错误的用法
后者相当于delete objects[0],漏掉了另外99个对象。 -
兴趣
2008-3-13
在学校的时候,呵呵,自己就对工具好像最有兴趣,一有时间就倒弄着
photoshop,3Dmax,CAD,coreldraw,flash这些,出来了,才发现,其实一切并不是自己想象中的,
一顿清醒。哈哈,居然走上测试之路,其实,走到今天,我还是没有后悔过,尤其是自从学了测试工具后,
让我的兴趣更上了层楼了。
呵呵,现在我的愿望就是快点找到工作,最好是做QTP测试执行的。
-
人生的方向
2008-3-13
人的一生,其实大都是茫然的,而最茫然的时候就是大学刚毕业这几年了,
想找份好工作,却不知道好工作到底是什么,
找到的工作,不与自己的专业对口,
想想,大学里学了这么多年,总不能白丢了 吧。
想找与专业对口的,却始走不进那门,
呵呵,我想这是绝大部分人的想法,尤其是95%的计算机系女生的状况
想找个好异性朋友,却始终在人群中徘徊。
想。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
不知道倒底是什么是自己最想要的。
或许,你会说,是钱,那有了钱以后呢? 购物? 购物以后呢?
想来想去,是幸福? 那你要的幸福又是怎么样的呢?
呵呵,千万,不要只是说理想,说想象,
因为,现实中,那一切是多么像海市蜃楼。
--------随意的码字
-
QTP
2008-3-13
Mercury QuickTest Professional 8.2 自述文件
本文件提供有关 QuickTest Professional 的下列信息:
概述
欢迎使用 QuickTest Professional - Mercury 关键字驱动的自动测试解决方案。通过监视最终用户行为,QuickTest Professional 创建交互式可自定义测试或组件,从而简化并缩短测试周期。
通过 QuickTest Professional,可以测试标准 Windows 应用程序、Web 对象、ActiveX 控件和 Visual Basic 应用程序。还可以获得适用于许多特殊环境的其他 QuickTest 加载项,例如 Java、Oracle、SAP 解决方案、.NET Windows 以及 Web Forms、Siebel、PeopleSoft 和终端仿真器应用程序。
QuickTest Professional 兼容 Unicode,支持 Unicode 2.0、UTF-8 和 UTF-16。
QuickTest Professional 支持运行 WinRunner 7.6 及更高版本的 WinRunner 测试和函数。
对于测试管理,QuickTest Professional 可以与 Mercury 集中质量解决方案 Quality Center(原为 TestDirector)集成,适用于 TestDirector 7.6 Service Pack 4、TestDirector 8.0 Service Pack 2 和 Quality Center 8.2 版。
对于 Business Process Testing,QuickTest Professional 可以与 Quality Center 8.2 版(带有支持 Business Process Testing 的许可证)集成。
QuickTest Professional 可以与 LoadRunner 集成,后者是用于应用程序性能测试的 Mercury 工具(用于版本 7.8、7.81 (FP1) 和 8.0)。
QuickTest Professional 还可以与 Mercury 应用程序管理(原为 Topaz)集成,后者是用于优化业务可用性和问题解析的 Mercury 解决方案。
新增功能
QuickTest Professional 8.2 包含下列新增功能:
- 新的业务组件关键字视图,有助于在自编文档表格用户界面中快速便捷地设计组件,而无需编程知识。在外观和功能上,业务组件关键字视图类似于 Quality Center 的业务组件模块中的“步骤”选项卡。这使得 QuickTest 用户和 Quality Center 用户可以看到相同的组件内容。
- 新的函数定义生成器,通过该生成器,可以快速编写和注册用户为测试和组件定义的新函数。
- 关键字视图中新的“仅文档”选项,通过该选项,可以查看和打印测试或组件的自动文档信息。例如,您可能希望查看和打印“文档”列中显示的步骤描述,以便作为手动测试的说明。
- QuickTest 提供了一种新的参数类型,即局部参数。使用局部参数,可以对步骤的输入值进行参数化,或者将运行时值输出到一个参数。局部参数只能由当前业务组件进行访问。
- 现在可以创建多个应用程序区域,并针对应用程序的各个部分使用不同的应用程序区域。每个应用程序区域指定某个组件可使用的资源和设置。
- QuickTest 提供了一组预定义的资源文件,您可以将其与一个应用程序区域或特定组件相关联,以便获得其他功能。
在新增功能帮助(从“帮助”>“QuickTest 的新增功能”获得)中,可以找到有关上述功能的其他信息及更多功能。
客户支持
通过我们屡获殊荣的客户支持网站为 QuickTest Professional 提供技术支持。客户可以从该网站查阅常见问题、提交并检查支持请求的状态,以及访问联机文档、修补程序和其他下载内容。请访问客户支持网站:
可以从以下网址找到世界各地的客户支持联系电话号码:
http://support.mercury.com/cgi-bin/portal/CSO/contacts.jsp。
系统要求
要成功安装并运行 QuickTest Professional,您需要满足以下最低系统要求:
jszB%kq3W5L156874
.H8Bhvz$C156874计算机/处理器:IBM-PC 或与 Pentium III 微处理器兼容的计算机。操作系统:Windows 2000 Service Pack 3 或 Service Pack 4、Windows XP Service Pack 1 或 Service Pack 2 或者 Windows 2003 Server。注意:仅当未激活执行保护机制(也称为 DEP - 数据执行保护和 NX - 不执行)时,才能在 Windows XP Service Pack 2 上支持 QuickTest Professional。内存:256 MB RAM。可用硬盘空间:250 MB 可用磁盘空间用于应用程序文件和文件夹,另外在系统盘(安装操作系统的磁盘)上需要 120 MB 可用磁盘空间。安装 QuickTest Professional 后,建议系统盘中至少留有 150 MB 可用磁盘空间,以便操作系统和 QuickTest Professional 可以正确运行。浏览器:Microsoft Internet Explorer 5.5 Service Pack 2 - 6.0。软件测试专业网站:51Testing软件测试网&f h)p \5~Z)s
有关其他支持的浏览器的信息,请参阅支持的环境和程序。注意: 尚未为“最低”系统配置优化性能。要获得最佳性能,您的系统应该至少按“建议”级别进行配置。
支持的加载项
除了所有 8.2 版加载项,您还可以将下列特定的加载项版本用于 QuickTest Professional 8.2:
有关详细信息和说明,请参阅《Mercury QuickTest Professional 安装指南》。
支持的环境和程序
QuickTest Professional 支持使用下面描述的环境和程序来创建、录制和运行测试或组件。
标准 Windows 应用程序
QuickTest Professional 支持在基于 Windows API 和 MFC 的应用程序上进行测试。
Visual Basic 应用程序
QuickTest Professional 支持在 Visual Basic 6.0 应用程序上进行测试。
注意: QuickTest Professional .NET 加载项支持 Visual Basic .NET 应用程序。
浏览器
ActiveX 网格控件
除了对 ActiveX 属性和方法的基本支持外,QuickTest Professional 还支持在下列 ActiveX 网格控件上进行上下文相关录制和验证:
Y^.j{_} v'VP%aP156874
"WvKYK^ i@W156874ActiveX 日历控件
除了对 ActiveX 属性和方法的固有支持外,QuickTest Professional 还支持在下列 ActiveX 日历控件上进行上下文相关录制和验证:软件测试专业网站:51Testing软件测试网d \@@f Z-Q u"W7PA#O
软件测试专业网站:51Testing软件测试网 z;n!@~e
名称ProgIdMicrosoft Date and Time Picker Control 6.0 (SP4)MSComCtl2.DTPicker.2Microsoft MonthView Control 6.0 (SP4)MSComCtl2.MonthView.2Microsoft Excel
在 QuickTest Professional 中使用 Microsoft Excel 文件(例如,向数据表导入数据或从数据表导出数据)时,可以使用 Microsoft Excel 2000、2002、2003 和 XP。
Microsoft Query
在 QuickTest Professional 中使用 Microsoft Query(例如,用于数据库检查点)时,可以使用 Microsoft Query 2000、2002、2003 和 XP。
其他环境
QuickTest Professional 加载项支持其他环境,例如 Java、.NET Windows 以及 Web Forms、SAP 解决方案、Oracle、Siebel、PeopleSoft、Web 服务和终端仿真器应用程序。有关 QuickTest Professional 加载项的详细信息,请与您的销售代表或 Mercury Interactive 客户支持联系。
有用的信息
- 要安装 QuickTest Professional,您必须使用管理员权限登录。
- 要使用 QuickTest Professional 的调试功能,您必须安装 Microsoft 脚本调试程序。脚本调试程序可以在安装 QuickTest Professional 的过程中安装,也可以以后从 Microsoft 的 Windows 脚本技术站点下载:http://msdn.microsoft.com/library/default.asp?url=/downloads/list/webdev.asp。还可以使用“添加/删除程序”窗口中的“添加/删除 Windows 组件”选项进行安装。
- QuickTest Professional 8.2 中不支持多媒体加载项。
- 如果您的网站或应用程序中的某些对象属性值是为指定类型的所有对象动态生成的,则可以创建一个属性模式配置文件,用于指示 QuickTest Professional 自动将该对象属性录制为正则表达式。有关如何使用属性模式功能的详细说明,请参阅 <QuickTest Professional 安装目录>\help 文件夹中的 PropPattern.htm。
- 使用 QuickTest Professional 时,有几种方法可以改进性能并减少磁盘使用空间。有关详细信息,请参阅《Mercury QuickTest Professional 用户指南》。
- 有关 QuickTest Professional 的详细信息:
- 有关重要的安装信息和逐步安装说明,请参阅《Mercury QuickTest Professional 安装指南》。您的 CD-ROM 的根文件夹中提供有 PDF 格式的《Mercury QuickTest Professional 安装指南》。安装 QuickTest 后,您还可以在 <QuickTest Professional\help> 文件夹中找到该指南。
- 如果是第一次使用 QuickTest Professional,请使用“QuickTest Professional 教程”(“帮助”>“QuickTest Professional 教程”),了解如何使用最常用的功能。
- 有关该版本 QuickTest Professional 中的新增功能和支持的环境的信息,请参阅“QuickTest 新增功能”文档(“帮助”>“QuickTest 新增功能”)。
- 有关 QuickTest Professional 的详细信息,请参阅《Mercury QuickTest Professional 用户指南》和《Mercury QuickTest Professional 对象模型参考》。从“帮助”菜单(“帮助”>“QuickTest Professional 帮助”)中使用索引和文本组合搜索可以找到上述帮助资源,以及“Microsoft VBscrīpt 参考”。<QuickTest Professional 安装目录>\help 文件夹中也提供有 PDF 格式的《Mercury QuickTest Professional 用户指南》。
- 《Mercury QuickTest Professional 自动化对象模型参考》(可以从 QuickTest Professional“开始”菜单的程序文件夹以及 QuickTest Professional“帮助”菜单中获得)提供了有关自动化对象、方法和属性的语法、描述性信息及示例。其中还包括帮助用户可对编写 QuickTest 自动化脚本入门的详细描述。
注意: 要打开适用于打印机(PDF 格式)的版本的 QuickTest Professional 文档,必须在您的计算机上安装 Adobe® Reader®。您可以从以下网址下载 Adobe Reader:www.adobe.com。
已知问题和局限性
安装
- QuickTest Professional 和/或外部加载项的安装文件所在的路径,以及 QuickTest Professional 和/或外部加载项的安装路径,只能包含英文字符。
- 安装 QuickTest Professional 6.0 或更高版本时,您可以继续使用当前的单机许可证或并发许可证。但是,如果要使用可用于 Mercury Functional Testing 并发许可证服务器 7.6 版或更高版本的新的通勤者许可证功能,则必须在并发许可证服务器上安装新的许可证。要获得新的许可证,请与 Mercury Interactive 客户支持联系。
- Mercury Functional Testing 并发许可证服务器不支持使用网络地址转换 (NAT)。
- 如果某个以前版本的 QuickTest Professional 使用的是演示许可证,并且该许可证已经过期,同时又没有为它安装常规许可证,则您无法使用其演示许可证安装 QuickTest Professional 8.2。
- 安装 QuickTest Professional 之前,必须安装 Microsoft Internet Explorer 5.5 Service Pack 2 或更高版本。
- 使用永久许可证安装了 QuickTest Professional 后,您不能使用演示许可证来安装 QuickTest Professional 加载项。
- 如果 LSHOST 变量已设置为另一个域中的服务器,则服务器实用程序 lsmon.exe 可能工作不正常。
- 并发许可证不包括演示许可证,如果未安装 Mercury Functional Testing 并发许可证服务器和许可证代码,则不能使用。
- 以标准用户身份登录计算机时,您不能将许可证类型从单机更改为并发,也不能从并发更改为单机。
- 使用活动的演示许可证从 QuickTest Professional 6.5 升级可能会导致在 QuickTest 启动时打开许可证警告。
- 卸载 QuickTest Professional Floating License Server 版本 6.0 可能会导致 QuickTest 在启动时无法检索许可证。
- 如果您的计算机中有版本 6.0.0.8169 的 Pdm.dll,则建议您从以下网址安装更新的版本:http://support.microsoft.com/support/kb/articles/Q293/6/23.ASP。安装过程中将识别该版本,并且 QuickTest Professional 将指示您从 Microsoft 站点下载已更正的 DLL。
- 如果在还装有 Microsoft HTML Help Workshop 的计算机上安装 QuickTest Professional,则试图在 Microsoft HTML Help Workshop 中编译帮助项目时,您将收到以下错误消息:文件 itircl.dll 尚未正确注册。
- 在 Windows 2003 中卸载 QuickTest Professional 时,卸载程序可能会在“正在删除备份文件”阶段停止响应。
- 在 Windows 2003 中卸载 QuickTest Professional 时,卸载程序不会成功完成,同时指示卸载进程无法完成,应手动卸载 QuickTest Professional。此种情况的发生是由于 InstallShield Developer 8.02 中引入的错误导致的。有关详细信息,请参阅 http://support.installshield.com/kb/view.asp?articleid=Q111000。
- 如果您有外部 6.5.x 加载项,而该加载项是直接在 QuickTest Professional 8.0.x 或更高版本上安装的(以前未在 QuickTest Professional 6.5.x 上安装过),则卸载程序无法卸载这些加载项。
- 在 Windows 2000 中安装 QuickTest Professional 时,如果 C: 驱动器具有超过 16 GB 的可用磁盘空间,则会显示以下警告:
解决方法: 安装用于该加载项的永久许可证。
解决方法: 要更改许可证类型,请以具有管理员权限的用户身份登录计算机。
解决方法:在安装 QuickTest Professional 8.2 之前删除 lservrc 文件。
解决方法:在卸载 QuickTest Professional Floating License Server 版本 6.0 之前备份 lservrc 文件,然后将该文件复制到新的安装路径,或者在安装许可证服务器后重新安装许可证字符串。
解决方法:在您的系统中(\windows\system 或 \winnt\system32 目录下)查找 itcc.dll。如果找到它,请使用 regsvr32.exe 对其进行注册。如果 itcc.dll 根本不在您的系统中,则可以从以下网址下载一个副本:http://www.mvps.org/htmlhelpcenter/htmlhelp/hhtips.html#hhc6003。再次使用 HTML Help Workshop 之前,可能需要重新启动计算机。
解决方法:从 Windows 任务管理器终止 msiexec.exe 和 Ikernel.exe 进程,并重新启动您的计算机。如果是在安装过程中发生该问题,请从 Windows 任务管理器终止 msiexec.exe 和 Ikernel.exe 进程,然后重新运行安装程序。
解决方法:执行卸载后,手动删除 QuickTest Professional 安装文件夹中剩余的任何文件。
解决方法:执行卸载后,手动删除 QuickTest Professional 安装文件夹中剩余的任何文件。
Microsoft Data Access Components 2.5
l_+C+EiY.e*K9E7e)H:M156874要安装该程序,需要在驱动器 C: 上具有 20000 KB 磁盘空间。建议您释放所需的磁盘空间,然后继续。 软件测试专业网站:51Testing软件测试网B4^,MN*w7X6\^6R
是否仍要继续?解决方法:单击“是”并继续安装过程。
向前兼容性
录制和运行测试或组件
- 在“录制和运行设置”对话框的“Web”选项卡中选择了“在任何打开的 Web 浏览器上录制和运行测试”时,必须在打开 QuickTest Professional 之后打开浏览器。否则,QuickTest 将无法正确地录制和运行测试。
- QuickTest Professional 不支持录制 Web (HTML) 对象上的拖放操作。
- QuickTest Professional 使用 Microsoft 正则表达式,在 Microsoft 正则表达式中,字符 . 代表除 \n 以外的任何字符。在较旧版本的 QuickTest Professional 中,该字符代表任意字符。
- 在步骤生成器中,如果将焦点放在一个或多个可选方法参数的单元格上(单击该单元格)但不输入值,步骤生成器会将该单元格的内容视为包含空字符串(非空),因而将它们视为强制值。如果发生此情况,将显示一个消息,提示您使用自动完成选项输入默认值或手动输入有效值。无法单击该消息中的“是”选择自动完成选项。
- 在步骤生成器中,如果您添加了在测试中返回对象和分配的方法,或者组件缺少 Set 语句,则运行会话将失败。
- 在数据表中选择一个单元格或一行,然后按键盘上的 Ctrl+X 或 Delete 键,将删除选定单元格或行中的数据,但不会删除实际的单元格或行。这样,如果您使用这些快捷键之一删除数据表中的数据时,QuickTest 将仍对该行运行一次循环。
- 如果您导入包含组合框、列表单元格、条件格式或其他特殊单元格格式的 Microsoft Excel 表,将不会导入格式,并且单元格在数据表中显示时带有固定值。
- 处理数据表时,可以启动 Formula One Designer。该实用程序是外部第三方实用程序,QuickTest 不支持。
- 如果 Active Screen 在网页中显示 Java applet 或 ActiveX 控件,则该 applet 或控件仅用于进行查看,您无法对对象执行操作(例如,创建检查点、添加方法等等)。
- 相对屏幕进行模拟录制时,相应的 Active Screen 不会显示以前执行过的模拟步骤的结果。
- 您只能为 QuickTest Professional 在其上录制 Click 或 DoubleClick 方法的对象创建虚拟对象。
- 如果在只是部分可见的对象(即,对象的一部分显示在屏幕以外)上插入位图检查点,QuickTest Professional 将仅捕获该对象的可见部分。
- 从数据表返回的值始终转换为字符串。
- Exist 方法的 Timeout 参数的行为,在 QuickTest 6.5 版和 8.x 版之间有所改动。在 8.x 版中,其行为如下:
- 如果指定了超时值,则 QuickTest 将等待,直至找到对象或到达超时设置。
- 如果指定了值 0,则该方法将立即返回 True 或 False 值。
- 对于测试,如果未指定值,则将使用在“测试设置”对话框中为“对象同步超时”指定的值。对于组件,将使用默认设置 20 秒。
- 为所有 Exist 语句的超时参数添加 0 值。
- 使用库文件中的 RegisterUserFunc 语句,将 Exist 的行为修改为等于 Exist(0),然后将该库文件与所有相关测试相关联。
- 测试、组件和操作参数的名称都区分大小写。
- 如果创建包含虚拟对象的测试或组件,并且使用不同的屏幕分辨率设置运行它,则虚拟对象上的操作可能无法正确执行。
- 如果在“选项”对话框的“运行”选项卡中为“将步骤屏幕捕获内容保存到结果中”选项选择“出错时”,则对于不是基于 Web 的应用程序,不会将屏幕捕获内容(包括错误)保存到结果。
- 从 Quality Center 测试集运行 QuickTest 测试时,或使用 QuickTest 自动操作时,将忽略“运行会话期间发生错误时”设置(“测试”>“设置”>“运行”选项卡)。而是,在发生错误时,QuickTest 将自动继续下一步骤。如果要更改此设置,请与 Mercury 客户支持联系,以便获得更多信息。
- QuickTest 不会录制从“开始”菜单启动 Windows 帮助的过程。
- 如果在录制过程中窗口标题发生了变化,则运行测试或组件时,QuickTest 可能会无法识别该窗口中的对象。
- 在录制时插入的检查点中的 Focused 属性的值将始终为 False。
- 运行会话中的错误将导致结果中产生多个错误节点。
- 测试或组件中不能使用在库文件中定义的 VBscrīpt 类。
- 对于 WinComboBox、WinList、WinListView、VbComboBox、VbList 和 VbListView 测试对象,GetItemProperty 方法可能无法正确地返回文本属性值。
- 如果某个测试或组件包含一个 For Each 语句,该语句对 ParameterDefinitions 集合运行循环,则如果该集合是在使用 For Each 语句之前直接检索的,运行该测试或组件可能会失败。
- 在 QuickTest 6.0 和更低版本中,分配给测试对象的名称(以前称为逻辑名称)是区分大小写的。如果在 QuickTest 8.2 中打开测试或组件,而该测试或组件的对象库是在这些版本之一中创建的,并且包含两个相同(大小写除外)的名称,则 QuickTest 会自动使用在测试、操作或组件中的对象库中都是唯一的名称来替换它们。
- 关键字视图经过像素化处理,难以读取颜色设置小于 256 色的内容。
- 如果将焦点更改到关键字视图的“操作”列中的单元格,则不显示工具提示。
- 如果使用指向手机制,QuickTest 不会在以下场景中自动最小化:使用的是 Windows XP Service Pack 2,且在 Windows XP“显示属性”对话框的“外观”选项卡中选择了“Windows XP 样式”,同时 QuickTest 处于最大化状态。
- 如果运行具有大量循环和业务组件的业务流程测试,则可能会在若干时间后遇到内存可用性问题。
- Quality Center 中组件的完整路径(例如,Components/CompFolder1/MyComponent)不能超过 225 个字符。
- 使用 Business Process Testing 时,不应在同一台计算机上同时在 Quality Center 和 QuickTest Professional 中使用同一个业务组件。这样做可能会损坏该业务组件。
解决方法:将 . 字符更改为 [.\n]。
解决方法:单击该消息中的“否”手动输入可选参数的值,或单击“取消”关闭步骤生成器,然后重新打开步骤生成器,输入不带可选参数的语句。
解决方法:要从数据表中删除整个单元格或行,请选中它并从上下文菜单中选择“删除”,或者按键盘上的 Ctrl+K。
解决方法:录制 Java applet/ActiveX 控件中的操作,使用加载的 ActiveX 加载项和/或 Java 加载项(可以单独使用)在对象上创建一个步骤。然后可以从 Active Screen 中单独的 Java applet/ActiveX 控件创建检查点、参数化步骤或添加方法。
解决方法:使用 VBscrīpt 转换函数,例如 CInt、CLng、CDbl 等等。例如,Window("Flight Reservation").WinComboBox("Fly From:").Select CInt(DataTable("ItemNumber", dtGlobalSheet))。
要恢复为 6.5 版的默认行为(默认超时为 0),请执行下列操作:
注意: 建议您不要将“对象同步超时”设置为 0,因为这会使 QuickTest 无法识别那些需花费时间进行加载的对象。此外,还有将“对象同步超时”用作默认值的其他方法,如 WaitProperty 和 Sync。
解决方法:测试标准 Windows 应用程序时,为“将步骤屏幕捕获内容保存到结果中”选项选择“出错和警告时”。
解决方法:从“对象库”对话框的该窗口中的测试对象描述中删除文本属性。
解决方法:手动更改该属性的值或者对测试或组件执行更新运行操作。
解决方法:使用 GetItem 方法为这些测试对象检索文本属性值。
解决方法:使用其他 VBscrīpt 循环语句,例如 For 或 While。
解决方法:将颜色设置至少增大为 256 色。
解决方法:将 Windows XP 显示样式更改为“Windows 经典”,或者在使用指向手机制之前不最大化 QuickTest。如果已在上述场景中选择了指向手,则可以使用 Alt+Tab 显示所需应用程序,或使用 Ctrl 键在更改窗口焦点时暂时禁用指向手机制。
解决方法:使用“远程代理设置”对话框(“开始”>“程序”>“QuickTest Professional”>“工具”>“远程代理”)中的“__ 次运行后重新启动测试工具”选项计算正在运行的业务组件数,并在通过定义的阈值后于第一个业务流程测试循环的结尾自动重新启动 QuickTest。
在 Web 对象上录制和运行测试及组件
- 如果录制在图像映射(未映射到 Internet Explorer 中的 URL)区域中的单击,则 QuickTest Professional 将在运行会话过程中在该映射的第一个映射区域中执行单击。
- QuickTest Professional 仅录制 <input type="file"> 标记上的编辑字段中的更改。不会录制浏览操作。
- 页面的源/HTML 标记上的检查点不能从 Active Screen 插入,而是必须在录制过程中插入。第一次运行会话时,这些检查点可能会失败。
- 单击类型为 POST 的表单标记可能运行不正确。
- QuickTest Professional 不会在 Internet Explorer 浏览器的搜索帧上录制。
- QuickTest Professional 不会在 Internet Explorer 浏览器的查找窗口中录制。
- 如果在根据 MouseOver 事件进行更改的图像上执行检查点,验证可能会失败。
- 如果使用 Tab 键在密码字段的“自动完成”对话框中录制,QuickTest Professional 可能无法正确录制。
- 如果在使用包含浏览器控件的应用程序(而不是使用 Web 浏览器)时从 Active Screen 插入检查点,则您的检查点可能会失败。
解决方法:在运行包含页的源/HTML 标记检查点的测试或组件之前,对该测试或组件执行更新运行(“测试”>“更新运行”或“组件”>“更新运行”)。
解决方法:如果发生此问题,请在单击“根据鼠标操作运行”之前使用以下语句更改 ReplayType:Setting.WebPackage("ReplayType") = 2。建议在单击步骤之后将回放类型恢复为默认(“根据事件运行”)设置:Setting.WebPackage("ReplayType") = 1。
解决方法:在“Web 事件录制配置”对话框中启用在 MouseOver 事件上录制,或者将函数插入脚本中。有关 Web 事件录制配置的详细信息,请参阅《Mercury QuickTest Professional 用户指南》。
解决方法:在输入用户名后按 Enter 键或单击用于登录的按钮。
解决方法:在录制过程中插入检查点。
在 Netscape 中录制和运行测试或组件
- QuickTest Professional 不支持 Netscape 6.x 和 7.x 菜单。
- 在该版本的 QuickTest 中,Netscape 浏览器不支持 Web 对象的 .Object 属性。
- Netscape 处于最小化模式时,QuickTest Professional 无法在 Netscape 中运行测试或组件。
- 使用 Netscape 录制测试或组件时,Active Screen 将页面图像显示为页面在加载时被捕获的图像。不会显示对页面所做的更改,例如在编辑框中输入数据。
- 在录制会话过程中使用 Netscape 浏览器创建表检查点所得到的结果,与在从 Active Screen(作用类似于 Internet Explorer 浏览器)中进行录制后创建表检查点所得到的结果可能不同。
- QuickTest 可能无法在“激活”窗口(该窗口有时候会在 Netscape 6.x 和 7.x 启动时打开)中录制。
- 并不会始终为 Netscape 6.x 和 7.x 录制 MouseOver 事件。
- Netscape 6.x 和 7.x 对话框不显示在 Active Screen 中。
- QuickTest 仅录制 Netscape 6.x 和 7.x 对话框中的按钮、复选框和编辑框。
- “对象侦查”和“检查点属性”对话框不会检索 Netscape 6.x 和 7.x 对话框中的编辑框的当前值。
- 在 Netscape 中以低级录制模式录制的测试或组件不会在 Internet Explorer 浏览器中运行。虽然在两种浏览器中以低级模式录制的测试或组件看起来相似,但对象描述不同,这就限制了测试或组件在作为录制地点的相同浏览器中运行。
- 以低级模式在 Netscape 6.x 和 7.x 中包含 applet 的页面上录制时,QuickTest 在运行会话过程中可能无法识别该 applet。
解决方法:如果计划使用 Netscape 运行测试或组件,则在录制的同时在 Netscape 浏览器中创建检查点。如果计划使用 Internet Explorer 运行测试或组件,则在录制的同时在 Internet Explorer 浏览器中创建检查点,或者在录制后使用 Active Screen 创建检查点。
解决方法:在 QuickTest 中启动 Netscape 之前完成激活。
解决方法:您可以使用“自定义 Web 事件录制配置”对话框来启用在其他对象上的录制。
解决方法:在运行组件或测试以及测试的每次循环之前,必须关闭 Netscape 浏览器。
在 AOL 中录制和运行测试或组件
在标准 Windows 对象上录制和运行测试及组件
- 在 WinMenu 对象上录制时,不会捕获 Active Screen。
- 您不能在 WinMenu 对象上插入检查点。
- 检查点不支持样式为简单组合框的组合框对象。
- 使用 Windows 徽标快捷键进行录制时,录制可能不精确。
- 更改 WinCalendar 的样式(例如,从单选更改为多选)将导致运行会话失败。
- 使用“对象侦查”中的指向手机制指向 MFC 静态文本或选项卡控件时,QuickTest 可能无法返回正确的对象。
解决方法:使用 GetItemProperty 方法来检索并验证菜单项。
解决方法:录制时使用“开始”菜单而不要使用 Windows 徽标键。
解决方法:通过指向对象的父窗口并选择“选定对象及其所有后代”,将该对象添加到对象库中。将对象添加到对象库以后,便可以使用 GetROProperty 方法来检索其运行时属性。例如:软件测试专业网站:51Testing软件测试网P\\pr6x
width = Dialog("Login").Static("Agent Name:").GetROProperty("width")
zA+S*Dw;] Q zV156874MsgBox width在 Visual Basic 应用程序中录制和运行测试及组件
- 使用 Visual Basic 加载项时,建议选择“在以下应用程序(会话开始时打开的)上录制并运行”选项,然后在“录制和运行设置”对话框的“Windows 应用程序”选项卡中指定应用程序的名称。
- 从 Active Screen 在 VbComboBox 对象上插入检查 sellength 或 seltext 属性的检查点时,捕获的值可能不正确。
- 不支持样式为简单组合框的组合框对象。
- VBLabel 对象不支持文本/文本区检查点和输出值。
如果选择“在任何打开的基于 Windows 的应用程序上录制并运行测试”选项,则应该在第一次开始录制之后打开 Visual Basic 应用程序。
解决方法:手动更新值。
在 ActiveX 控件上录制和运行测试及组件
- 不支持 Netscape 浏览器中的 ActiveX 对象。
- 如果 QuickTest Professional 不能识别网页中的 ActiveX 控件,请降低您的 Internet Explorer 浏览器中的安全级别。
- 如果某个 ActiveX 控件的内部属性具有与由 QuickTest Professional 创建的 ActiveX 属性相同的名称,则检索和验证此类属性会发生问题。
- 从 Active Screen 在 ActiveX 表上插入检查点时,浏览器(或应用程序)必须打开至同一页面(或屏幕)。否则,ActiveX 表中的某些数据将丢失。
- 对 Apex、DataBound 和 Sheridan 网格的行和列位置执行的方法返回可见位置的值,而不是返回表中的绝对位置的值。
- QuickTest 可能无法正确捕获无窗口的 ActiveX 控件的某些内部属性,例如 x、y、高和宽。
- 在 ActiveX 控件上录制时,在移动鼠标之前先等待录制步骤显示。移动鼠标太快可能会导致该步骤的 Active Screen 损坏。
- 在无窗口的 ActiveX 控件上录制可能导致将某些其他步骤添加到您的测试或组件中(例如,AcxRadioButton 对象上除 Set 方法外,还添加一个 Click 方法)。这些额外步骤不会导致运行会话失败。
- 不支持无窗口的 ActiveX 控件上的 Drag 和 Drop 操作。
- Microsoft 数据绑定网格控件不支持 AcxTable.RowCount 方法。
- 表检查点仅捕获数据绑定网格中可见的行。
- QuickTest 可能无法识别由编程描述标识的无窗口 ActiveX 控件。
- 不支持类型为 VT_DISPATCH 的 ActiveX 属性的检查点和输出值。
- 不支持只写模式的 ActiveX 属性的检查点和输出值。
解决方法:您可以使用 Object 属性来访问 ActiveX 控件的内部属性。
解决方法:在录制过程中创建 ActiveX 表检查点。
解决方法:在录制过程中使用滚动条来显示需要的单元格。
解决方法:将 Windowless=True 添加到编程描述中。
示例:
set myButton = Descrīption.Create
myButton("progid").Value = "Forms.CommandButton.1"
myButton("Windowless").Value = True
Dialog("ActiveX Collection Client").AcxButton(myButton).Click
文本识别
- 在运行会话中,QuickTest 文本识别机制可能以不同的方式起作用,具体取决于您使用的操作系统版本、已经安装的 service pack、其他安装的工具包、应用程序中使用的 API 等等。
- 对于文本检查点 - 创建标准检查点或输出值,并从对话框中选择文本(或等效值)属性,而不是在基于 Windows 的应用程序(标准 Windows、Visual Basic、ActiveX、.NET Windows Forms)和终端仿真器(非 HLLAPI)环境中创建文本(或文本区)检查点或输出值。
- 对于 GetVisibleText 和 GetTextLocation - 使用 GetROProperty 方法或 Object 属性从应用程序的对象中检索文本(或等效值)属性值,而不是使用 GetVisibleText 和 GetTextLocation 方法来检索。
- 尝试使用 GetROProperty 方法和/或 Object 属性的结果。
- 用于将文本写入特定对象或窗口的方法、API 或函数。
- 用于读取特定对象或窗口中的文本的方法、API 或函数。
- 您试图从其中检索文本的窗口和/或对象的屏幕捕获。
- 窗口和/或对象的属性。
为避免运行会话失败,强烈建议尽量使用以下方法之一来检查或检索文本:
有关创建文本检查点和使用 GetROProperty 方法或 Object 属性的详细信息,请参阅《Mercury QuickTest Professional 用户指南》。您也可以在 Mercury 客户支持网站 (http://support.mercury.com) 的联机知识库中找到详细信息。
如果需要使用 GetVisibleText 和/或 GetTextLocation 方法从对象和/或窗口中检索文本,并且检索功能的效果不能始终如您所愿,则向 Mercury 客户支持网站 (http://support.mercury.com) 提供以下信息:






