unittest与pytest对比

---相同点:     测试框架:经过python代码来编写用例、搜集用例、运行用例、生成报告---编写用例:    unittest:继承TestCase   unittest.testcase    pytest:函数/类里面的方法,用例名称必须以test_开头,若是用例在类中,类名必须以Test开头---前置后置:    unittest:setup/teardown    setupClass,tearDownClass      setup:当中获得的变量,如何从传递给测试用例   self.xxx      setupClass:cls.xxx    pytest:        方案一:沿用unittest的风格            一、用例级别:setup teardown    类和类外部的用例均可以使用            二、类级别:setup_class  teardown_class                @classmethod                def setup_class(self):                    print("类前置-01")                @classmethod                def teardown_class(self):                    print("类后置01")             三、模块级别:                setup_module   teardown_module        方案二:fixture              先定义再调用                    定义:@pytest.fixture() def init()                    调用:@pytest.mark.usefixtures("init")            一、函数实现的,函数名称不固定---如何知道它是前置/后置                @pytest.fixture                def fix():                    pass            二、前置和后置操做,写在一个函数里面 ---如何区分哪些是前置代码 哪些是后置代码                @pytest.fixture                def fix():                    前置代码                    yeild #分隔线                    后置代码            三、4个做用域 测试函数(function)、测试类(class)、测试模块文件(module)、测试会话(session)                @pytest.fixture(scope=function/class/module/session)                def fix():                    前置代码                    yield #分隔线                    后置代码            四、不须要跟测试类/测试函数放在一块儿,须要时再调用            五、前置操做获得的一些数据,如何传递给测试用例                yield 返回值                在测试用例当中,以fixture函数名做为用例参数,用例参数接收返回值                    def init():                        print("做用于为测试函数的======前置======代码")                        a = [1,2,3,4,5,6]                        yield a                    class TestDay:                        def test_new01(self,init):                            print("===类下的用例1===")                            for i in init:                                print(i)                测试函数的参数有两种:fixture 参数化-case                若是fixture有返回值,那么将它做为测试函数的参数时,则能够不用使用:@pytest.mark.usefixtures("init")  程序会自动找            六、共享机制:conftest.py                conftest.py:定义fixture,能够定义多个                共享的范围:当前conftest.py所在目录下(包括子孙目录)的全部测试用例共享                若是须要在test01基础上增长内容,变成test02。须要在test02上引用test01---伪继承                  @pytest.fixture()                  def fix01():                     pass                  @pytest.fixture()                  def fix02(fix01):                     新增的代码                     yield fix01                  执行顺序:fix01前置   fix02前置   fix02后置   fix01后置                  嵌套的前提:fix01 与fix02  要么同级,要么fix01>fix02---断言   unittest:self.assert   pytest:assert 表达式,根据表达式的结果判断经过/失败---收集用例   用例分散在多个文件中   unittest:TestLoad.discover(目录)---收集到套件中,run方法执行   pytest:不须要写代码去搜集用例,自动收集-查找用例的方式。执行用例时会自动收集           pytest命令行:pytest[参数]     如何自动收集用例:        一、目录--从哪一个目录下开始搜索用例:            rootdir:在哪一个路径下运行,则pytest自动在当前路径下进行查找-rootdir        二、文件名--命名符合test_*.py或者*_test.py条件的文件名        三、函数/类下方法:-函数名以test_开头                       -以Test开头(不含__init__)的类下的test_开头方法        搜集并运行用例          方式一:pytest -s -v 控制台显示详细用例执行状况          方式二:python文件中-pytest.main()---执行顺序        一、文件名:ASCALL码顺序从上到下        二、文件内部:按照代码前后顺序-即从上到下执行---测试报告      unittest:HTMLTestRunner   BeautifulReport      pyteest:allure