您的位置:首页 > 其它

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

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

测试框架比较

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

py.test
nose
unittest

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

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

再说说两个外部测试模块 nose 和 py.test。它们都可以搜索项目的源代码树,寻找项目的所有测试,所以不需要集中的测试列表,尽管它们采用的测试发现规则不太一样。二者都提供了命令行工具,所以不需要自己的测试命令。在代码目录下敲
nosetests
py.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_clone

test_push
分别验证 git clone 、git push 是否成功运行。最后
tearDown
中进行扫尾工作,关闭子进程,删除临时仓库。

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

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

google 之后发现,不论是 nose 还是 py.test ,它们都是针对每个测试都要执行一次的。这时候我才明白了为啥这些测试框架叫单元测试了。所谓单元测试,每个测试是应该保持独立的。我期望
setUp -> test_clone -> test_push -> tearDown
的执行顺序,让
test_push
使用在
test_clone
创建的仓库,这种依赖关系已经违背了测试之间的独立性。这么一想,代码就好改了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: