why automation?
We have to read a lot of documentation every day.
Bad experience made us suspicious about the correctness of any external
documentation. We don't really like writing documentation ourselves because
we know that it is only a matter of time until it is out of sync with the
system and all our effort will be wasted. If the documentation is done
via automated tests, it is assured to be up to date, making it a reliable
source of information. We are much more motivated to invest our
time for this.
We advise to do manual checks for everything that
cannot break after it worked once. Everything else should be automated if the automation
can be done without excessive costs.
测试用例文档管理有一个问题。如2.5版本对2.4版本添加了新功能,我们可能会针对新功能写一个用例文档,但是有部分是对2.4版本的修改。我们是应该
将2.4版本的所有用例全部放到2.5版本并进行更新吗?理想状态下应该全部更新文档并将原有用例全部跑一遍。但要是手工来完成回归工作量太大。要是将所
有的测试用例组织成自动化用例而不是用例文档就简单多了。这是我们为什么用webtest, selenium等自动化测试工具的原因之一。
data driven or record/replay
Functional testing can be classified as being either data driven or record/replay.
Canoo WebTest follows the data driven approach. Record/replay is appealing at first, because you can
create a lot of tests in a short time. A proxy logs what pages you request and stores
the results. It can then replay the requests and compare the results against the stored
ones. You typically have to tweak this procedure to tell the program what parts of the
page are expected to change. The actual date and time are the most obvious examples.
Every small change to your webapp causes a lot of these tests to fail. These failures
must be manually processed to separate the "real" failures from the "false negatives".
Doing this is almost as tedious and error prone as the manual testing and is therefore
discouraged e.g. by the
Automated Testing Specialists
group.
Record/Playback is the least cost-effective method of automating test cases.
Keith Zambelich
Co-author of the WinRunner ATS Toolkit.
Functional tests and unit tests.
Functional tests do not replace unit tests. They work together hand-in-hand.
Consider the following example: Your
Webapp displays an html table that is filled with data from the database. The
maximum number of rows should be 20 and if there is more data available, a link
should be shown that points to the page that contains the next 20 entries.
If there is no data, no table should be shown, but the message "sorry, no data".
We would test this with a) no data b) one row c) 5 rows d) exactly 20 rows
e) 21 rows f) 40 rows g) 41 rows. A naive way of testing this would be to manipulate the database
(maybe by using an administration servlet that we can call via "invoke") prior
to calling the page. But this is not only very slow but also a little dangerous.
What if two tests run concurrently against the same test database? They
will mutually destroy their test setup. What if the test run breaks? Is the
state of the test database rolled back? The whole job is difficult to do for a
functional test, but easy and quick for a unit test. A unit test can easily
call the table rendering and assert the proper "paging" without even having a
database! What is left for the functional test is to assert that the table rendering logic
was called at all.
(from http://webtest.canoo.com/webtest/manual/whitepaper.html
)
-----------------------------------------------------------------------------------------------------------------------------
<!---->一、
<!---->在
web
自动化测试思路上,我觉得
selenium
非常成熟。
selenium
能够很好地模拟人工测试
web
系统的过程。即人工能在页面完成的操作
selenium
基本能够通过录制来完成,人能够完成的验证
selenium
也能够很好地来验证。实际上
selenium
定义的一种语言,这种语言由很多命令组成。命令分成三种风格动作(
Actions
)
,
获取因子(
Accessors
)
和断言(
Assertions
)。
Actions
实际上是模拟人工在页面上所进行的操作,如输入表单,点击链接等。
Accessors
用来获取页面上某部分的数据,它可以通过
id, xpath
来获取页面上任何地方的数据。
Assertions
用来检查实际所取得的结果与期望结果是否一致。
但是在实现程度上,无论是对浏览器的支持,还是和其它语言集成,或是缺陷方面,我觉得这个产品还不是太成熟。这可能是由于页面技术发展太快的原因。所以我们还有很大的对这个工具改善并应用于我们日常测试的空间。
二、通过在性能管理平台中运用
selenium
来测试,我总结出在设计
testcase
时应该注意以下事项:
<!---->1.
<!---->每个
testcase
不能包括多个功能点的测试。因为这种情况下如果前一个功能点
fail
会造成后面的
case
无法正常运行(特别是在某一个动作无法执行时)。所以,建议一个
testcase
只测试一个功能点
。如新增用户一个
case
,查询用户一个
case
。而将用户操作相关的
case
组成一个
suite.
<!---->2.
<!---->在需求描述,设计等阶段就应该明确细化功能点。这样有利行测试用例的设计和录制。
<!---->3.
<!---->case
之间应该保持独立性。在理想状态下,我们期望所有的
testcase
完全独立。如在每次执行
testcase
前初始化数据库状态。这样我们就能单独选择部分
case
来执行。
<!---->4.
<!---->先录制查询
case,
再录制
update
case.
初始化数据库状态的成本比较高,如果执行每个
case
都初始化一次会让
case
运行很慢。我在测试性能管理系统时做了这种尝试。我们先备份一个初始数据库,这中间存放着一定量的数据,这些数据能满足测试查询功能。我们录制
case
时可以先录制查询的
case.
以后在跑
case
时先基于这个数据库跑查询的
case,
这样我们能基于一个初始数据库来完成查询的测试。在录制
update
的
case
时,我们尽量让它们相互独立,即后一个的状态不会依赖于前一个。我们希望
selenium
能确定
testcase
的执行顺序,这样我们就能确保先运行查询的
case
。
---------------------------------------------------------------------------------------------------------------------------------
分享到:
相关推荐
Gennadiy Alpaev所著的《软件测试自动化技巧》一书深入浅出地介绍了自动化测试的基础知识以及高级技巧,对于想要深入掌握自动化测试技术的工程师来说是一本非常有价值的参考书籍。 ### 重要知识点详解 #### 1. ...
标题与描述均提到了“Rational Functional Tester - Tips and Tricks”,这意味着文章将深入探讨Rational Functional Tester(RFT)这款自动化测试工具的实用技巧。RFT是IBM Rational Software Development ...
《QTP10的Tips.txt文件.rar》是一个压缩包,其中包含了有关QTP10(QuickTest Professional 10)的技巧和建议的文本...通过阅读《QTP10的Tips.txt文件.pdf》,读者可以深入理解并掌握这些知识,提升自动化测试的技能。
- **持续集成/持续部署(CI/CD)**:与Azure DevOps集成,实现自动化构建和部署。 10. **协作与源码管理** - **团队服务**:集成Visual Studio Team Services或Azure DevOps,进行项目管理和团队协作。 - **代码...
13. **懒加载和内存管理**:Swift中的`lazy`存储属性和自动引用计数(Auto Reference Counting, ARC)机制帮助开发者有效地管理内存。 14. **SwiftUI**:虽然Swift 4.0时SwiftUI还未发布,但书中可能也会提及iOS开发...
综上所述,Robotium是一款非常强大的自动化测试工具,不仅简化了测试案例的编写过程,而且支持广泛的测试场景,极大地提高了测试效率。通过深入学习以上知识点,开发者可以更好地利用Robotium完成各种测试任务。
FrameworkQTP是一个专注于自动化测试的专业框架,它基于HP的QuickTest Professional(QTP)工具,为测试人员提供了一种高效且结构化的自动化测试解决方案。QTP是一款强大的功能自动化测试工具,能够支持多种应用类型...
在没有详细描述的情况下,我们可以假设这些文件可能包含了一些测试用例或自动化测试框架的部分。例如,ChildView.h和MainFrm.h可能是界面组件的接口定义,用于创建和管理测试场景。而ProcMon.dsp和ProcMon.dsw则可能...
12. **JUnit测试**:学习如何使用JUnit进行单元测试,以及Mockito等库进行模拟对象测试,是保证代码质量的重要手段。 13. **Spring框架**:作为Java企业级应用最常用的框架之一,Spring提供了依赖注入、AOP(面向切...
- **用途**:自动化系统维护任务的调度,减少手动操作。 ##### 2.3 包含文件 (Includes) - **2.3.1 MBDCONWF – IDOC DEFINITIONS** - **概述**:包含了 IDoc 定义和相关处理逻辑。 - **用途**:作为 IDoc 开发...
这可能包括自定义快捷键、插件集成、自动化脚本等。通过阅读源代码和测试用例,开发者可以学习到如何在Vim中实现这些功能,并根据自己的需求进行定制。 在实际使用中,开发者可以通过Python的`setup.py`脚本来安装...
15. Swift的测试:Swift提供了测试框架,支持编写单元测试,以便在开发过程中进行代码质量的检验。 16. Swift开发环境介绍:包括Swift命令行工具的使用,Playground的介绍以及如何使用Playground进行代码的可视化...
6. **编译脚本或构建工具**:如Makefile(Unix/Linux)、build.gradle(Gradle)、setup.py(Python)等,用于自动化构建过程。 7. **许可证文件**:如LICENSE,声明项目的开源许可协议,规定了代码的使用和分发条件...
9. **单元测试与持续集成**:编写测试用例,使用 XCTest 进行单元测试,了解 TDD(测试驱动开发)和 CI/CD(持续集成/持续部署)。 10. **性能优化**:分析与优化代码性能,了解性能瓶颈和解决策略。 11. **代码...
Swift的内存管理是其独特之处,它采用自动引用计数(ARC)和弱引用来确保内存的有效利用。这部分内容对于防止内存泄漏和理解对象生命周期至关重要。 在iOS开发中,UI编程是必不可少的。书中可能涵盖了Storyboard、...
西门子S7-200系列是该公司推出的一款小型可编程逻辑控制器(PLC),在工业自动化领域广泛应用。此压缩包"西门子PLC程序源码-S7_200中文实例Tips&tricks.zip"包含了针对该型号PLC的程序源码和中文实例,旨在帮助用户...
6. **测试与自动化**:iOS开发中的测试是不可或缺的部分,项目可能涉及到单元测试、集成测试的编写,以及如何利用CocoaPods、Carthage等工具进行依赖管理和持续集成。 7. **最新技术的应用**:随着时间推移,开发者...
- **Maven或Gradle**:使用构建工具管理项目依赖,自动化构建流程。 - **模块化(Java 9+)**:理解Jigsaw项目引入的模块系统,如何编写模块化应用。 9. **Spring框架** - **依赖注入(DI)**:理解Spring的核心...