• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
机灵小不懂
博客园    首页    新随笔    联系   管理    订阅  订阅

Pytest 2 - pytest 选项详解

 pytest有很多选项,可以帮助我们运行心目中指定的测试用例。

 

假设已经存在以下文件:

ch1/test_one.py

      /test_two.py

      /test_three.py

      /test_four.py

 

内容如下:

test_one.py

def test_passing():
    assert (1,2,3) == (1,2,3)

test_two.py

def test_failed():
    assert (1,2,3) == (3,2,1)

test_three.py

"""
Test the Task data type.
"""

from collections import namedtuple

Task = namedtuple("Task", ['Summary', 'owner', 'done', 'id'])
Task.__new__.__defaults__ = (None, None, False, None )

def test_default():
    """Useing no parameters should invoke defaults"""
    t1 = Task()
    t2 = (None, None, False, None)
    assert t1 == t2

def test_member_access():
    """Check .field functionality of namedtuple"""
    t= Task('buy milk','brian')
    assert t.Summary == 'buy milk'
    assert t.owner == 'brian'
    assert (t.done, t.id) == (False, None)

test_four.py

"""
Test the Task data type.
"""

from collections import namedtuple

Task = namedtuple("Task", ['Summary', 'owner', 'done', 'id'])
Task.__new__.__defaults__ = (None, None, False, None )

def test_default():
    """Useing no parameters should invoke defaults"""
    t1 = Task()
    t2 = (None, None, False, None)
    assert t1 == t2

def test_member_access():
    """Check .field functionality of namedtuple"""
    t= Task('buy milk','brian')
    assert t.Summary == 'buy milk'
    assert t.owner == 'brian'
    assert (t.done, t.id) == (False, None)

 

使用命令行选项

1. pytest -- help  查看全部选项

       

2. -v选项,查看运行详情

   (1)  带 -v时:

       

     (2)  带 -v时: 

        

 

3. --collect-only 选项, 可以在真正运行用例之前使用此命令,来查看将要运行的用例是否正确。   

        

 

4. -k 匹配表达式来只运行和表达式匹配的用例,包括文件名及用例方法的匹配。

        (1) 匹配文件名:pytest -k four

        

       (2) 匹配方法名:pytest -k asdict

       

       (3)匹配多个条件 or: pytest -k "asdict or replace"

        

       (4)匹配多个条件 and: pytest -k "asdict and replace"

        

 

5. -m 选项(marker标记), 用于标记测试并分组,以便迅速选中并运行。以test_replace()和test_member_access()为例。他们不再一个文件里,但如果希望同时选中它们,可以先做好标记。

  •  -m 运行文件中标记过pytest.mark.XXX 中的XXX符合的用例
  • -m "mark1 and mark2" 用于运行两个标记都满足的用例
  • -m "mark1 or mark2" 用于运行两个标记满足其一的用例

     (1) 更改测试用例装饰器

    a. 将test_three.py内容改为

"""
Test the Task data type.
"""

from collections import namedtuple
import pytest  # 新增

Task = namedtuple("Task", ['Summary', 'owner', 'done', 'id'])
Task.__new__.__defaults__ = (None, None, False, None )

def test_default():
    """Useing no parameters should invoke defaults"""
    t1 = Task()
    t2 = (None, None, False, None)
    assert t1 == t2

@pytest.mark.run_thest_please  # 新增
def test_member_access():
    """Check .field functionality of namedtuple"""
    t= Task('buy milk','brian')
    assert t.Summary == 'buy milk'
    assert t.owner == 'brian'
    assert (t.done, t.id) == (False, None)

    b. test_four.py文件内容更改为

"""
Test the Task data type.
"""

from collections import namedtuple
import pytest  #新增

Task = namedtuple('Task',['Summary', 'owner', 'done', 'id'])
Task.__new__.__defaults__=(None, None, False, None)

def test_asdict():
    """_asdict() should return a dictionary"""
    t_task = Task('do something', 'okken', True, 21)
    t_dict = t_task._asdict()
    expected = {'Summary': 'do something', 'owner': 'okken', 'done': True, 'id': 21}
    assert t_dict == expected


@pytest.mark.run_these_please  #新增
def test_replace():
    """_replace() should change passed in fields"""
    t_before = Task('finished book', 'brian', False)
    t_after = t_before._replace(id=21, done=True)
    t_expected = ('finished book', 'brian', True, 21)
    assert  t_after == t_expected

  (2) 只运行run_these_please的用例:pytest -v -k run_these_please

             

6. -x选项。 通常有多个用例时,一个失败会继续运行剩余的用例。如果在debug时想要一个用例失败既停止,可使用-x选项:pytest -x    

             

             以上因为失败的是最后一个文件看不出效果,添加了一个test_failed.py文件并运行,可以看出只运行了一个文件。

              

7. --maxfail=num. -x是只要碰到一次失败就停止。而maxfail可以设置失败num次后停止:pytest --maxfail=2

             

             

8. --lf(--last-failed),只运行最后一次失败的用例。

             

 

9. --ff(--failed-first), 先跑运行失败的用例。

           

 

10. -v(--verbose) 查看详情        

           

 

11. -q(--quiet),与-v相反,简化输出信息。通常与--tb=line(仅打印异常的代码位置)搭配使用

            

            

 

12. -l(--showlocals)  ,由于失败用例被堆栈追中,局部变量及其值都会显示出来。

            

 

13. --tb=stype,失败时显示的失败信息。 --tb = short(仅显示assert的一行及系统判断内容)/line(只使用一行显示所有错误信息)/no(屏蔽所有回溯信息)

           

           

           

 

14. --duration=N , 显示用例中最慢的N个阶段,耗时越长显示在越前面。

          

          --duration = 0,则会将所有阶段耗时从长到短排序后显示。

          

15. --version,查看当前pytest版本。

         

 

16. -h(--help), 查看原生pytest的用法,展示新添加的插件的选项及用法。

 

以上内容为【pytest测试实践】的读书笔记,用于日后复习与巩固。

posted @ 2019-06-05 15:59  机灵小不懂  阅读(581)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3