zoukankan      html  css  js  c++  java
  • Pytest 2

     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测试实践】的读书笔记,用于日后复习与巩固。

  • 相关阅读:
    第六周学习心得
    syncnavigator关于win10、win8系统无法注册机进行激活的问题
    使用SyncNavigator轻松实现数据库异地同步、断点续传、异构同步
    数据库同步的正确打开方式
    使用SyncNavigator实现数据库异地同步。
    聊聊MySQL主从数据库同步的那些事儿
    高并发架构系列:数据库主从同步的3种一致性方案实现,及优劣比较
    MySQL binlog数据库同步技术总结
    数据库同步的两种方式
    某省肿瘤医院 — 数据备份 + 数据库同步
  • 原文地址:https://www.cnblogs.com/keepSmile/p/10979633.html
Copyright © 2011-2022 走看看