pytest和unittest的区别
基本测试用例:
unittest- 需要 import unittest
? 写case必须定义类
? 测试类必须继承class TestLogin(unittest.TestCase):
? 测试用例函数必须以test开头 def test_login1(self):
pytest - 需要import pytest
? 不必须定义类,类和函数都支持
? 类必须以Test开头
? 函数必须以test开头
断言:
unittest- 提供了很多自带的断言,通过self.assertEquart(预期结果,实际结果,断言不通过的报错信息-可不写)
pytest - 只需要用关键字 assetr 1 != 2:
参数化:
unittest- 安装第三方模块 parameterized
? @parameterized.parameterized.expand((【】,【】,【】))
? 传入的是一个二维数组,一个数组就是执行一次case
pytest - 自带的 pytest.mark.parameterized
? @pytest.mark.parameterized(“参数名字”,【1,2,3】)单个参数的写法,先传入参数名字,再传入 一个数组,数组的每一个元素执行一次case
? @pytest.mark.parameterized("参数名字1,参数名字2“,【[1,2 ],[ 3,4]】) 多个参数的写法,传入多 个参数名字,再传入一个二维数组
? @pytest.mark.parametrize(“a,c”, [(1, 2), (0.5, 3)])
? @pytest.mark.parametrize(“b”, ["+", “-”, “*”, “/”]) 这种2行的写法能做到参数轮询组合运行case
测试用例的跳过:
unittest- 使用 @unittest.skip(‘跳过原因’) 和 @unittest.skipIf(‘True或者False’, ‘跳过的原因’) 来装饰跳过,可以跳过类也可以跳过函数 pytest - 使用 @pytest.mark.skip(‘跳过原因’) 和 @pytest.mark.skipIf(‘True或者False’, ‘跳过的原因’) 来装饰跳过,可以装饰类也可以装饰函数
用例查找:
unittest- 是使用内置的方法,去查找某一个文件夹下面的某个条件的文件
test_suit = unittest.defaultTestLoader.discover(’ test_case ', ’ test*.py ') 从test_case这个文件夹下面查找,以test开头的py文件,返回一个用例集合
test_runner = unittest.TextTestRunner() 实例化test_runner
test_runner.run(test_suit) 使用test_runner 运行测试用例集 test_suit,可直接运行了
pytest - 在 _ _ name_ _ = _ main _下面运行 pytest.main(),在括号里来指定运行内容和运行方式
pytest.main () 什么都不指定,从当前目录下所有文件夹搜索case
pytest.main ("-q",_ file ]) -q是安静模式, _ file_ _是从当前文件下面执行case
pytest.main (’-vs’, ’ ./case ') 指定查找目录是当前文件夹上一级的case文件夹,-v是详细模式-s是打印print信息
pytest.mian (’ ./case ', ’ -m ', ’ smoke ') 指定运行smoke标签的case
前置、后置操作:
unittest- @classmethod
setUpClass 所有case运行之前执行一次,是一个类方法,需要装饰
setUp 每条case运行之前都执行
@classmethod
tearDownClas 所有case运行之后执行一次,是一个类方法,需要装饰
tearDown 每条case运行之后都执行
pytest - 下面是函数的方法:
setup_module 所有case运行之前执行一次
teardown_module 所有case运行之后执行一次
setup_function 每条case运行之前执行
teardown_function 每条case运行之后执行
下面是类的方法:
setup_class 所有case执行之前执行一次
eardown_class 所有case执行之后执行一次
setup_method 每条case执行之前执行
teardown_methon 每条case执行之后执行
用例标签:
unittest -无
pytest - 用装饰器 @pytest.mark.smoke; @pytest.mark.online
- 可以装饰类,可以装饰方法
- 统一的标签管理,在一个文件里case_tags定义: smoke=pytest.mark.smoke,这样在使用的时候导入统一的文件即可,@case_tages.smoke 来装饰
失败重跑: 产生测试报告:
选用pytest的理由:
1、pytest完全兼容unittest 2、pytest有标签,方便运行 3、断言更简单易用 4、支持用例失败重跑 5、pytest的参数化不依赖第三方库
1、unittest的四大模块 test_suit test_runner test_case test_fixture --其实就是setup和teardown
|