进化的测试

关注软件测试,白盒测试,自动化测试,性能测试

Entries Tagged ‘自动化测试’

自动化测试中的sleep

最近在修改公司现有的一个自动化测试框架,里面用了很多time.sleep()方法,看着不是很爽,为什么我觉得sleep方法在自动化测试中不应该过多的使用呢,我甚至觉得应该尽可能避免sleep方法的使用,sleep可以作为增加自动化测试稳定性的手段,但是不能依赖sleep来让自动化系统稳定。
举个例子,如果一个UI的自动化测试,需要等待某个页面load完成以后才进行操作,那么需要对那个页面是否已经Load完成进行判断,而不应该sleep(x),x是一个magic number,有时候1、2秒就足以,有时候它却不知道有多大,因为已经超时了!那如果我们在check页面状态之前做一个短时间的sleep,那么在某些场合下可以增加这个自动化测试的稳定性,但是最终整个自动化测试的脚本是不会依赖于这个sleep的语句来达到稳定的。
在做自动化测试的时候,最常见的两种判断就是1. 某程序已经成功启动,某页面已经加载完毕。 2. 某程序已经正常关闭,某服务已经顺利停止。
回到实际的工作,我要判断被测的程序是否已经正常启动,可以用系统提供的一些工具,或者调用一些接口,例如SNMP命令,或者是调用一下Lua脚本等,如果他们都返回我们期望的数据,那么可以认为程序已经成功启动了。反之,如果前面的这些命令出错了,那么我也可以认为程序已经是关闭了的。
要实现自动化测试,就必须要让测试代码每时每刻都掌握着被测系统的状态,sleep方法会让自动化测试脚本的行为变得诡异。

实现数据驱动的CodedUI Test

昨天介绍了如何创建一个简单的CodedUI Test。我们也知道,依靠录制回放产生的自动化测试是非常不可靠的,那些在微软的大牛们肯定也早就知道了。虽然用VSTS录制一个自动化测试脚本的过程不是那么友好,也不是很方便,不过它产生的测试代码修改起来还是比较容易的。下面我们就看看如何把一个简单的CodedUI Test改造为数据驱动脚本。
对于每一段录制的操作,VSTS都可以把它抽象成一个方法,它会把这些操作以静态方法的形式存放在一个叫RecordedMethods的类里面。可以对这些方法做任意的修改,我就把给需要输入的方法增加一个输入的参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class RecordedMethods
{
public static void FirstClick(TestContext testContext, string first)
{
//第一个输入
}
 
public static void Operation(TestContext testContext, string operater)
{
//操作符
}
 
public static void SecordClick(TestContext testContext, string second)
{
//第二个输入
}
 
public static void GetResult(TestContext testContext)
{
//按那个等于号
}
}

开源自动化测试框架WatiN 2.0 CTP2已经发布

WatiN是一个开源自动化测试框架,在一些中小型的项目中可以取代昂贵的商业工具,例如QTP。今天WatiN发布了第二个社区预览版(CTP)。这个版本的详细release note还没有出来,但是我已经发现了一个非常好的改进,就是抽象出了IBrowser接口,IE和Firefox这两个类都实现了IBrowser接口,真的可以实现写一次代码,在若干个不同的浏览器中运行自动化测试了。
写一个简单的方法,这个方法要做的就是浏览MySpace聚友网的主页,然后检查一下有没有“关于我们”这段文字(但是即使不存在也没事,这个例子只是意思意思)。