测试工具工作原理

测试工具工作原理
测试工具工作原理

Selenium 工作原理

selenium 是thoughtWorks公司的一个强大的开源Web功能测试工具系列,采用javascript来管理整个测试过程,包括读入测试套件,执行测试和记录测试结果。它采用javascript单元测试工具JSUnit为核心,模拟正式用户操作,包括浏览页面,点击链接,输入文字,提交表单,触发鼠标事件等。并且能够对页面结果进行种种验证。也就是说,只要在测试用例中把预期的用户行为与结果都描述出来,我们就得到了一个可以自动化运行的功能测试套件。Selenium的核心是用javascript写的,他和浏览器进行通行,把测试用例的信息发送给浏览器执行,从而达到自动化测试的目的

通过研究selenium-webdriver的源码,笔者发现其实webdriver的实现原理并不高深莫测无法揣度。在这里以webdriver ruby binding的firefox-webdriver实现为例,简单介绍一下webdriver的工作原理。

?当测试脚本启动firefox的时候,selenium-webdriver会首先在新线程中启

动firefox浏览器。如果测试脚本指定了firefox的profile,那么就以该profile

启动,否则的话就新启1个profile,并启动firefox;

?firefox一般是以-no-remote的方法启动,启动后selenium-webdriver会

将firefox绑定到特定的端口,绑定完成后该firefox实例便作为webdriver的

remote server存在;

?客户端(也就是测试脚本)创建1个session,在该session中通过http请求

向remote server发送restful的请求,remote server解析请求,完成相应操

作并返回response;

?客户端接受response,并分析其返回值以决定是转到第3步还是结束脚本;

这就是webdriver的工作流程,看起来很复杂实际上当了解了webdriver的实现原理后,理解上述问题应该比较简单。

webdriver是按照server – client的经典设计模式设计的。

server端就是remote server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应;

client端简单说来就是我们的测试代码,我们测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被测试浏览器,也就是remote server;remote server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息;

举个实际的例子,下面代码的作用是”命令”firefox转跳到google主页:

driver = Selenium::WebDriver.for :firefox

driver.navigate.to "https://www.360docs.net/doc/9c8250540.html,"

在执行driver.navigate.to “https://www.360docs.net/doc/9c8250540.html,” 这句代码时,client,也就是我们的测试代码向remote server发送了如下的请求:

POST session/285b12e4-2b8a-4fe6-90e1-c35cba245956/url

post_data {"url":"https://www.360docs.net/doc/9c8250540.html,"}

通过post的方式请求localhost:port/hub/session/session_id/url地址,请求浏览器完成跳转url的操作。

如果上述请求是可接受的,或者说remote server是实现了这个接口,那么remote server 会跳转到该post data包含的url,并返回如下的response

{"name":"get","sessionId":"285b12e4-2b8a-4fe6-90e1-c35cba245956"

,"status":0,"value":""}

该response中包含如下信息

?name:remote server端的实现的方法的名称,这里是get,表示跳转到指

定url;

?sessionId:当前session的id;

?status:请求执行的状态码,非0表示未正确执行,这里是0,表示一切ok

不许担心;

?value:请求的返回值,这里返回值为空,如果client调用title接口,则该

值应该是当前页面的title;

如果client发送的请求是定位某个特定的页面元素,则response的返回值可能是这样的:

{"name":"findElement","sessionId":"285b12e4-2b8a-4fe6-90e1-c35cb a245956","status":0,"value":{"ELEMENT":"{2192893e-f260-44c4-bdf6 -7aad3c919739}"}}

name,sessionId,status跟上面的例子是差不多的,区别是该请求的返回值是ELEMENT:{2192893e- f260-44c4-bdf6-7aad3c919739},表示定位到元素的id,通过该id,client可以发送如click之类的请求与server端进行交互。

那么remote server端的这些功能是如何实现的呢?答案是浏览器实现了webdriver的统一接口,这样client就可以通过统一的restful的接口去进行浏览器的自动化操作。目前webdriver支持ie, chrome, firefox, opera等主流浏览器,其主要原因是这些浏览器实现了webdriver约定的各种接口

webdriver原理:

1. WebDriver启动目标浏览器,并绑定到指定端口。该启动的浏览器实例,做为w eb driver的remote server。

2. Client 端通过CommandExcuter发送HTTPRequest给remote server 的侦听端口(通信协议:the webriver wire protocol)

3. Remote server 需要依赖原生的浏览器组件(如:IEDriver.dll,chromedriver.exe),来转化转化浏览器的native调用。

查看命令提示符下的运行日志:

咋一看很乱,慢慢分析一下就发现很有意思!结合上面的脚本分析

---------------------------------------------------------------------------------------

启动代理进入监听状态

C:\selenium>java -jar selenium-server-standalone-2.33.0.jar

八月22, 201310:19:48上午org.openqa.grid.selenium.GridLauncher main INFO: Launching a standalone server

10:19:48.734INFO - Java: Oracle Corporation 23.21-b01

10:19:48.734INFO - OS: Windows XP 5.1x86

10:19:48.734INFO - v2.33.0, with Core v2.33.0. Built from revision 4e90c97 10:19:48.843INFO -RemoteWebDriver instances should connect to: http://127.0. 0.

1:4444/wd/hub

10:19:48.843INFO - Version Jetty/5.1.x

10:19:48.843INFO - Started HttpContext[/selenium-server/driver,/selenium-server /driver]

10:19:48.843INFO - Started HttpContext[/selenium-server,/selenium-server] 10:19:48.843INFO - Started HttpContext[/,/]

10:19:48.890INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@176343 e

10:19:48.890INFO - Started HttpContext[/wd,/wd]

10:19:48.906INFO - Started SocketListener on 0.0.0.0:4444

10:19:48.906INFO - Started org.openqa.jetty.jetty.Server@388c74

--------------------------------------------------------------------------------------

创建新session

10:20:38.593INFO - Executing: [new session: {platform=ANY, javascriptEnable d=tr

ue, browserName=chrome, version=}] at URL: /session)

10:20:38.593INFO - Creating a new session for Capabilities [{platform=ANY, java

scriptEnabled=true, browserName=chrome, version=}]

webdrivr通过GET方式发送请求

[0.921][INFO]: received Webriver request: GET /status

向webdrver返回响应,返回码200表示成功

[0.921][INFO]: sending Webriver response: 200{

"sessionId": "",

"status": 0,

"value": {

"build": {

"version": "alpha"

},

"os": {

"arch": "x86",

"name": "Windows NT",

"version": "5.1 SP3"

}

}

}

webdriver再次以POST方式发送请求,并启动浏览器相关信息

[0.984][INFO]: received Webriver request: POST /session { "desiredCapabilities": {

"browserName": "chrome",

"javascriptEnabled": true,

"platform": "ANY",

"version": ""

}

}

[0.984][INFO]: Launching chrome: "C:\ocuments and Settings\Administrator\Loca l S

ettings\Application ata\Google\Chrome\Application\chrome.exe" --remote-debuggin g

-port=4223--no-first-run --enable-logging --logging-level=1--user-data-dir="C:

\OCUME~1\AMINI~1\LOCALS~1\Temp\scoped_dir1808_7550" --load-extension= "C:\OCUME~1

\AMINI~1\LOCALS~1\Temp\scoped_dir1808_26821\internal" --ignore-certificate-e rror

sdata:text/html;charset=utf-8,

[1.773][INFO]: sending Webriver response: 303

webdriver再次以GET方法请求,这附加上了session的信息

[1.778][INFO]: received Webriver request: GET /session/32b33aa585ccbbf7ba785 3588

2852af3

服务器先对sesssionID进行解析,确认是selenium调用的以及要访问的网址,[1.779][INFO]: sending Webriver response: 200{

"sessionId": "32b33aa585ccbbf7ba78535882852af3",

"status": 0,

"value": {

"acceptSslCerts": true,

"applicationCacheEnabled": false,

"browserConnectionEnabled": false,

"browserName": "chrome",

"chrome": {

"chromedriverVersion": "2.0"

},

"cssSelectorsEnabled": true,

"databaseEnabled": true,

"handlesAlerts": true,

"javascriptEnabled": true,

"locationContextEnabled": true,

"nativeEvents": true,

"platform": "Windows NT",

"rotatable": false,

"takesScreenshot": true,

"version": "27.0.1453.116",

"webStorageEnabled": true

}

}

10:20:40.640INFO - Done: /session

10:20:40.640INFO - Executing: org.openqa.selenium.remote.server.handler.GetSe ss

ionCapabilities@14cf7a1 at URL: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061f c)

10:20:40.640INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc 10:20:40.656INFO - Executing: [get: https://www.360docs.net/doc/9c8250540.html,] at URL: /session /ac5

b2c71-5b1a-469e-814c-fdd09a2061fc/url)

