pytest高级用法

1、自定义marks

测试场景:

  1. 在大厂里面,一个系统的测试用例好几千个,每次发版都执行来不及
  2. 通过关键字来运行测试用例,pytest -k,    缺陷明显:无法多重打标,难于维护
  3. 通过标签来运行测试用例,既可以作用于函数又可以作用于类

# pytest.init

[pytest]

markers = 

webtest:   Run the webtest case

hello:    Run the hello case

P0:   Run P0 case

P1:  Run P1 case

 

2、fixtures

fixtures的定义:为了测试用例的执行,而初始化一些数据和方法

  1. 类似于unittest里面的setUp和tearDown
  2. pytest fixtures调用起来 比unittest里面的setUp和tearDown方便
  3. 支持不同级别的fixtures (session,class,function)  
  4. 调用更加灵活,支持直接函数名调用,decorator调用,autouse

 

3、fixtures的三种调用方法

  • 直接通过函数名字调用
  • 使用usefixtures    decorator
  • 使用autouse

  import pytest

  @pytest.fixture()

  def loginandlogout()

    print("/ndo login action \n") 

    yield     ##(测试失败的时候截屏)

    print("do logout action \n")

  class TestSample:

    @pytest.mark.usefixtures('loginandlogout')  ###注意写法

    def test_answer(self.loginandlogout)

      print("I am test answer .....\n")

      assert 1+9==10

    

    @pytest.mark.usefixtures('loginandlogout') 

    def test_answer2(self.loginandlogout)

      print("I am test answer2 .....\n")

      assert 1+10==11

——————————————————————————————————————————————————————————————

第二种方法:

  import pytest

  @pytest.fixture(scope='module',autouse=True)

  def loginandlogout()

    print("/ndo login action \n") 

    yield     ##(测试失败的时候截屏)

    print("do logout action \n")

  

  @pytest.fixture(scope='module',autouse=True)

  def clickhome()

    print("click  home button \n") 

    yield     ##(测试失败的时候截屏)

    print("end home link \n")

  

  class TestSample:

    def test_answer(self.loginandlogout)

      print("I am test answer .....\n")

      assert 1+9==10

    

    def test_answer2(self.loginandlogout)

      print("I am test answer2 .....\n")

 

 

pytest 高级用法conftest.py

conftest.py文件中定义共享的fixture

conftest.py一般放在testcase的目录下面,每个目录下也存在着conftest.py

如果子目录下有conftest.py,子目录下的conftest.py中的fixture优先

      assert 1+10==11

posted on 2020-05-06 11:11  菲菲菲非常可爱的小白兔  阅读(555)  评论(0编辑  收藏  举报