其中,一个完整的测试流程就是一个测试用例,通过一些特定的输入得到相应,并对结果进行校验的过程,所有的用例都是直接继承于Unittest.TestCase类,TestCase是最小的测试单元,具有独立性。
测试固件就是在执行测试之前的准备工作,比如数据清理、创建临时数据库、目录、以及开启某些服务进程。毕竟我们在编写测试代码时,总会有一些重复的代码部分,就好比,当我们测试一个网站的登录操作时,简单分为三个用例:账号和密码都正确,账号正确密码错误,账号错误密码正确,这三种情况在执行用例时都需要首先访问系统地址,再输入账号和密码,点击登录操作,完成之后浏览器执行关闭操作,我们就可以通过setUp()将访问地址作为前置条件,通过tearDown()将关闭浏览器作为后置条件,测试固件就是整合了代码的公共部分。
测试套件就是把多个测试用例集合到一起。
而测试运行器则是提供测试用例运行环境,通过run()方法来执行测试用例,并在执行完成后将测试结果输出。
了解了这几个基本概念之后,再理解起来Unittest就不难了。
学习建议
综上对比和归纳总结,Unittest做为一个Python标准库,和Python版本绑定,非常稳定,不用担心兼容性的问题。
如果要学习一个单元测试框架,建议从Unittest开始,因为你可以接触到loader、suite、runner 这样的组件,对理解测试框架更有帮助,学习好Unittest以后,再学习Nose2或者Pytest这样更高级的框架,能有效提升编程效率。
很多同学在网上看到一些说Unittest过时或Unittest不高级的言论就开始批判, 显然是不对的。Unittest是其他Python单元测试框架的基础,没学好Unittest,其他的框架势必也学不好。
同时,Pytest支持参数化,可以细粒度地控制要测试的测试用例,它还拥有其他测试工具无法比拟的fixture模型,可以自动找到测试用例执行,并汇报测试结果。
再者,Pytest拥有丰富的基础库,可以大幅度提高用户编写测试用例的效率,可以很方便地与其他工具一起使用。
更重要的是,编写Pytest测试样例非常简单,只需要按照下面的规则:测试文件以test_开头(以_test结尾也可以)、测试类以Test开头并且不能带有init方法、测试函数以test_开头、断言使用基本的assert即可。
正因为此,现在使用Pytest的人也原来越多。
学习建议
综上对比和归纳总结,Unittest做为一个Python标准库,和Python版本绑定,非常稳定,不用担心兼容性的问题。
如果要学习一个单元测试框架,建议从Unittest开始,因为你可以接触到loader、suite、runner 这样的组件,对理解测试框架更有帮助,学习好Unittest以后,再学习Nose2或者Pytest这样更高级的框架,能有效提升编程效率。
很多同学在网上看到一些说Unittest过时或Unittest不高级的言论就开始批判, 显然是不对的。Unittest是其他Python单元测试框架的基础,没学好Unittest,其他的框架势必也学不好。
Nose2的主要目的是扩展Python的标准单元测试库Unittest,让编写和运行测试用例变得更容易。提供丰富的插件,例如测试用例加载器、覆盖度报告生成器、并行测试等内置插件和第三方插件,让单元测试变得更加完善。
它们有很多相同点,比如都兼容Unittest,支持使用函数作为测试用例、支持子测试、拥有插件体系等等。但也有很多不同点,比如Nose2不支持Nose所支持的所有测试用例项目结构、不支持包级别的测试前置和清理函数等等。
但Nose和Nose2在用例编写、测试夹具、子测试上做出改进,已经能让日常用例编写工作变得更加容易和灵活。同时又引入插件体系,进一步将单元测试框架的能力提升了一个大大的台阶,这让很多在基础测试功能之上的高阶功能的实现和共享成为了可能,因此众多开发者对它们情有独钟。
学习建议
综上对比和归纳总结,Unittest做为一个Python标准库,和Python版本绑定,非常稳定,不用担心兼容性的问题。
如果要学习一个单元测试框架,建议从Unittest开始,因为你可以接触到loader、suite、runner 这样的组件,对理解测试框架更有帮助,学习好Unittest以后,再学习Nose2或者Pytest这样更高级的框架,能有效提升编程效率。
很多同学在网上看到一些说Unittest过时或Unittest不高级的言论就开始批判, 显然是不对的。Unittest是其他Python单元测试框架的基础,没学好Unittest,其他的框架势必也学不好。