webdriver正试向服务器请求youdao网站

[1.820][INFO]: received Webriver request: POST /session/32b33aa585ccbbf7ba78 5358

82852af3/url {

"url": "https://www.360docs.net/doc/9c8250540.html,"

}

[1.822][INFO]: waiting for pending navigations...

[1.829][INFO]: done waiting for pending navigations

[2.073][INFO]: waiting for pending navigations...

[2.900][INFO]: done waiting for pending navigations

获得服务器数据的应答

[2.900][INFO]: sending Webriver response: 200{

"sessionId": "32b33aa585ccbbf7ba78535882852af3",

"status": 0,

"value": null

}

10:20:41.734INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/url --------------------------------------------------------------------------------------

下面接着发送定位输入框的信息

10:20:41.734INFO - Executing: [find element: https://www.360docs.net/doc/9c8250540.html,: q] at URL: /session/a c5b2

c71-5b1a-469e-814c-fdd09a2061fc/element)

[2.905][INFO]: received Webriver request: POST /session/32b33aa585ccbbf7ba78 5358

82852af3/element {

"using": "name",

"value": "q"

}

[2.905][INFO]: waiting for pending navigations...

[2.905][INFO]: done waiting for pending navigations

[2.922][INFO]: waiting for pending navigations...

[2.922][INFO]: done waiting for pending navigations

得到服务器应答

[2.922][INFO]: sending Webriver response: 200{

"sessionId": "32b33aa585ccbbf7ba78535882852af3",

"status": 0,

"value": {

"ELEMENT": "0.19427558477036655:1"

}

}

10:20:41.765INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/ele ment

10:20:41.765INFO - Executing: [send keys: 0org.openqa.selenium.support.event s.

EventFiringWebDriver$EventFiringWebElement@a8215ba9, [h, e, l, l, o]] at UR L: /s

ession/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/element/0/value)

向定位到的输入框写入hello

[2.936][INFO]: received Webriver request: POST /session/32b33aa585ccbbf7ba78 5358

82852af3/element/0.19427558477036655:1/value {

"id": "0.19427558477036655:1",

"value": [ "h", "e", "l", "l", "o"]

}

[2.936][INFO]: waiting for pending navigations...

[2.936][INFO]: done waiting for pending navigations

[3.002][INFO]: waiting for pending navigations...

[3.002][INFO]: done waiting for pending navigations

[3.002][INFO]: sending Webriver response: 200{

"sessionId": "32b33aa585ccbbf7ba78535882852af3",

"status": 0,

"value": null

}

10:20:41.843INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/ele ment/

0/value

再次发送定位输入框的请求

10:20:41.843INFO - Executing: [find element: https://www.360docs.net/doc/9c8250540.html,: q] at URL: /session/a c5b2

c71-5b1a-469e-814c-fdd09a2061fc/element)

[3.006][INFO]: received Webriver request: POST /session/32b33aa585ccbbf7ba78 5358

82852af3/element {

"using": "name",

"value": "q"

}

[3.006][INFO]: waiting for pending navigations...

[3.006][INFO]: done waiting for pending navigations

[3.016][INFO]: waiting for pending navigations...

[3.016][INFO]: done waiting for pending navigations

[3.016][INFO]: sending Webriver response: 200{

"sessionId": "32b33aa585ccbbf7ba78535882852af3",

"status": 0,

"value": {

"ELEMENT": "0.19427558477036655:1"

}

}

10:20:41.859INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/ele ment

10:20:41.859INFO - Executing: [send keys: 0org.openqa.selenium.support.event s.

EventFiringWebDriver$EventFiringWebElement@a8215ba9, [k, e, y, ., E, N, T, E, R]

] at URL: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/element/0/value)

对定位的到的输入框发送回车(ENTER)事件请求

[3.021][INFO]: received Webriver request: POST /session/32b33aa585ccbbf7ba78 5358

82852af3/element/0.19427558477036655:1/value {

"id": "0.19427558477036655:1",

"value": [ "k", "e", "y", ".", "E", "N", "T", "E", "R"]

}

[3.021][INFO]: waiting for pending navigations...

[3.021][INFO]: done waiting for pending navigations

[3.064][INFO]: waiting for pending navigations...

[3.064][INFO]: done waiting for pending navigations

[3.064][INFO]: sending Webriver response: 200{

"sessionId": "32b33aa585ccbbf7ba78535882852af3",

"status": 0,

"value": null

}

10:20:41.906INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/ele ment/

0/value

10:20:41.906INFO - Executing: [close window] at URL: /session/ac5b2c71-5b1 a-469

e-814c-fdd09a2061fc/window)

[3.068][INFO]: received Webriver request: ELETE /session/32b33aa585ccbbf7ba7 8535

882852af3/window

