2021-07-28

#pytest 框架实现一些前后置的处理,常用的三种方法

一,setup/teardown

setup /teardown 在每个用例前后都会执行

import pytest
class TestLogin:
    #在所有的用例之前只执行一次
    def setup_class(self):
        print('在每个类执行钱的初始化的工作:例如:创建日志对象,创建数据库的连接请求对象')
    #在每条用例之前都执行一次
    def setup(self):
        print('打开浏览器')
    @pytest.mark.run(order=1)
    def test_01_mingtian(self):
        print('明天')
    @pytest.mark.run(order=3)
    def test_01_jintian(self):
        print('晴天')
    @pytest.mark.skip
    @pytest.mark.run(order=2)
    def test_01_zuotian(self):
        print('昨天')
    def teardown(self):
        print('\n关闭浏览器')
    def teardown_class(self):
        print('\n 在每个类执行后的扫尾工作:例如:销毁日志对象,销毁数据库的连接')
if __name__ == '__main__':
    pytest.main(['test_case.py','-s'])

使用@pytest.fixture() 装饰器来实现***部分***用例的前后置

pytest.fixture(scope,params,autouse,ids,name)
  1. scope 表示的是被pytest.fixture 标记的方法的作用域。function(默认),class,module,package/session
class TestOffice:
    #autouse 默认为False,如果为True,就表示默认调用了前后置方法
    @pytest.fixture(scope='class',autouse='True',)
    def my_fixture(self):
        print('\n这是一个前置方法')
        yield
        print('\n这个是一个后置方法')
    def test_01_jintian(self):
        print('\n今天')
    def test_02_mingtian(self,my_fixture):
        print('\n明天')
if __name__ == '__main__':
    pytest.main(['test_office.py','-s'])

  1. params :参数化(支持,[],(),[{},{}],({},{}))
import pytest
class TestOffice:
    #autouse 默认为False,如果为True,就表示默认调用了前后置方法
    @pytest.fixture(scope='function',params=['王一一','王一二'])
    def my_fixture(self,request):    #request :用于传参
        print('前置')
        yield request.param
        print('后置')
    def test_01_jintian(self):
        print('\n今天')
    def test_02_mingtian(self,my_fixture):
        print('\n明天')
        print('----'+str(my_fixture))
if __name__ == '__main__':
    pytest.main(['test_office.py','-s'])

params=[[‘王一一’,‘王一二’]] 这里的params是参数名,是有s
request.param 这里是属性名,不带s

预期结果

test_office.py::TestOffice::test_01_jintian 
今天
PASSED
test_office.py::TestOffice::test_02_mingtian[\u738b\u4e00\u4e00] 前置

明天
----王一一
PASSED后置

test_office.py::TestOffice::test_02_mingtian[\u738b\u4e00\u4e8c] 前置

明天
----王一二
PASSED后置
  1. autouse=True: 自动使用,默认False
  2. ids: 当使用params 参数化时,给每一个值设置一个变量名,意义不大
  3. name:给被@pytest.fixture 标记的方法取一个别名,当去了别名后,原来的名称不能使用

三,通过conftest.py 和pytest.fixture()结合使用实现***全局***的前置应用(比如:项目的全局登陆,模块的全局处理)

1,conftest.py 文件时单独存放的一个夹具配置文件,名称不能更改
2, 用处可以在不同的py文件中使用同一个fixture函数
3,原则上conftest.py 需要和运行的用例放再同一层,并且不需要做任何import 操作。

总结:
setup/teardown, setup_class/teardown_class 作用于所有用例或者所有的类
@pytest.fixtrue(), 它的作用时既可以部分,也可以全部前后置
conftest.py 和@pytest.fixtrue()结合使用,作用域全局的前后置

四.断言

assert 1==2

五 . pytest 结合allure-pytest 插件生成allure测试报告

pytest-html
allure-pytest

  1. 生成json格式的临时报告

    --alluredir ./temp
    
  2. 生成allure报告

    	 os.system('allure generate ./temp -o ./report --clean')
    	 allure generate   命令,固定的
    	 ./temp                 临时的json 格式报告的路径
    	  -o                       输出output
    	  ./report              生成allure 报告的路径
    	  --clean               清空./report 路径原来的报告
    
上一篇:04-pytest fixture 用法


下一篇:pytest之fixture函数的应用