【pytest】2.pytest的前置、后置

pytest框架的前后置(固件,夹具)处理,三种方法:

一、setup/teardown,setup_class/teardown_class(全部)

class TestLogin:
    
    def setup_class(self):
        print("每个类之前执行的的操作,比如创建日志对象、创建数据库连接、创建接口的请求对象")

    def setup(self):
        print("每个用例前执行的操作,比如打开浏览器、加载网页")
        
    def teardown(self):
        print("每个用例后执行的操作,比如关闭浏览器")     
        
    def teardown_class(self):
        print("每个类之后执行的操作,比如销毁日志对象、销毁数据库连接、销毁接口的请求对象")
   
    @pytest.mark.skip("跳过原因:本轮不执行")
    def test_login_001(self):
        print("用例001")

    @pytest.mark.run(order=1)
    def test_login_002(self):
        print("用例002")

       #注意:全部时小写

二、使用@fixture()装饰器来实现部分用例的前后置

@pytest.fixture(scope="", params="", autouse="", ids="", name="")

scope表示的是@pytest.fixtur标记方法的作用域,function(默认),class,module,package/session
params:参数化 ,支持列表[],元组(),字典列表[{},{},{}],字典元组({}.{},{})
autouse=True:自动执行,默认为False,不会自动执行,需要手动调用
ids:当使用params参数化时,给每一个值设置一个变量名,意义不大
name:给被@pytest.fixtur标记的方法取一个别名

1.scope和autose参数

@pytest.fixture(scope='class', autouse=True)  
def my_fixture_class():
    print("类前置")
    yield  #yield相当于teardown,下面写teardown的操作
    print("类后置")
#scope='class'时,标记的方法my_fixture_class()等价于 setup_class/teardown_class                             

@pytest.fixture()
def my_fixture_function():
    print("用例前置")
    yield
    print("用例后置")
#scope='function'或没有scope时(因为scope默认为function),标记的方法my_fixture_function()等价于setup/teardown

class TestApiinner:

    def test_inner_api_001(self):
        print("api用例001")

    def test_inner_api_002(self, my_fixture_function):
    # autouse默认为False,不会自动执行,可以在用例中调用@pytest.fixture()标记的方法来执行夹具,传入的是方法对象,不能带括号。
        print("api用例002")

    def test_inner_api_003(self):
        print("api用例003")


class TestApiForOut:

    def test_for_out_api_001(self):
        print("api用例001")

    def test_for_out_api_002(self):
        print("api用例002")

    def test_for_out_api_003(self):
        print("api用例003")


if __name__ == '__main__':
    pytest.main()

可以用多个@pytest.fixture()分别标记多个方法,来实现和setup/teardown,setup_class/teardown_class相同的效果

2.params、ids、name

@pytest.fixture(params=['盖伦', '寒冰', '剑圣'],ids=['gl','hb','js'])
'''
如果使用name参数,如@pytest.fixture(params=['盖伦', '寒冰', '剑圣'],ids=['gl','hb','js'], name='aaa'),
则定义的方法名my_fixture_function将不能再使用,后面的调用都必须使用别名aaa
'''
def my_fixture_function(request):
    print("用例前置")
    yield request.param #return和yiled都是表示返回的意思,但是return后面不能有代码,yiled返回可以接代码
    print("用例后置")
    
class TestApiinner:

    def test_inner_api_001(self, my_fixture_function):
        print(str(my_fixture_function)+"执行了内部api用例001")

    def test_inner_api_002(self):
        print("内部api用例002")

三、通过conftest.py和@pytest.fixture()结合使用,实现全局的前置应用

  • conftest.py文件时单独存放的一个夹具配置文件,名称不能修改
  • 用处:在不同的py文件中使用同一个fixture函数
  • conftest.py需要和运行的用例放到同一层,不需要用import导入操作
    在这里插入图片描述

all_fixture()定义在testcase目录下 ,可供全局的用例使用
api_fixture()定义在test_api目录下,仅可在当前目录内使用
all_fixture()和api_fixture()可以同时使用,会按照先后顺序执行

 - class TestApiForOut:

    def test_for_out_api_001(self, all_fixture, api_fixture):
        print("\n对外api用例001")

    def test_for_out_api_002(self, api_fixture):
        print("\n对外api用例002")

    def test_for_out_api_003(self, all_fixture):
        print("\n对外api用例003")

四、断言

assert

五、pytest结合allure-pytest生成allure测试报告

入门阶段学习的测试报告插件:pytest-html
进阶阶段学习的测试报告插件:allure-pytest

1、下载、解压、配置path路径

下载地址:allure下载
allure的path路径:将allure的bin目录添加至环境变量path
验证:allure --version

Q&A:
1、dos可以验证,但是在pycharm验证失败? --重启pycharm
2、未安装jdk的同学需要下载安装jdk,jdk下载

2、加入命令生成json格式的临时报告

在pytest中增加参数 --alluredir ./临时文件目录
如:addopts = -vs --alluredir ./tmp

3、生成allure报告

if __name__ == '__main__':
    pytest.main()
    os.system('allure generate ./tmp -o ./report --clean')

allure generate 命令,生成报告
./tmp 临时的json格式报告路径
-o 输出 output
./report 生成的allure报告路径
–clean 清空这个目录下原来的报告

4、allure报告的定制

  1. 替换allure报告的logo

Q&A

1.创建虚拟环境项目时,虚拟环境本地Terminal:此系统禁止脚本运行,导致安装的插件未在虚拟环境安装成功以及后续一系列神奇的问题:主函数运行失败,命令行可以运行成功;主函数运行结果和命令行运行结果不一样。
处理方法:用管理员身份运行 PowerShell,然后输入set-executionpolicy remotesigned,再输入y确认即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值