zoukankan      html  css  js  c++  java
  • unittest与pytest对比

    ---相同点:
    测试框架:通过python代码来编写用例、搜集用例、运行用例、生成报告
    ---编写用例:
    unittest:继承TestCase unittest.testcase
    pytest:函数/类里面的方法,用例名称必须以test_开头,如果用例在类中,类名必须以Test开头
    ---前置后置:
    unittest:setup/teardown setupClass,tearDownClass
    setup:当中得到的变量,如何从传递给测试用例 self.xxx
    setupClass:cls.xxx

    pytest:
    方案一:沿用unittest的风格
    1、用例级别:setup teardown 类和类外部的用例都可以使用
    2、类级别:setup_class teardown_class
    @classmethod
    def setup_class(self):
    print("类前置-01")
    @classmethod
    def teardown_class(self):
    print("类后置01")
    3、模块级别:
    setup_module teardown_module
    方案二:fixture
    先定义再调用
    定义:@pytest.fixture() def init()
    调用:@pytest.mark.usefixtures("init")
    1、函数实现的,函数名称不固定---如何知道它是前置/后置
    @pytest.fixture
    def fix():
    pass
    2、前置和后置操作,写在一个函数里面 ---如何区分哪些是前置代码 哪些是后置代码
    @pytest.fixture
    def fix():
    前置代码
    yeild #分隔线
    后置代码
    3、4个作用域 测试函数(function)、测试类(class)、测试模块文件(module)、测试会话(session)
    @pytest.fixture(scope=function/class/module/session)
    def fix():
    前置代码
    yield #分隔线
    后置代码
    4、不需要跟测试类/测试函数放在一起,需要时再调用
    5、前置操作得到的一些数据,如何传递给测试用例
    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") 程序会自动找
    6、共享机制: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[参数]
    如何自动收集用例:
    1、目录--从哪个目录下开始搜索用例:
    rootdir:在哪个路径下运行,则pytest自动在当前路径下进行查找-rootdir

    2、文件名--命名符合test_*.py或者*_test.py条件的文件名
    3、函数/类下方法:-函数名以test_开头
    -以Test开头(不含__init__)的类下的test_开头方法
    搜集并运行用例
    方式一:pytest -s -v 控制台显示详细用例执行情况
    方式二:python文件中-pytest.main()
    ---执行顺序
    1、文件名:ASCALL码顺序从上到下
    2、文件内部:按照代码先后顺序-即从上到下执行
    ---测试报告
    unittest:HTMLTestRunner BeautifulReport
    pyteest:allure
  • 相关阅读:
    attempt to write a readonly database错误的解决(C#,SQLite) ..
    .net中正则表达式的客户端验证javascript
    WinForm : 利用webBrowser完成填充数据并 自动登陆某网站。。。。。。。
    获取一个网页数据返回的编码类型是gzip,解压后,网页中包含的中文字段变成了乱码,只需要把编码更改为BIG5 ,繁体字就正常显示了!
    将 windows程序(exe程序)运行为windows服务 !!!
    Asp.Net2.0 如何设置 GridView 合并行或列?
    奖金不兑现,我该怎么办?
    GridView二层表头与三层表头的设计。。。。。。。。。。。。。。。。。。。。。。。。
    C# 一个多线程操作控件的例子.#######
    SQL SERVER 2000 中的标识值获取函数 !!!!
  • 原文地址:https://www.cnblogs.com/dvbbs2012/p/14999489.html
Copyright © 2011-2022 走看看