最近在做C#版的测试框架,目的其实是让QA不用写代码就可以测试API,QA需要写一些XML,然后交给这个测试框架运行。
设计其实比较直接,把功能测试中的一些概念抽取出来包装下就可以了,XML要人可读可写,然后能够直接转换为对应的类,免去解析的过程最好。
我提取出来的主要概念如下:
- Library,对应的其实就是DLL,就像java中的jar一样,可以从指定的路径load,也可以从系统的GAC(windows特定的东西)里面load。
- Instance,其实本来想叫Object,因为是关键字,只能取这个比较紧似的名字,另外,声明的也确实是对象的instance而不是对象定义。
- List,集合类型,可以当成List或者Array用。
- WebService,这个是Instance的子类可能有点怪,但是框架的工作机制是生成WebService的Stub的对应的类,所以其实也是Instance,只是有一些额外的属性。
- Operation,其实就是操作了,有很多子类型:
- Method,就是方法调用了
- Verify,主要是为了做结果验证,其实也是Method,只不过掩盖了实现,我用的就是NUit的实现。
- Task,Operation的集合,本来想加一个Function的,但是感觉Function和Task功能完全一样。Task就相当于功能测试或者单元测试的一个方法。
- Express,表达式,主要是为了支持简单的字符串连接和数学运算。
- Field,获取或者设置Instance的field,我掩盖了C#中的Property和Field的区别,只提供Field,两种都可以访问。
- Loop,其实也是Operation的集合,但是会把集合中的Operation重复执行很多次,用于性能测试或者批量调用,会生成一个索引值供Operation引用生成不同的值。
- Indexer,访问集合类型中的某个指定下标的元素,主要是因为C#没有像Java一样提供Get(int index)方法,否则这个完全没有,直接用Method 就可以实现了。
- Finder,主要是简化了从集合类型中查找某个元素,框架没有提供if/else这样的逻辑控制,只能提供这个变向的方式。
- Wait,主要是提供Sleep以及异步调用支持,是Verify的子类型,可以每隔一段时间Verify一下,看看结果是不是match,然后有超时,超时就认为Veirfy失败。
- Define,就是组件声明,里面包含的就是上面提到的那些东西。
- Suite,就是Test Case了,包含Define列表和Task列表,以及Startup/Teardown
基本上已经涵盖测试中需要的大部分内容了。
一些额外的想法,Operation还是有很大扩展余地的,例如可以支持外部调用,例如调用一个命令行或者其它的程序。