Maria 项目自动测试的相关实现

接口构的工作大部分完全之后。下面是写自动测试的代码。根据导师的要求,maria 项目基本上算是应用测试,验证 push 和 clone 两个功能可以成功执行就OK了。

测试框架比较

我先做了一些调研,了解了一下 python 下主流的三种测试框架:

py.test
nose
unittest

unittest 是这里面唯一加入在 python 基础类库里面的,也是三者中限制最多最不方便的一个测试平台。其中的测试类必须继承自 unittest.TestCase。它得加上两行模块入口代码来被搜索测试并运行:

if __name__ == '__main__':
    unittest.main()

再说说两个外部测试模块 nose 和 py.test。它们都可以搜索项目的源代码树,寻找项目的所有测试,所以不需要集中的测试列表,尽管它们采用的测试发现规则不太一样。二者都提供了命令行工具,所以不需要自己的测试命令。在代码目录下敲 nosetestspy.test 就可以自动检索测试案例并执行。这一点挺好的。

我选择了 py.test,因为它有很漂亮的官方文档,还是彩色的终端输出。。不过后来在使用的过程中,最终还是转投了nose和unittest阵营。主要考虑还是兼容性,使用nose,可以不改代码直接跑unittest。

maria 自动测试实现

主要测试类的构造如下:

class TestMaria(unittest.TestCase):

    def setUp(self):

    def tearDown(self):

    def test_clone(self):

    def test_push(self):

在 方法 setUp 中建立空仓库,然后用 subprocess 运行一个 maria 服务器,test_clonetest_push 分别验证 git clone 、git push 是否成功运行。最后 tearDown 中进行扫尾工作,关闭子进程,删除临时仓库。

把它们封装类主要考虑是,在 setUp 当中开启一个子进程跑 maria 服务器之后,我希望在 tearDown 中能把这个子进程关闭了。

开始我很奇怪的是,setUptearDown 在每个测试方法执行的时候都被调用了,导致了一些问题。我期望是的,setUp 在所有测试执行前只调用一次进行初始化,tearDown 也只在所有测试结束后执行一次。

google 之后发现,不论是 nose 还是 py.test ,它们都是针对每个测试都要执行一次的。这时候我才明白了为啥这些测试框架叫单元测试了。所谓单元测试,每个测试是应该保持独立的。我期望 setUp -> test_clone -> test_push -> tearDown 的执行顺序,让 test_push 使用在 test_clone 创建的仓库,这种依赖关系已经违背了测试之间的独立性。这么一想,代码就好改了。

阅读更多
个人分类: 开源夏令营
想对作者说点什么? 我来说一句

自动测试系统

2013年01月17日 6.79MB 下载

软件自动测试教程说明

2008年10月16日 811KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