pytest 全能的mark学习笔记(三)

一、pytest测试函数标记
  1. 用例标签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)
其他mark
  1. 标记用例执行顺顺序pytest.mark.run(order=1) (需安装pytest-ordering)
  2. 标记使用指定fixture(测试准备及清理方法) @pytest.mark.usefixtures()
  3. 标记超时时间 @pytest.mark.timeout(60) (需安装pytest-timeout)
    1. 或命令$pytest --timeout=300
  4. 标记失败重跑次数@pytest.mark.flaky(reruns=5, reruns_delay=1) (需安装pytest-rerunfailures)
    1. 最多失败重跑5次 & 如果失败则延迟1秒后重跑(可以不传)
    2. 或命令$pytest --reruns 5 --reruns-delay 1
  5. 标记类中用例按定义(书写)顺序执行(某一条失败则后面的用例不会执行) @pytest.mark.incremental
  

转载于:https://www.cnblogs.com/helloTerry1987/p/10960401.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值