unittest 单元测试框架
使用unittest框架的时候,所有的类都先继承unittest.TestCase方法
set up 以及 teardown 方法
import unittest class LoginTestCase(unittest.TestCase): def setUp(self) -> None: print('准备工作') @classmethod def setUpClass(cls) -> None: print('class set up') def test_login(self): username = 'tom' pwd = '123' expected = 'welcome' self.assertEqual(expected, 'welcome') def tearDown(self) -> None: print('还原工作') @classmethod def tearDownClass(cls) -> None: print('class tear down')
set up和teardown方法有两种,一种是类方法,也就是@classmethod方法,一种是函数方法,区别在于类方法只运行一次,只有在启动和结束的时候运行,函数方法每个用例执行的时候都会执行。
test suit 测试套件
测试套件是可以将多个用例组合起来执行,组成一个测试套件。添加用例的时候可以使用addTest方法。
suite = unittest.TestSuite() //实例化unittest中的testsuite方法可以完成测试套件的实例化
test loader 测试加载器
向测试套件添加测试用例使用add Test的方式过于低效了,另一种方式是适用加载器loader。
loader = unittest.TestLoader() # 方法一: 通过测试用例类进行加载 suite.addTest(loader.loadTestsFromTestCase(MyTest1)) suite.addTest(loader.loadTestsFromTestCase(MyTest2)) # 方法二: 通过测试用例模板去加载 suite.addTest(loader.loadTestsFromModule(MyTest1)) suite.addTest(loader.loadTestsFromModule(MyTest2)) # # 方法三:通过路径加载 import os path = os.path.dirname(os.path.abspath(__file__)) suite.addTest(loader.discover(path))
test runner 测试运行器
runner负责运行测试套件。
# 运行 runner = unittest.TextTestRunner() runner.run(suite)
pytest 测试框架
pytest不需要继承初始类,import进来后就可以直接使用pytest。类中不能含有init方法,类和测试的命名方法中要包含test,运行的时候如果没有在编译器中指定testrunner为pytest的话,就需要设定main方法,然后执行pytest.main(),这时候loader会在整个项目路径下找到符合命名规范的用例进行执行,当然也可以指定文件查找,或者使用参数执行main方法使得输出中含有日志或者其他信息。
查找测试策略
pytest运行的时候会在当前目录下递归寻找符合用例规范的文件,也可以指定文件名称和用例名称执行 pytest test01.py :: test 01
,也可以使用pytest中的mark标记。
给用例打标签
注册标签名,通过.ini配置文件,文件格式:
pytest
[markers]:
do::do
do::undo
代码中执行的时候就可以使用@pytest.marks.do / undo标记用例。
参数化处理
使用@pytest.mark.parametrize方式参数化
@pytest.mark.paramtrize方法传递的是两种值,前面是参数,后面是数据,数据定义的时候可以使用pytest.param方法定义id,id是自定义的,方便理解数据含义。
data_1 = [ pytest.param(1, 2, 3, id="(a+b):pass"), # id的值可以自定义, 只要方便理解每个用例是干什么的即可 pytest.param(4, 5, 10, id="(a+b):fail") ]
fixture实现用例调用
import pytest @pytest.fixture() def init(): print('init...') return 1 def test1(init): print('test1') def test2(init): print('test2') if __name__ == '__main__': pytest.main(['-s', '04 pytest Fixture.py'])
setup和teardown 函数
allure报告的集成
allure已经集成在pytest中,使用pip安装以后就可以使用pytest allure执行测试,结束后会generate生成报告,或者使用allure generate手动生成报告。