一、pytest测试函数标记
-
用例标签tags:@pytest.mark.{marker_name}
描述:@pytest.mark.{marker_name}自定义一个mark,然后pytest -v -m {marker_name}只运行标记了{marker_name}的函数,pytest -v -m "not {marker_name}"来运行未标记{marker_name}的。
语法:
ep:
@pytest.mark.smoke
@pytest.mark.get
$pytest -m 'smoke'
仅运行标记smoke的函数
$pytest -m 'smoke and get'
运行标记smoke和get的函数
$pytest -m 'smoke or get'
运行标记smoke或get的函数
$pytest -m 'smoke and not get'
运行标记smoke和标记不是get的函数
2. 跳过用例:@pytest.mark.skip @pytest.mark.skipif
描述:skip和skipif可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能。要给跳过的测试添加理由和条件,应当使用skipif。
语法:
ep:
@pytest.mark.skipif(condition)
@pytest.mark.skipif(tasks.__version__<'0.2.0',reason = 'not supported until version 0.2.0)
使用skip和skipif标记,测试会直接跳过,而不会被执行。
3.标记函数参数化:@pytest.mark.parametrize("a,b,expected", testdata)
语法:
- ep1 传入单个参数
@pytest.mark.parametrize('参数名',lists)
- ep2 传入两个参数
@pytest.mark.parametrize('参数1','参数2',[(
参数1_data[0],参数2_data[0]),(
参数1_data[1],参数2_data[1])]
传三个或者更多也是这样传。list的每个元素都是一个元祖,元祖里的每个元素和按参数顺序一一对应。
实例1:传两个参数
1 import pytest 2 @pytest.mark.parametrize("test_input,expected", 3 [ ("3+5", 8), 4 ("2+4", 6), 5 ("6 * 9", 42), 6 ]) 7 def test_eval(test_input, expected): 8 assert eval(test_input) == expected 9 10 if __name__ == "__main__": 11 pytest.main(["-s", "test_canshu1.py"])
实例2:参数组合
1 import pytest 2 @pytest.mark.parametrize("x", [0, 1]) 3 @pytest.mark.parametrize("y", [2, 3]) 4 def test_foo(x, y): 5 print("测试数据组合:x->%s, y->%s" % (x, y)) 6 7 结果: 8 test_canshu1.py 测试数据组合:x->0, y->2 9 .测试数据组合:x->1, y->2 10 .测试数据组合:x->0, y->3 11 .测试数据组合:x->1, y->3 .
实例3:传一个参数
1 import pytest 2 @pytest.mark.parametrize('task', tasks_to_try) 3 def test_add_4(task): 4 task_id = tasks.add(task) 5 t_from_db = tasks.get(task_id) 6 assert equivalent(t_from_db, task)