[WARNING:chrome_desktop_https://www.360docs.net/doc/9c8250540.html,(88)] chrome detaches, user should take car e of d

irectory:C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\scoped_dir1808_7550 and C:\DOCUME~1\

ADMINI~1\LOCALS~1\Temp\scoped_dir1808_26821

[5.318][INFO]: sending Webriver response: 200{

"sessionId": "32b33aa585ccbbf7ba78535882852af3",

"status": 0,

"value": null

}

10:20:44.156INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/win dow

request请求/ response应答

一次请求会对应一次应答

POST/GET是请求(request)两种类型;关于两种请求方式的类别参考其它资料

200 、203是HTTP请求返回的状态码,200表示成功;

sessionid:每一个访问服务器的客户端,都要先得到服务器端分配的一个sessionid,就像通行证一样,只有得到sessionid的客户端才能向服务器请求想要的数据。

其它还包括操作系统版本,浏览器类型、URL、字符类型等非常详细的记录。熟悉HTTP ,了解TCP 的三次握手四次挥手,相信你对浏览器的交互与webdriver 原理会有更深入的认识。

最近比较空闲就仔细看了一下Selenium的源码,因为主要是使用WebDriver所

以重点关注了一下WebDriver的工作原理。在前一篇blog里已经解释过了

WebDriver与之前Selenium的JS注入实现不同,直接利用了浏览器native

support来操作浏览器。所以对于不同平台,不同的浏览器,必须依赖一个特定

的浏览器的native component来实现把WebDriver API的调用转化为浏览器的

native invoke。

在我们new一个WebDriver的过程中,Selenium首先会确认浏览器的native

component是否存在可用而且版本匹配。接着就在目标浏览器里启动一整套Web

Service,这套Web Service使用了Selenium自己设计定义的协议,名字叫做

The WebDriver Wire Protocol。这套协议非常之强大,几乎可以操作浏览器做

任何事情,包括打开、关闭、最大化、最小化、元素定位、元素点击、上传文件

等等等等。

WebDriver Wire协议是通用的,也就是说不管是FirefoxDriver还是

ChromeDriver,启动之后都会在某一个端口启动基于这套协议的Web Service。

例如FirefoxDriver初始化成功之后,默认会从http://localhost:7055开始,

而ChromeDriver则大概是http://localhost:46350之类的。接下来,我们调用

WebDriver的任何API,都需要借助一个ComandExecutor发送一个命令,实际上

是一个HTTP request给监听端口上的Web Service。在我们的HTTP request的

body中,会以WebDriver Wire协议规定的JSON格式的字符串来告诉Selenium

我们希望浏览器接下来做社么事情。

这里笔者初步画了一个图来表示各种WebDriver的工作原理:

从上图中我们可以看出,不同浏览器的WebDriver子类,都需要依赖特定的浏览器原生组件,例如Firefox就需要一个add-on名字叫webdriver.xpi。而IE的话就需要用到一个dll文件来转化Web Service的命令为浏览器native的调用。另外,图中还标明了WebDriver Wire协议是一套基于RESTful的web service。如果不明白什么是RESTful的,可以参见笔者之前另外一篇介绍REST的

blog(https://www.360docs.net/doc/9c8250540.html,/ant_yan/article/details/7963517)

关于WebDriver Wire协议的细节,比如希望了解这套Web Service能够做哪些事情,可以阅读Selenium官方的协议文档,在Selenium的源码中,我们可以找到一个HttpCommandExecutor这个类,里面维护了一个Map,它负责将一个个代表命令的简单字符串key,转化为相应的URL,因为REST的理念是将所有的操作视作一个个状态,每一个状态对应一个URI。所以当我们以特定的URL发送HTTP request给这个RESTful web service之后,它就能解析出需要执行的操作。截取一段源码如下:

[java]view plaincopyprint?

1. nameToUrl = ImmutableMap.

CommandInfo>builder()

2. .put(NEW_SESSION, post("/session"))

3. .put(QUIT,

delete("/session/:sessionId"))

4. .put(GET_CURRENT_WINDOW_HANDLE,

get("/session/:sessionId/window_handle

"))

5. .put(GET_WINDOW_HANDLES,

get("/session/:sessionId/window_handle

s"))

6. .put(GET,

post("/session/:sessionId/url"))

7.

8. // The Alert API is still experimental

and should not be used.

9. .put(GET_ALERT,

get("/session/:sessionId/alert"))

10. .put(DISMISS_ALERT,

post("/session/:sessionId/dismiss_aler

t"))

11. .put(ACCEPT_ALERT,

post("/session/:sessionId/accept_alert

"))

12. .put(GET_ALERT_TEXT,

get("/session/:sessionId/alert_text"))

13. .put(SET_ALERT_VALUE,

post("/session/:sessionId/alert_text")

)

可以看到实际发送的URL都是相对路径,后缀多以/session/:sessionId开头,这也意味着WebDriver每次启动浏览器都会分配一个独立的sessionId,多线程并行的时候彼此之间不会有冲突和干扰。例如我们最常用的一个WebDriver的API,getWebElement在这里就会转化为/session/:sessionId/element这个URL,然后在发出的HTTP request body内再附上具体的参数比如by ID还是CSS还是Xpath,各自的值又是什么。收到并执行了这个操作之后,也会回复一个HTTP

response。内容也是JSON,会返回找到的WebElement的各种细节,比如text、CSS selector、tag name、class name等等。以下是解析我们说的HTTP response 的代码片段:

[java]view plaincopyprint?

1. try {

2. response = new

JsonToBeanConverter().convert(Response

.class, responseAsText);

3. } catch (ClassCastException e) {

4. if (responseAsText != null &&

"".equals(responseAsText)) {

5. // The remote server has died, but has

already set some headers.

6. // Normally this occurs when the final

window of the firefox driver

7. // is closed on OS X. Return null, as the

return value _should_ be

8. // being ignored. This is not an elegant

solution.

9. return null;

10. }

11. throw new WebDriverException("Cannot

convert text to response: " +

responseAsText, e);

12. } //...

相信总结道这里,应该对WebDriver的运行原理应该清楚了!其实挺佩服这一套

RESTful web service的设计。感觉封装WebDriver暴露出来的public API还可以更加友好跟强大一点,这次就先总结道这里,会继续分析Selenium源码,继续分享的!

Loadrunner工作原理

对于lr的原理,我想应该和其它性能测试工具的原理是一样的。

一般来说,性能测试工具都有一个虚拟用户脚本产生器(vugen),压力产生器和用户代理、压力调度和监控系统、压力结果分析工具

对于虚拟用户产生器来讲,主要的功能就是通过代理接收从客户端发送的数据包,记录并转发给服务器,接收服务器端的数据包,记录并转发给客户端。除此之外,虚拟用户脚本生成器在截获数据之后,根据录制时使用的协议对数据包分析,用脚本函数记录下来。并提供了编译和调试的环境,用于对脚本的优化和修改

压力产生器用于根据压力调度系统的命令,产生实际的负载

压力调度和监控系统:压力调度工具可以根据用户的场景要求,设置不同的Vu数量等监控系统主要是用于对数据库、服务器的性能计数器等的监控

压力结果分析工具主要是将获取的性能计数器的信息,生成相应的分析图

一、LoadRunner工具组成

1、虚拟用户脚本生成器:捕获最终用户业务流程和创建自动性能测试脚本,即我们在以后说的产生测试脚本;

2、压力产生器:通过运行虚拟用户产生实际的负载;

3、用户代理:协调不同负载机上虚拟用户,产生步调一致的虚拟用户;

4、压力调度:根据用户对场景的设置,设置不同脚本的虚拟用户数量;

5、监视系统:监控主要的性能计数器;

6、压力结果分析工具:本身不能代替分析人员,但是可以辅助测试结果的分析。

二、LoadRunner工具原理

代理(Proxy)是客户端和服务器端之间的中介人,LoadRunner就是通过代理方式截获客户端和服务器之间交互的数据流。

1、虚拟用户脚本生成器通过代理方式接收客户端发送的数据包,记录并将其转发给服务器端;接收到从服务器端返回的数据流,记录并返回给客户端。

这样服务器端和客户端都以为在一个真实运行环境中,虚拟脚本生成器能通过这种方式截获数据流;虚拟用户脚本生成器在截获数据流后对其进行了协议层上的处理,最终用脚本函数将数据流交互过程体现为我们容易看懂的脚本语句。

2、压力生成器则是根据脚本内容,产生实际的负载,扮演产生负载的角色。

3、用户代理是运行在负载机上的进程,该进程与产生负载压力的进程或是线程协作,接受调度系统的命令,调度产生负载压力的进程或线程。

4、压力调度是根据用户的场景要求,设置各种不同脚本的虚拟用户数量,设置同步点等。

5、监控系统则可以对数据库、应用服务器、服务器的主要性能计数器进行监控。

6、压力结果分析工具是辅助测试结果分析。

LoadRunner由以下部分组成:

?虚拟用户发生器: Vuser Generator

?压力调度和监控中心: Controller

?压力产生器:Load Generator

?压力结果分析工具: Analysis

Vuser Generator是一个集成开发环境,用于录制回放修改Vuser脚本.Controller是一个框架程序和监控程序,负责将Vuser脚本以多进程/多线程方式在Load Generator机器上运行.Analysis是一个数据分析工具,可以安装在任何Windows平台机器上.

Loadrunner进行测试的一般步骤:

1.用户确定进行测试的业务或者交易,录制并生成脚本

2.手工修改脚本,确定脚本能回放成功

3.在Controller中对场景进行配置,启动测试,Controller控制Load Generator 对被测系统的加压方式和行为

4.Controller负责搜集被测系统各个环节的性能数据.各个Load Generator会记录最终用户相应时间和脚本执行的日志

5.压力测试运行结束以后, Load Generator将数据传送到Controller中,由Controller对测试数据进行汇总

6.用Analysis对数据进行分析

7.对系统进行调优,重复进行压力测试,确定性能是否有所提高

QTP工作原理

1.录制的时候,QTP将我们操作过的所有对象都记录下来,保存在对象库object repository中,记录的形式是一个逻辑名加上若干识别属性

2.运行脚本时,QTP分析该脚本要执行那个对象的操作,然后根据该语句中的逻辑名,在对象库中查找该对象的详细记录,然后在运行的真实披头散发软件中按图索骥,找到需要操作的对象,把语句规定的操作施加在该对象上.施加的主要动作就是把操作的相关消息时间放入到该对象窗口的消息循环队列中

3.所以,一个完整的脚本测试应该包括两部分,一个是测试脚本的代码,一个是对象库

另外:

描述性编程和传统的QTP脚本的区别是:他把需要识别的对象的属性从对象库中转移到了脚本里面,通过在脚本里面的特殊语法格式.来告诉QTP识别对象的方法.描述性编程更加灵活,因为他不需要经过录制这个步骤,可以直接通过编程的方式操作任何一个你想操作的对象,只要你在测试脚本代码里提供给QTP识别该对象的足够信息。

描述性编程没有严格的要求,只要遵循一个原则:在代码中告诉QTP足够他识别该对象的属

性,QTP就可以不通过对象库,而是通过描述性编程的方式完成对指定对象的操作.所以描述性编程没有什么神秘的,他无非是把原来存储在对象库中的信息提到代码中来了而已.

工作原理简单点说就是通过把QTP安装到电脑上,然后用生成脚本,回放来回归测试。

对象识别原理获取hwnd,然后判断ui属性,逐个判断,然后逐层递归,最后获取每个对象的所有层面的属性,跟对象库里的属性进行比较,匹配则应用,不匹配则智能识别(重新启动识别过程,过滤出一些符合条件的,进行判断后找到唯一匹配项)

复杂点说:把对象从被测软件ui中读取出主要特征,存入对象库,回放时在被测试软件中寻找指定对象,赋予对象一些方法,方法为windows win32或者web上的一些activex 控件的通用方法(或者javascrīpt应用于一些未支持的事件,比如link.click),微软控件对外的接口,把其中一些方法进行封装,成为qtp自己的方法,比如getroproperty=对象。object.value,然后运用这些方法属性驱动被测试对象完成一些指定的动作。对于任何一个add-in都是先找到人家的对外接口,然后拿过来封装,需要的时候去调用接口事件,也就成为了QTP的动作。

此外还有数据驱动xx驱动的,每种驱动方式都大同小异,瞎JB侃呗……怕啥的阿,反正谁都不明白。面试的人肯定也不明白啥,就是随便问问

一直认为学习一个工具一定要学会它的本质和原理才能真正的有所收获,不然工具换掉或者工具被淘汰就会很尴尬,又要从头学习。当你学会了本质,其他的工具学习起来也会很快的,并且从开发的角度去思考问题,更容易学习好一个工具。最近学习了几天的QTP,对QTP的原理有一个简单的认识,和大家分享下。

个人认为QTP的脚本运行其实就是一组对象有组织的执行自己的方法,最终完成一个流程的过程。当打开一个web时,想要脚本能够模拟人来操作整个流程,那多就要求这个脚本能够识别人的每一个操作,而人的操作实际上是对web页面上控件的操作,所以只要QTP 的脚本能够识别人操作过的控件就可以模拟人的操作流程,而web页面上的控件都是QTP

脚本中的对象,也就是说只有QTP脚本中的对象能够被唯一的识别出来,就可以模拟人的整个操作流程。而QTP又是如何识别对象的呢?

对象识别原理就是获取hwnd,然后判断ui属性,逐个判断,然后逐层递归,最后获取每个对象的所有层面的属性,跟对象库里的属性进行比较,匹配则应用。也就是说在你添加一个对象到对象仓库中的时候,该对象的主要属性都被保存到对象库中了,回放QTP脚本的时候实际上就是在被测试软件中寻找指定的对象,然后按照这些对象指定的方法去完成一个动作,而这些方法就是把windows win32中、web上的一些activex控件中的方法和微软控件对外的接口中的一些方法进行封装,成为qtp自己的方法。对于任何一个add-in都是先找到人家的对外接口,然后拿过来封装,需要的时候去调用接口事件,也就成为了QTP的动作。

所以QTP脚本回放实际上就是要做两个步骤:1)识别出要操作的对象控件。2)识别出对象控件后来完成该对象控件指定的方法。

在QTP识别对象的时候是按照对象的唯一属性来区分的,有时候QTP对象仓库保存的对象属性是不完全的,导致两个很相似的对象不能够识别出来,这样脚本就会报错,或者说对象仓库中对象的属性每次都是变化的,那么每次回放脚本也会和对象仓库中保存的不一致导致脚本报错。这里介绍一个很好用的web对象的属性——object属性。

QTP支持直接访问DOM,可以通过DOM来访问HTML标签。在QTP中,访问DOM是通过使用page测试对象的object属性来进一步访问的,这样就可以访问到很底层的对象属性,

可以用底层的对象属性来唯一区分web页面上的对象控件,这样就能够解决一些关于对象识别的错误。

用page页中的Link对象举例说明object属性:

Browser(”网易”).Page(”网易”).Link(”VIP收费邮箱”).CheckProperty “URL”,”https://www.360docs.net/doc/9c8250540.html,/”

其中使用了CheckProperty方法来对比Link对象的URL属性是否等于指定的地址(https://www.360docs.net/doc/9c8250540.html,/),也可以用Link对象的object属性中的herf属性来对比,代码如下:

herf = Browser(”网易”).Page(”网易”).Link(”VIP收费邮箱”).Object.href If not herf = “https://www.360docs.net/doc/9c8250540.html,/” Then

reporter.ReportEventmicFail,https://www.360docs.net/doc/9c8250540.html,/, herf

End If

利用开发语言的反编译原理,将控件的方法和属性预先封装。如此,在录制的时候,只要打开相应的插件,QTP就能够准确识别控件类型及其对应的属性等内容(特殊控件除外)。

Quick Test Professional

一、简答题:

1

QTP有哪几种录制模式?

答:正常录制模式、低级录制模式、模拟录制模式

2LoadRunne和QTP的工作原理有何不同?

LoadRunner:基于协议的性能测试

录制原理:捕获数据包

QTP:基于UI(用户界面)对象的功能测试

录制原理:识别对象

测试计算器时,如何加入所有控件?怎样将加入的控件导出,以便下次再用?

4、QTP中global 和local 的区别?两者的迭代次数分别在哪里设置?

5、用

QTP录制脚本后如何修改脚本能够增加其灵活性?

答:参数化、封装、ACTION复用

6、QTP中Object Spy的作用?能否用它来添加对象,如果可以说明步骤,如果不可以请说明如何添加。

答:查看对象,包括属性和方法

不能添加对象

7、如何修改共享对象库中的值并使之生效?

8、Action1中参数传递到Action2中有哪几种方式,请分别加以说明。Datetable

共享、通过环境变量共享、通过

Action parameters

的参数传递

9、正则表达式:\(?0\d{2}[) -]?\d{8}表示什么内容?

答:表示国内电话号码

10、[QTP]请将下面操作用另外一种描述性编程实现(通过Description对象):

Window("Error").WinButton("text:=OK", "index:=1").Click

二、脚本开发题

1、录制

QTP自带软件

Flight4a

系统的订票功能,

要求:

对所订机票的机舱类型进行参数化,

即实现

定购如下图所示

3张不同机舱类型(如图)的飞机票,如何实现?

2、如果运行

Fight4a的登录脚本前(脚本中需要QTP自动打开登录框)被测对象已经存在多个了

(如图)

这将导致后续步骤出错,如何能够先将已经打开的登录框关闭再执行登录呢,请将脚

本中关闭多余登录框功能补充完整。

3

、如果将DataTable中原本写在Global的参数改写在Action中,则需要加上怎样的代码达到原来的迭代效果?注:Action1迭代设为一次

4、用QTP打开Word并录入内容。

5、用QTP打开记事本写入汉字。

三、性能测试工具使用题:

1. [LoadRunner]web

系统中username参数表为file类型,表中有12个值,分别A、B、C、D、E、F、G、H、I、J、K、L。测试场景中虚拟并发用户数设为

4,迭代次数设为

3,参数中Select next row与Update value on分别为(Unique, Each Iteration)与(Sequential, Once)时,写出迭代3次的取值情况。

自动化测试工具解析

7.6 AutoRunner简介 (1) 7.6.1 AutoRunner的组成 (1) 7.6.1.1 AutoRunner功能简介 (4) 7.6.2 AutoRunner的安装要求 (6) 7.6.3 AutoRunner的安装 (6) 7.6.4配置AutoRunner (9) 7.6.4.1配置AutoRunner (9) 7.6.5 AutoRunner的使用流程 (10) 7.6.5.1 AutoRunner使用流程简介 (10) 7.6.5.2创建项目 (11) 7.6.5.3 创建脚本 (14) 7.6.5.4 录制脚本 (15) 7.6.5.5 录制回放 (17) 7.6.5.6 脚本参数化 (18) 7.6.5.6 属性校验 (22) 7.6.5.7 脚本调用 (24) 7.6 AutoRunner简介 7.6.1 AutoRunner的组成

集成开发环境: (Integrated Development Environment 简称IDE)软件是用于程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具,也就是集成了代码编写功能、分析功能、编译功能、Debug功能等一体化的开发软件套。所有具备这一特性的软件或者软件套(组)都可以叫做IDE。如微软的Visual Studio系列,Borland的C++ Builder、Delphi系列等。 IDE环境菜单栏 AutoRunner3.9中的菜单栏如上图所示,主菜单包含文件、编辑、录制、执行、设置、许可证、帮助等菜单项,下面对每一项做一个简介。 文件菜单 如图所示,所有对脚本的管理操作都可以在文件菜单下完成,包括对脚本的新建,导入,保存,另存为,关闭,改变工作空间,最近打开,退出等等。 编辑菜单

软件测试工具大全

软件测试工具汇总 一、工具汇总 1.免费工具 下表中针对WEB页面或B/S结构进行功能和性能测试的工具有: 开源功能自动化测试工具:PureTest,OpenSTA,Watir、Selenium、MaxQ、WebInject、Fitnesse 开源性能自动化测试工具:Jmeter、OpenSTA、DBMonster PureTest Minq公司功能测试商业 免费 本是业内商业自动化测试工具之一,如今PureTest已经免费。它专注于对WEB应用程序进行功能自动化测试,并即时对WEB页面元素进行检 测,对HTTP请求、响应进行诊断分析。 PureTest is an application which is primarily used to setup scenarios of tasks, execute and debug them. Even though it supports testing a variety of applications it is especially useful for debugging and snooping of web applications. PureTest includes a HTTP Recorder and Web Crawler which makes it useful for generic verification of HTTP requests and web content checking. The normal way to access web sites is via a browser; however, there are times when it is desirable to bypass the browser and access a site from a program, including: Debugging of HTTP requests and responses Automated web site testing The HTTP Recorder simplifies the process of capturing all requests that are exchanged between a browser and the web server. Then use PureTest to replay each request in order to carefully watch the HTTP data that is transferred on the wire (HTTP headers, request parameters, response headers and response content). The Web Crawler is useful to pro-actively verify the consistence of a static web structure. It reports various metrics, broken links and the structure of the crawled web. Test scenarios that be saved to file and later be repeated, to verify that you server applictaion works as expected. This can be done using the PureTest debugger in the grapical user interface, but also using a command line interface. PureLoad Minq公司负载压力测 试 商业 免费 PureLoad正是一款基于Java开发的网络负压测试工具,它的Script代码 完全使用XML,所以,这些代码的编写很简单,可以测试各种C/S程序, 如SMTP Server等。它的测试报表包含文字和图形并可以输出为HTML 文件。由于是基于Java的软件,所以,可以通过Java Beans API来增强 软件功能。

常用办公软件测试题汇编

常用办公软件测试题 一、综合部分 1.对于Office XP应用程序中的“保存”和“另存为”命令,正确的是___。 A.文档首次存盘时,只能使用“保存”命令 B.文档首次存档时,只能使用“另存为”命令 C.首次存盘时,无论使用“保存”或“另存为”命令,都出现“另存为”对话框 D.再次存盘时,无论使用“保存”或“另存为”命令,会出现“另存为”对话框 2.对于Office XP应用程序中的“常用”工具栏上的“新建”命令按钮和“文件”菜单下的“新建”命令项,不正确的是___。 A.都可以建立新文档 B.作用完全相同 C.“新建”命令按钮操作没有“模板”对话框,使用空白模板 D.“文件”后“新建”命令可打开“模板”对话框,可以选择不同的模板 3.不能在“另存为”对话框中修改文档的___。 A.位置B。名称 C.内容D。类型 4.Office XP应用程序中的“文件”菜单底端列出的几个文件名表示___。 A.用于切换的文件B。已打开的文件 C.正在打印的文件D。最近被该Office XP应用程序处理过的文件 5.在文本编辑状态,执行“编辑”到“复制”命令后,___。

A.被选定的内容复制到插入点 B.被选定的内容复制到剪贴板 C.被选定内容的格式复制到剪贴板 D.剪贴板的内容复制到插入点 6.当“编辑”菜单中的“剪切”和“复制”命令呈浅灰色而不能被选择时,表示___。A.选定的内容太长,剪贴板放不了 B.剪贴板里已经有信息了 C.在文档中没有选定任何信息 D.选定的内容三图形对象 7.Office XP应用程序中的工具栏可以___。 A.放在程序窗口的上边或下边 B.放在程序窗口的左边或右边 C.作为一个窗口放在文本编辑区 D.以上都可以 8.可以从___中选择Office XP应用程序中的命令。 A.菜单B。工具栏 C.快捷菜单D。以上都可以 9.Office XP应用程序中使用鼠标进行复制操作应___。 A.直接拖动B。按住键拖动 10.使用“剪贴板”进行移动操作应选择___命令。 A.“剪切” B。“复制”

软件测试中负载压力测试主流工具介绍

软件测试中负载压力测试主流工具介绍 从软件性能测试的发展前景来看,对于工具的依赖性会越来越强。可以预见,在不久的将来,专门从事软件性能测试的软件工具会形成一个不小的市场。目前,市场上的性能测试的工具种类已经很多,但从其工作的侧重点上,可以将这些工具简单的划分为以下四种:负载压力测试工具、资源监控工具、故障定位工具以及调优工具。下面主要介绍一下负载压力测试工具。 负载性能测试工具的原理是通过录制、回放脚本、模拟多用户同时访问被测试系统,制造负载,产生并记录各种性能指标,生成分析结果,从而完成性能测试的任务。 目前,主流的负载性能测试工具有: QA Load 这是Compuware公司开发的一套针对客户/服务器系统、企业资源配置(ERP)和电子商务应用的自动化负载测试工具。

QALoad是QACenter性能版的一部分,它通过可重复的、真实的测试能够彻底地度量应用的可扩展性和性能。QACenter汇集完整的跨企业的自动测试产品,专为提高软件质量而设计。QACenter可以在整个开发生命周期、跨越多种平台、自动执行测试任务。 SilkPerformer: 这是一款在工业领域最高级的企业级负载测试工具。不管企业电子商务应用的规模大小及其复杂性,通过SilkPerformer,均可以在部署前预测它的性能。它可以模仿成千上万的用户在多协议和多计算的环境下工作。可视的用户化界面、实时的性能监控和强大的管理报告可以帮助我们迅速的解决问题,可以通过最小的测试周期保证系统的可靠性,优化性能和确保应用的可扩充性。 LoadRunner: 这是由HP公司开发的一款较高规模适应性的,自动负载测试工具。

软件测试常用术语表

第119贴【2004-10-12】:常见测试术语一 Acceptance Testing--可接受性测试 一般由用户/客户进行的确认是否可以接受一个产品的验证性测试。 actual outcome--实际结果 被测对象在特定的条件下实际产生的结果。 Ad Hoc Testing--随机测试 测试人员通过随机的尝试系统的功能,试图使系统中断。algorithm--算法 (1)一个定义好的有限规则集,用于在有限步骤内解决一个问题;(2)执行一个特定任务的任何操作序列。 algorithm analysis--算法分析 一个软件的验证确认任务,用于保证选择的算法是正确的、合适的和稳定的,并且满足所有精确性、规模和时间 方面的要求。 Alpha Testing--Alpha测试 由选定的用户进行的产品早期性测试。这个测试一般在可控制的环境下进行的。 analysis--分析 (1)分解到一些原子部分或基本原则,以便确定整体的特性;(2)一个推理的过程,显示一个特定的结果是假 设前提的结果;(3)一个问题的方法研究,并且问题被分解为一些小的相关单元作进一步详细研究。 anomaly--异常 在文档或软件操作中观察到的任何与期望违背的结果。

application software--应用软件 满足特定需要的软件。 architecture--构架 一个系统或组件的组织结构。 ASQ--自动化软件质量(Automated Software Quality) 使用软件工具来提高软件的质量。 assertion--断言 指定一个程序必须已经存在的状态的一个逻辑表达式,或者一组程序变量在程序执行期间的某个点上必须满足的 条件。 assertion checking--断言检查 用户在程序中嵌入的断言的检查。 audit--审计 一个或一组工作产品的独立检查以评价与规格、标准、契约或其它准则的符合程度。 audit trail--审计跟踪 系统审计活动的一个时间记录。 Automated Testing--自动化测试 使用自动化测试工具来进行测试,这类测试一般不需要人干预,通常在GUI、性能等测试中用得较多。 第120贴【2004-10-13】:常见测试术语二 Backus-Naur Form--BNF范式 一种分析语言,用于形式化描述语言的语法 baseline--基线

软件自动化测试工具介绍--所有

软件自动化测试工具介绍 一、功能测试工具 1、QTP测试工具 全名 HP QUiCkTeSt ProfeSSional SoftWare ,最新的版本为HP QUiCkTeSt ProfeSSional 11.0 QTP是 quickteSt PrOfeSSiOnal 的简称,是一种自动测试工具。使用QTP的目 的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等 QUiCkTeSt针对的是GUl应用程序,包括传统的Windows应用程序,以及现在越来越流行的Web应用。它可以覆盖绝大多数的软件开发技术,简单高效,并具备测试用例可重用的特点。其中包括:创建测试、插入检查点、检验数据、增强测试、运行测试、分析结果和维护测试等方面。 2、WinRUnner MerCUry Interactive 公司的 WinRUnner是一种企业级的功能测试工具,用 于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放用户的应用操作,WinRUnner能够有效地帮助测试人员对复杂的企 业级应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障发布及长期稳定运行。 企业级应用可能包括 Web应用系统,ERP系统,CRM S统等等。这些系统在发布之前,升级之后都要经过测试,确保所有功能都能正常运行,没有任何错误。如何有效地测试不断升级更新且不同环境的应用系统,是每个公司都会面临的问题。 3、RatiOnal Robot 是业界最顶尖的功能测试工具,它甚至可以在测试人员学习高级脚本技术之前帮助其进行成功的测试。它集成在测试人员的桌面IBM Rational TeSt Manager上,在这里测试人员可以计划、组织、执行、管理和报告所有测试活动,包括手动测试报告。这种测试和管理的双重功能是自动化测试的理想开始。 4、AdVentNet QEngine AdVentNet QEngine是一个应用广泛且独立于平台的自动化软件测试工具, 测试、 可用于Web功能Web性能测试、JaVa应用功能测试、JaVa APl测试、SoAP测试、回归测试和 JaVa

常用通讯测试工具使用

常用通讯测试工具 鉴于很多MCGS用户和技术人员对通讯测试工具并不很熟悉,本文档将针对实际的测试情况,对串口、以太网通讯调试过程中所涉及到的常用的测试软件进行相关的讲解。 1. 串口测试工具: 串口调试工具:用来模拟上下位机收发数据的串口工具,占用串口资源。如:串口调试助手,串口精灵,Comm等。 串口监听工具:用来监听上下位机串口相关操作,并截获收发数据的串口工具。不占用串口资源。如:PortMon,ComSky等。 串口模拟工具:用来模拟物理串口的操作,其模拟生成的串口为成对出现,并可被大多数串口调试和监听软件正常识别,是串口测试的绝好工具。如:Visual Serial Port等。 下面将分别介绍串口调试助手、Comm、PortMon和Visual Serial Port的使用。

1.1. 串口调试助手: 为最常用的串口收发测试工具,其各区域说明及操作过程如下: 串口状态 打开/关闭串口 十六进制/ASCII 切换 串口数据 接收区 串口参数 设置区 串口数据 发送区 串口收发计数区 发送数据功能区 保存数据功能区 操作流程如下: ? 设置串口参数(之前先关闭串口)。 ? 设置接收字符类型(十六进制/ASCII 码) ? 设置保存数据的目录路径。 ? 打开串口。 ? 输入发送数据(类型应与接收相同)。 ? 手动或自动发送数据。 ? 点击“保存显示数据”保存接收数据区数据到文件RecXX.txt。 ? 关闭串口。 注:如果没有相应串口或串口被占用时,软件会弹出“没有发现此串口”的提示。

1.2. PortMon 串口监听工具: 用来监听上下位机串口相关操作,并截获收发数据的串口工具。不占用串口资源, 但在进行监听前,要保证相应串口不被占用,否则无法正常监听数据。 连接状态 菜单栏 工具栏 截获数据显示区 PortMon 设置及使用: 1). 确保要监听的串口未被占用。 如果串口被占用,请关闭相应串口的应用程序。比如:要监视MCGS 软件与串口1设备通讯,应该先关闭MCGS 软件。 说明:PortMon 虽不占用串口资源,但在使用前必须确保要监听的串口未被占用,否则无法进行监视。 2). 运行PortMon,并进行相应设置。 ? 连接设置: 在菜单栏选择“计算机(M)”->“连接本地(L)”。如果连接成功,则连接状态显示为“PortMon 于\\计算机名(本地)”。如下图:

软件测试过程中的工具使用共9页文档

软件测试过程中的工具使用软件测试过程中的工具使用 作者:easylife来源:不详 摘要:软件测试是保证软件质量的重要手段,它在整个软件开发过程中 占据了将近一半的时间和资源。在软件测试过程中合理的引入测试工具,能够加快测试进度,提高测试质量,实现更快、更好的开发软件产品的目标。本文介绍了覆盖软件测试各个阶段的测试工具,说明了每一类工具所应用的测试阶段,以及它能发挥的作用。 Abstract:Software test is one measure to insure the quality of software,it costs half of time and resource in the whole process of development.If test tools can be used in the process,it would to improve the speed of test and the quality of test,It's probable to develop software rapidly and to produce high quality.In this document it introduces some software test tools for the different of test moment,it introduce the time for every kind of tools,but the function of the test tool. 关键字:软件测试工具;测试设计;静态分析;单元测试;功能测试; 性能测试;测试过程管理; Keywords:software test tool;test design;static analysis; unit test;function test;performance test;test process management; 1、引言最近几年,软件测试在国内越来越受到重视,因为大家逐渐认识到了软件测试对于保证软件质量的重要性。随着对软件测试重视的提高,国内软件测试技术的发展也很快,逐渐从过去手工作坊式的测试向测试工程化的方向发展。 要真正实现软件测试的工程化,其基础之一就是要有一大批支持软件测 试工程化的工具。因此,软件测试工具对于实现软件测试的工程化来说至关重要。本文就从如何进一步提高软件测试质量和效率的角度出发,讨论测试工具在软件测试过程中的应用。 2、为什么要引入测试工具在测试过程中引入测试工具能给我们带来以下的好处。

常用软件测试技术介绍

常用软件测试技术介绍 1、灰度测试 灰度测试,是在某项产品或应用正式发布前,选择特定人群试用,然后逐步扩大其试用者数量,以便及时发现和纠正其中的问题。另一个是为了降低同时大量的访问对服务器资源造成压力。常见的灰度测试场景如APP新版本升级,系统升级等。 灰度测试主要是按照一定策略选取部分用户,让他们先行体验新版本的应用进行验证。该方法具有用户流量随机,在真实的用户和场景下得到验证,可以实时监控崩溃、用户反馈等问题进行召回、进行定位,进而决定继续放大新版本投放范围直至全量升级或回滚至老版本。灰度测试覆盖到达到了机型、系统、网络、地域多类型的目的。 2、A / B测试 A / B测试的概念来源于生物医学的双盲测试,双盲测试中病人被随机的分成两组,在不知情的情况下分别给予安慰剂和测试用药,经过一段时间的实验后再来比较这两组病人的表现是否具有显著的差异,从而决定测试用药是否有效。 A / B测试制定网页或应用程序的两个或多个版本,是在同一时间维度,让一部分用户使用A 方案,同时另一部分用户使用 B 方案,然后收集统计并对比不同方案的转化率、点击量、留存率等指标,以判断不同方案的优劣并进行决策,分析评估最终哪个版本被采用的方法。 3、模糊测试 模糊测试(Fuzz testing)是一种软件测试技术,其核心思想是自动或半自动的生成随机数据输入到一个程序中,并监视程序异常,如崩溃,断言失败,以发现可能的程序错误,比如内存泄漏。模糊测试常常用于检测软件或计算机系统的安全漏洞。 4、探索性测试

探索性测试是敏捷开发过程中的一种重要测试方法,是功能测试和自动化测试的重要补充。探索性测试是一种经过深思熟虑的测试方式,没有测试脚本,可以使你的测试超出各种明显已经测试过的场景。 相对于传统软件测试过程中严格的“先设计,后执行”来说,具有很大区别。另外探索性测试不是自由测试,而是需要有一定的方法来指导。探索性强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。 探索性测试可以用来找到系统深层次的缺陷、也可以加深测试人员对被测系统的了解。但是特别要注意不要将探索性测试和错误推测法、随机测试、回归测试混淆,同时探索性测试不能用来评估软件质量。 5、基于模型的测试用例设计 基于模型的测试(Model-Based-Testing)是一种技术,是自动化测试的一个分支,有时被标榜为“自动化测试设计”。它是将测试用例的设计依托于被测系统的模型,并基于该模型自动生成测试用例的技术。 没有测试模型,基于模型的测试工具就无法生成任何测试用例。没有好的测试模型,该工具就无法生成好的测试用例。因此,基于模型的测试技术,是从测试设计变成了测试模型设计。

几款主流云测试工具比较

几款云测试工具比较 现在移动APP的开发和更新速度越来越快,APP的测试方式也要与之相适宜。区别与传统的测试方式,云测试平台可以为APP开发项目提供全套的测试方案,可以提高测试效率和测试覆盖率,节省测试成本。以下是一些国内主流的云测试工具,各有特色,而且都有免费体验部分。 一、Testin Testin是现在做的比较大的一个云测试平台,功能覆盖面广,如:兼容性(适配)测试,功能测试,性能测试。提供测试的设备也比较全,除了手机还有Pad和盒子。测试人员只要将APK上传到Testin 测试平台上,选择想要的测试类型和测试设备,就可以完成测试,并产出测试报告。 特色:设备种类多样,手游测试,流量变现功能和社区讨论专区。 二、易测云 易测云网站面向个人开发者和企业级用户,提供安卓应用程序的测试服务。和Testin一样可以让用户随传随测;包含多种测试类型,如适配测试、性能测试、功能测试、遍历测试等,完善的测试报告。同时也提供多款设备,真机测试也没问题的。 易测云的特色: 1.易测云除了为个人开发者服务外,还可以根据企业级用户的 特殊需求进行深度定制。可以部署独立云服务,还可以在现 有的网站上开辟测试专区。

2.自动化录制工具Radar,易测云自主研发的录制工具,以下是 我试用后感觉还不错的地方。 ●支持WebView、无ID控件、和自定义控件操作的录制回放 ●录制生成的脚本,可以 Eclipse 中直接编辑 ●支持输入内容参数化,可在不同的测试设备上输入不同的内 容 ●支持使用用户 keystore进行脚本录制和回放 ●录制完成的脚本支持提交云端测试,可在易测云所有设备或 不同分辨率的其他安卓上运行测 ●支持 Windows、Ubuntu、及Mac主流OS版本 三、百度移动云测试中心MTC 通常的功能就不介绍了,主要介绍各家的特色。 特色: 1.百度云众测平台:可以将开发者提供的应用进行用户评测并 收集反馈,可以将开发者与用户联系起来。 2.强调了Android App安全漏洞扫描,测试速度还可以,不用 等太长时间。但是目前只支持100M一下的APK文件。 3.应用推广:如果你已经拥有一款移动应用,可以快速通过百 度移动应用中心的渠道进行推广。 4.提交上架:无需进行系统切换,快速提交,快速进行审核, 缩短上架时间。 四、移动终端池·远程测试系统

常用工具软件测试题及答案

一、判断题 1. Realone Player不支持多节目连续播放。(N) 2. 网际快车可以上传和下载文件。(N) 3. 天网防火墙的拦截功能是指数据包无法进入或出去。(Y) 4. SnagIt可以捕获DOS屏幕,RM电影和游戏等画面。(Y) 5. Adobe Acrobat Reader可以解压缩文件。(N) 6. 金山词霸2002支持Windows XP,但不支持office XP系统。(N) 7. 在用Ner-Burning Room刻录CD音乐时,若误将数据文件从本地资源管理器中拖入刻录机虚拟资源管理器中时,该文件将被添加到音乐CD中。(N) 8. Symantec Ghost 可以实现数据修复。(N) 9. Easy Recovery 可以恢复任何被从硬盘上删除的文件。(N) 10. Ctrem软件具有防发呆功能。(Y) 二.选择题(每小题2分,共40分) 1、下列不属于金山词霸所具有的功能的是:(C ) A、屏幕取词 B、词典查词 C、全文翻译 D、用户词典 2、东方快车提供了(C )种语言翻译。 A、1种 B、2种 C、3种 D、4种 3、:Vintual CD 中的Creat按钮的功能为(B ) A、编辑映像文件 B、创建光盘的映像文件 C、映像文件的显示方式 D、将映像文件插入虚拟光驱 4、下列哪一个软件属于光盘刻录软件(A ) A、Nero-Buring Room B:Virtual CD C: DAEMON Tools D:Iparmor 5、下列不属于媒体播放工具的是(D ) A、Winamp B、超级解霸 C、Realone Player D:WinRAR 6、下列媒体播放器可以自由截取单个画面或整段电影的是非曲直(B ) A、Winamp B、超级解霸 C、Realone Player D、音频解霸 7、下列哪一个不是网际快车为已下载的文件设置的缺省创建类别( D) A、软件 B、游戏和mp3 C、驱动程序 D、电影 8、CuteFTP具有网际快车不具备的功能是( A) A、上传文件 B、下载文件 C、断点续传 D、支持多线程下载 9、如果在天网防火墙的ICMP规则中输入( B)则表示任何类型代码都符合本规则。 A、254 B、255 C、256 D、253 10、Norton Antivirus的安全扫描功能包括(D ) ①自动防护②电子邮件扫描③禁止脚本④全面系统扫描 A、①②③ B、①②④ C、①③④ D、①②③④ 11、ACDSee不能对图片进行下列哪种操作(C ) A、浏览和编辑图像 B、图片格式转换 C、抓取图片 D、设置墙纸和幻灯片放映 12、SnagIt捕获的图片可被存为下列哪些格式(D ) ①BMP ②PCX ③TGA ④RSB A、①②③ B、①②④ C、①②③④ D、①② 13、WinRAR不可以解压下列哪些格式的文件( D)

使用软件测试工具的目的

软件测试的目的:第一是确认软件的质量,其一方面是确认软件做了你所期望做的事情,另一方面是确认软件以正确的方式来做了这个事情。 第二是提供信息,比如提供给开发人员或程序经理的回馈信息,为风险评估所准备的信息。 第三软件测试不仅是在测试软件软件产品本身,而且还包括软件开发的过程。如果一个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。因此,软件测试的第三个目的是保证整个软件开发过程是高质量的。 测试工具一般可分为白盒测试工具、黑盒测试工具、性能测试工具,另外还有用于测试管理(测试流程管理、缺陷跟踪管理、测试用例管理)的工具,这些产品主要是MercuryInteractive(MI)、Segue、IBM Rational、Compuware和Empirix等公司的产品,而MI公司的产品占了主流。白盒测试工具白盒测试工具一般是针对代码进行测试,测试中发现的缺陷可以定位到代码级,根据测试工具原理的不同,又可以分为静态测试工具和动态测试工具。静态测试工具:直接对代码进行分析,不需要运行代码,也不需要对代码编译链接,生成可执行文件。静态测试工具一般是对代码进行语法扫描,找出不符合编码规范的地方,根据某种质量模型评价代码的质量,生成系统的调用关系图等。静态测试工具的代表有:Telelogic公司的Logiscope 软件;PR公司的PRQA软件。动态测试工具:动态测试工具与静态

测试工具不同,动态测试工具的一般采用"插桩"的方式,向代码生成的可执行文件中插入一些监测代码,用来统计程序运行时的数据。其与静态测试工具最大的不同就是动态测试工具要求被测系统实际运行。动态测试工具的代表有:Compuware公司的DevPartner软件;Rational公司的Purify系列等。黑盒测试工具黑盒测试工具适用于黑盒测试的场合,黑盒测试工具包括功能测试工具和性能测试工具。黑盒测试工具的一般原理是利用脚本的录制(Record)/回放(Playback),模拟用户的操作,然后将被测系统的输出记录下来同预先给定的标准结果比较。黑盒测试工具可以大大减轻黑盒测试的工作量,在迭代开发的过程中,能够很好地进行回归测试。黑盒测试工具的代表有:Rational公司的TeamTest、Robot;Compuware公司的QACenter。性能测试工具专用于性能测试的工具包括有:Radview公司的WebLoad;Microsoft公司的WebStress等工具;针对数据库测试的TestBytes;对应用性能进行优化的EcoScope等工具。MercuryInteractive的LoadRunner是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。测试管理工具测试管理工具用于对测试进行管理。一般而言,测试管理工具对测试计划、测试用例、测试实施进行管理,并且,测试管理工具还包括对缺陷的跟踪管理。

5类软件测试工具

目前主流的测试工具主要有以下5类: 1.负载压力测试工具 这类测试工具的主要目的是度量应用系统的可扩展性和性能,是一种预测系统行为和性能的自动化测试工具。在实施并发负载过程中,通过实时性能监测来确认和查找问题,并针对所发现问题对系统性能进行优化,确保应用的成功部署。负载压力测试工具能够对整个企业架构进行测试,通过这些测试,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。 2.功能测试工具 通过自动录制、检测和回放用户的应用操作,将被测系统的输出记录同预先给定的标准结果比较,功能测试工具能够有效地帮助测试人员对复杂的企业级应用的不同发布版本的功能进行测试,提高测试人员的工作效率和质量。其主要目的是检测应用程序是否能够到预期的功能并正常运行。 3.白盒测试工具 白盒测试工具一般是针对代码进行测试,测试中发现的缺陷可以定位到代码级。根据测试工具原理的不同,又可以分为静态测试工具和动态测试工具。静态测试工具直接对代码进行分析,不需要运行代码,也不需要对代码编译链接和生成可执行文件。静态测试工具一般是对代码进行语法扫描,找出不符合编码规范的地方,根据某种质量模型评价代码的质量,生成系统的调用关系图等。动态测试工具一般采用“插桩”的方式,在代码生成的可执行文件中插入一些监测代码,用来统计程序运行时的数据。它与静态测试工具最大的不同是,动态测试工具要求被测系统实际运行。 4.测试管理工具 一般而言,测试管理工具对测试需求、测试计划、测试用例、测试实施进行管理,并且测试管理工具还包括对缺陷的跟踪管理。测试管理工具能让测试人员、开发人员或其他的IT 人员通过一个中央数据仓库,在不同地方就能交互信息。 5.测试辅助工具 这些工具本身并不执行测试,例如它们可以生成测试数据,为测试提供数据准备。 参加完“2005年IT测试技术研讨会”以后,谢常君对软件测试和网络测试的主流厂商和产品有了更全面的了解。不过最让他高兴的是结识了一批企业的代表和专家。 一个阳光明媚的下午,谢常君约上某位专家在一个咖啡馆会面。“非常谢谢你能前来,我这次约你出来是希望你可以给我一些专业的建议。”谢常君说,“我们公司近期可能需要采购一些测试工具,但是我们对此了解不多,希望你可以帮我们。”接下来,这位专家就首先从测试工具的分类开始讲起…… IT测试工具集锦 Radview TestView系列 Radview公司的TestView系列Web性能测试工具和WebLoad Analyzer性能分析工具,旨在测试Web应用和Web服务的功能、性能、程序漏洞、兼容性、稳定性和抗攻击性,并且能够在测试的同时分析问题原因和定位故障点。 整套Web性能测试和分析工具包含两个相对独立的子系统:Web性能测试子系统Web 性能分析子系统。其中Web性能测试子系统包含3个模块:TestView Manager、WebFT以及WebLoad。Web性能分析子系统只有WebLoad Analyzer。 左图表达了在一个完整的测试系统中,TestView Manager用来定制、管理各种测试活动;WebLoad模拟多个用户行为进行测试,所测试的是系统性能,容量,稳定性和抗攻击性;

软件测试自动化及工具

软件测试自动化与软件测试工具 目录 一、软件自动化测试基础 (2) 1、1 软件自动化测试的产生 (2) 1、2软件自动化测试的概念 (2) 1、3当软件开发过程中具有下列情况时首先需要考虑引入自动化测试: (2) 二、自动化测试的作用和优势 (2) 2、1概述 (2) 2、1、1产生可靠的系统 (2) 2、1、2改进测试工作质量 (2) 2、1、3.减少测试工作量并加快测试进度 (3) 2、1、4友情提醒 (3) 三、自动化测试工具 (3) 3、1软件测试工具分类 (3) 3、1、1白盒测试工具 (4) 3、1、2黑盒测试工具 (5) 3、1、3测试管理工具 (5) 3、2自动化测试工具一览 (5) 3、2、1 Rational Robot (5) 3、2、2 WinRunner (6) 3、2、3 LoadRunner (6) 3、2、4 Parasoft C++ Test (7) 3、2、5 QACenter (7) 3、2、6 WebLoad (8) 3、2、7 Web Application Stress (WAS) Tool (8) 3、2、8 TestDirector (8) 四、附录 (9)

一、软件自动化测试基础 1、1 软件自动化测试的产生 随着计算机日益广泛的应用,计算机软件越来越庞大和复杂,软件测试的工作量也越来越大。随着人们对软件测试工作的重视,大量的软件测试自动化工具不断涌现出来,自动化测试能够满足软件公司想在最短的进度内充分测试其软件的需求,一些软件公司在这方面的投入,会对整个开发工作的质量、成本和周期带来非常明显的效果。 1、2软件自动化测试的概念 软件测试自动化就是通过测试工具或其他手段,按照测试工程师的预定计划对软件产品进行自动的测试,它是软件测试的一个重要组成部分,能够完成许多手工无法完成或者难以实现的一些测试工作。正确、合理地实施自动化测试,能够快速、全面地对软件进行测试,从而提高软件质量、节省经费、缩短产品发布周期。 自动化测试能够替代大量手工测试工作,避免重复测试,同时,它还能够完成大量手工无法完成的测试工作,如并发用户测试、大数据量测试、长时间运行可靠性测试等。 1、3当软件开发过程中具有下列情况时首先需要考虑引入自动化测试: 非常重要的测试 涉及范围很广的测试 对主要功能的测试 容易自动化的测试 很快有回报的测试 运行最频繁的测试 二、自动化测试的作用和优势 2、1概述 使用测试工具的目的就是要提高软件测试的效率和软件测试的质量。通常,自动化测试的好处有: 产生可靠的系统; 改进测试工作质量; 减少测试工作量并加快测试进度。 2、1、1产生可靠的系统 测试工作的主要目标一是找出缺陷,从而减少应用中的错误;另一个是确保系统的性能满足用户的期望。为了有效地支持这些目标,在开发生存周期的需求定义阶段,当开发和细化需求时则应着手测试工作。使用自动化测试可改进所有的测试领域,包括测试程序开发、测试执行,测试结果分析、故障状况和报告生成。它还支持所有的测试阶段,其中包括单元测试、集成测试、系统测试、验收测试与回归测试等。 通过使用自动化测试可获得的效果可归纳如下。 (1)需求定义的改进 (2)性能测试的改进 (3)负载/压力测试的改进 (4)高质量测量与测试最佳化 (5)改进与开发组人员之间的关系 (6)改进系统开发生存周期 2、1、2改进测试工作质量 通过使用自动化测试工具,可增加测试的深度与广度,改进测试工作质量。其具体好处可归

常用工具软件测试题及答案

、判断题 1. Realo ne Player不支持多节目连续播放。 (N ) 2. 网际快车可以上传和下载文件。(N ) 3. 天网防火墙的拦截功能是指数据包无法进入或出去。(Y ) 4. Snagit可以捕获DOS屏幕,RM电影和游戏等画面。(Y ) 5. Adobe Acrobat Reader 可以解压缩文件。 (N ) 6.金山词霸2002支持Windows XP,但不支持office XP 系统。 (N ) 7. 在用Ner-Burning Room 刻录CD 音乐时,若误将数据文件从本地资源管理器中拖入刻录机虚拟资源管理器中时,该文件将被添加到音乐CD 中。(N ) 8. Symantec Ghost 可以实现数据修复。 (N ) 9. Easy Recovery 可以恢复任何被从硬盘上删除的文件。(N ) 10. Ctrem 软件具有防发呆功能。 (Y ) 二.选择题(每小题2分,共40 分) 1、下列不属于金山词霸所具有的功能的是:(C ) A、屏幕取词 B、词典查词 C、全文翻译 D、用户词典 2、东方快车提供了(C )种语言翻 译。 1种B、2种C、3种D、4种 3、:Vintual CD 中的Creat 按钮的功能为 (B ) 编辑映像文件B、创建光盘的映像文件 映像文件的显示方式D、将映像文件插入虚拟光驱 4、下列哪一个软件属于光盘刻录软件(A ) A 、Nero-Buring Room B:Virtual CD C: DAEMON Tools D:iparmor 5、下列不属于媒体播放工具的是(D ) A、Winamp B、超级解霸 C、Realone Player D:WinRAR

主流软件自动化测试工具介绍

主流自动化测试工具介绍 一、功能测试工具 1、Selenium (浏览器自动化测试框架) Selenium[1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。据 Selenium 主页所说,与其他测试工具相比,使用 Selenium 的最大好处是: Selenium [2] 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Mozilla 和 Firefox 中运行。其他测试工具都不能覆盖如此多的平台。使用 Selenium 和在浏览器中运行测试还有很多其他好处。 下面是主要的两大好处: 通过编写模仿用户操作的 Selenium 测试脚本,可以从终端用户的角度来测试应用程序。通过在不同浏览器中运行测试,更容易发现浏览器的不兼容性。Selenium 的核心,也称browser bot,是用 JavaScript 编写的。这使得测试脚本可以在受支持的浏览器中运行。browser bot 负责执行从测试脚本接收到的命令,测试脚本要么是用 HTML 的表布局编写的,要么是使用一种受支持的编程语言编写的。 2、QTP测试工具 全名HP QuickTest Professional software ,最新的版本为HP QuickTest Professional 11.0 QTP是quicktest Professional的简称,是一种自动测试工具。使用QTP的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等 QuickTest针对的是GUI应用程序,包括传统的Windows应用程序,以及现在越来越流行的

PerformanceRunner自动化测试工具讲解

7.7 PerformanceRunner简介 (2) 7.7.1 PerformanceRunner的组成 (2) 7.7.1.1 PerformanceRunner功能简介 (11) 7.7.2 PerformanceRunner的安装要求 (12) 7.7.3 PerformanceRunner的安装 (12) 7.7.4配置PerformanceRunner (15) 7.7.4.1配置PerformanceRunner (15) 7.7.5 PerformanceRunner的使用流程 (17) 7.7.5.1 PerformanceRunner使用流程简介 (17) 7.7.5.2创建项目 (17) 7.7.5.3创建脚本 (19) 7.7.5.4 录制脚本 (21) 7.7.5.5 录制回放 (24) 7.7.5.6 关联脚本 (25) 7.7.5.6 属性校验 (26) 7.7.5.7 添加事务 (29) 7.7.5.8 场景的创建与执行 (29) 7.7.5.9 测试结果和数据分析 (33)

7.7 PerformanceRunner简介 7.7.1 PerformanceRunner的组成 用户界面-生成器 测试或监控环境时,需要在系统中模拟用户的真实行为。PerformanceRunner 测试工具模拟多个用户在系统中同时工作或访问系统的环境。为了进行这种模拟,用虚拟用户(即 Vuser)代替现实生活中的人。Vuser执行的操作在 Vuser 脚本中进行描述。用于创建 Vuser 脚本的主要工具是脚本生成器。生成器不仅录制 Vuser 脚本,它还运行 Vuser 脚本。使用生成器运行脚本有助于进行调试。使用生成器可模拟 Vuser 脚本在大型测试中的运行情况。录制 Vuser 脚本时,生成器会生成多个函数,用以定义录制会话期间所执行的操作。生成器将这些函数插入到脚本编辑器中以创建基本 Vuser脚本。

相关文档
最新文档