zoukankan      html  css  js  c++  java
  • pytest框架之fixtrue详细使用。

    1.fixture配合yield使用:appium自动化多终端测试经常会用到

    import pytest
    @pytest.fixture(params=[1,2,3])#params传可迭代对象,就会将所有的参数都进行迭代。
    def add(request):
        i = request.param #获取传进来的的参数,就是迭代对象的参数
        print(f'我是第{i}次的开始执行')
        yield i #相当于return yield i 就是返回i,但是yield前面的代码是调用方法执行前先执行,yield后面的代码是,调用方法执行完成后在进行执行
        print(f'我是第{i}次的最后执行')
    
    def test_add(add):
        print(f'我是第{add}次测试方法')
    if __name__ == '__main__':
        pytest.main(['test001.py','-s'])

    运行结果如下:

     多参形式:

    import pytest
    @pytest.fixture(params=[('a',1),('b','2'),('c',3)])#params传可迭代对象,就会将所有的参数都进行迭代。
    def add(request):
        name=request.param[0]
        i = request.param[1] #获取传进来的的参数,就是迭代对象的参数
        print(f'我是{name}第{i}次的开始执行')
        yield i #相当于return yield i 就是返回i,但是yield前面的代码是调用方法执行前先执行,yield后面的代码是,调用方法执行完成后在进行执行
        print(f'我是{name}第{i}次的最后执行')
    
    def test_add(add):
        print(f'我是第{add}次测试方法')
    if __name__ == '__main__':
        pytest.main(['test001.py','-s'])

    2。fixtrue结合pytest.mark.parametrize传递参数其实@pytest.mark.parametrize('add_one',data,indirect=True)就相当于@pytest.fixture(params=data)一样

    两种传参形式。上面还有这一种都是为了给fixtrue修饰的函数传递参数。

    @pytest.fixture()
    def  add_one(request):
        return request.param[0]+request.param[1]
    
    data=[(1,2),(2,3),(3,4)]
    @pytest.mark.parametrize('add_one',data,indirect=True)
    def test_add_one(add_one):
        print(f'我的结果是{add_one}')
    
    
    if __name__ == '__main__':
        pytest.main(['test001.py','-s'])

     3.fixtrue不需要传参,测试方法调用

    @pytest.fixture()
    def add_two():
        lis=[]
        for i in range(3):
            lis.append(i)
            print(f'我是{i}')
        return lis
    def test_add_two(add_two):
        print(add_two)
        print('我是测试方法')
    
    
    if __name__ == '__main__':
        pytest.main(['test001.py','-s'])

     4.多个fixture互相使用

      4.1不需要传递参数形式

    #多个fixture与fixture相互调用
    @pytest.fixture()
    def first():
        print("获取用户名")
        a = "yoyo"
        return a
    
    @pytest.fixture()
    def sencond(first):
        '''psw调用user fixture'''
        a = first
        print(a)
        b = "123456"
        return (a, b)
    
    def test_1(sencond):
        '''用例传fixture'''
        print("测试账号:%s, 密码:%s" % (sencond[0], sencond[1]))
    
        assert sencond[0] == "yoyo"
    if __name__ == '__main__':
    pytest.main(['test_fixtrue.py'])
     

       4.2需要传递参数的形式

    @pytest.fixture()
    def A(request):
        param = request.param
        print(param)
        return param['username']
    @pytest.fixture()
    def B(A):
        new_name = A+'新的'
        return new_name
    data = [{'username':'zxb','pwd':234}]
    @pytest.mark.parametrize('A',data,indirect=True)
    def test_AB(B):
        print(f'我得到的新名称是{B}')
    
    
    if __name__ == '__main__':
        pytest.main(['test_fixtrue.py'])

  • 相关阅读:
    java资料
    tomcat内存配置
    mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译
    Sturts2的国际化处理
    web.xml中如何设置配置文件的加载路径
    varchar和varchar2的区别
    IDEA 常见文件类型的图标介绍
    IDEA文件编码修改
    Debug 介绍
    IntelliJ IDEA 显示行号方法
  • 原文地址:https://www.cnblogs.com/zhuxibo/p/14257211.html
Copyright © 2011-2022 走看看