二、IValidator
當初看到這個開源的測試框架時,不由又喜又悔。喜的是:IValidator居然跟我寫的TAF(Testing Automation Framework)有幾分相象,真是英雄所見略同啊,而且它的版本已經是2.1了,看來這一套還是可行的;悔的是:為何當初沒發現,也省的我摸黑,沒有一個參考。
好了,賣足了關子,給大家介紹一下這IValidator的樣子。
IValidator的功能特性有:
1、測試用例是基于XML的。
2、適用于復合測試的場景。
3、集成Eclipse的開發環境。
IValidator使用XML來描述測試用例,如:下面是一個例子:
<?xml version="1.0" encoding="UTF-8"?>
<descriptor-repository xmlns="http://www.ivalidator.org/schemas/xml-repository">
<test name="Sleeping Suite">
<setups>
<setup alias="sleep"/>
</setups>
<flow>
<test alias="sleep"/>
<test alias="sleep"/>
<test alias="sleep"/>
</flow>
<checkups>
<checkup alias="sleep"/>
</checkups>
<teardowns>
<teardown alias="sleep"/>
</teardowns>
</test>
<unitlib>
<unit name="sleep">
<description>
Sleeps for the provided count of seconds.
</description>
<parameters>
<parameter name="seconds" value="5"/>
</parameters>
<instance class="org.ivalidator.sample.base.SleepTest" method="sleep"/>
</unit>
</unitlib>
</descriptor-repository>
如果你仔細看的話,你其實已經明白每個xml節點里的含義了--每個節點會調用某些Java類的方法來完成一些功能,把這些功能串其來能完成一個完整的測試用例了。注意alias的值是在unitlib節點下定義的,以下是代碼SleepTest 類。
public class SleepTest implements Unit
{
private UnitContext context;
/**
* @inheritDoc
*/
public void setContext(UnitContext _context)
{
this.context = _context;
}
/**
* Sleeps for <code>seconds</code> milliseconds. If <code>seconds</code>
* is not provided, 1 second is the default.
*/
public void sleep()
{
Parameter paramSeconds = this.context.getParameter("seconds");
int seconds = paramSeconds != null ? paramSeconds.asInt() : 1;
try
{
for(int i = seconds; i > 0; i--)
{
this.context.getLogger().info("Seconds to go: " + i);
Thread.sleep(1000);
}
}
catch(InterruptedException e)
{
return;
}
}
}
也是說,你只要實現Unit接口,IValidator框架會將xml中的數據傳入UnitContext 中(通過setContext方法),IValidator框架會在當前測試用例的整個生命周期中維護UnitContext,
而測試代碼也可以將測試過程中的中間數據放回到UnitContext中,也是說,測試代碼于測試框架之間交互是通過UnitContext來完成的。
客觀來將IValidator是JUnit的一種補充,但不能取代JUnit。
好處不說了,留給讀者去體會吧,個人認為的缺點有:
1、框架本身不提供斷言功能,僅僅提供測試步驟的調度和維護測試代碼的上下 文,所有的實現都是在實現類里面,雖然可以通過修改輸入參數來改變測試輸入條 件,但顯然仍過于蒼白。
2、報告不夠全面,從報告中仍不能
3、減輕開發人員的多少工作量有限。
不過,我覺得,開發人員借助IValidator,可以將測試代碼寫的靈活一些,測試數據不要寫死在代碼里面,這樣,測試人員可以修改測試數據來校驗代碼的質量,這在不少的場景下很有意義。