pytest框架用法

pytest  对比   unittest:

1、pytest 兼容 unittest,使用unittest写的用例,可以通过pytest去执行
2、pytest写用例更加简单
3、加载用例更加智能:
4、pytest可以对用例做分类管理,执行用例更加的灵活
5、unittest是python中的官方库,兼容性更好,更稳定,pytest在安装的时候,可能会出现和python版本的兼容问题。
6、pytest支持的插件非常丰富,功能扩展性强。
7、pytest用例执行的前置后置处理更加高级



pytest发现用例的规则

 注意:类一定要大写T开头!!


 

 

 跳过用例:@pytest.mark.skip

忽略失败的用例(会执行但不会标记失败):@pytest.mark.xfail(reason = “这里可以加入备注:已知的失败用例”)

给用例打自定义标记:

1、注册标记:在启动文件同级别目录下创建一个 pytest.ini的配置文件
2、在pytest.init 添加一个 pytest的配置块
3、在pytest的配置块下面加一个markers的配置项
4、在markers的配置项中去注册标记

5、给对应的用例打标记:@pytest.mark.注册的标记名称

 

 

给类打标记:

# 方式一:直接类上面打标记
@pytest.mark.webtest

# 方式二:通过类属性pytestmark
class TestClass(object):
pytestmark = [pytest.mark.webtest, pytest.mark.slowtest]

运行测试用例:

满足或、与操作,or、 and

pytest.main(["-m battery or white"])

 

 

pytest数据驱动

@pytest.mark.parametrize('case',[11,22,33,44,155])
def test_03(case):
    assert case < 100

-----------------------------------------------------------------------
error_case_data = [
    {'mobile': "", "pwd": "python1", "expected": "请输入手机号"},
    {'mobile': "1868472055a", "pwd": "python1", "expected": "请输入正确的手机号"},
    {'mobile': "18684720553", "pwd": "", "expected": "请输入密码"}
]


# 读取excel数据
@pytest.mark.parametrize('case', error_case_data)
def test_dome(case):
    print(case)
    print('--------------用例执行-------------')
    assert True

 

 

用例前置、后置

统一放到conftest.py文件中,和pytest的启动文件放同一目录下,不需要导入!

 

 

# 用例级别的前置后置条件
@pytest.fixture()
def case_fixture():
    # 前置条件
    print("------------用例执行的前置条件--------------------")
    yield
    # 后置条件
    print("------------用例执行的后置条件--------------------")

 

# 类级别的前置后置
@pytest.fixture(scope='class')
def class_fixture():
    # 前置条件
    print("-------用例类-----执行的前置条件--------------------")
    yield
    # 后置条件
    print("-------用例类-----执行的后置条件--------------------")

 

@pytest.fixture(scope='session', autouse=True)
def session_fixture():
    # 前置条件
    print("-------会话级别-----执行的前置条件--------------------")
    yield
    # 后置条件
    print("-------会话级别-----执行的后置条件--------------------")

 

# 模块级别的前置后置:
# autouse=True:前后置会自动执行,不需要手动添加到指定的类,或函数上去(一般用于模块或会话级别)
@pytest.fixture(scope='module', autouse=True)
def module_fixture():
    # 前置条件
    print("-------模块-----执行的前置条件--------------------")
    yield
    # 后置条件
    print("-------模块-----执行的后置条件--------------------")

 

用例使用:

@pytest.fixture()
def case_fixture():
    # 前置
    driver = webdriver.Chrome()
    expected = 200
    yield driver, expected
    # 后置
    driver.quit()


# @pytest.mark.usefixtures("case_fixture") 这个使用方法,只限于不需要将前置条件中的数据传给用例的情况下
class TestLogin02:
    """测试登录"""
    def test_login_pass(self, case_fixture):
        """正常登录的用例"""
        driver, expected = case_fixture
        driver.get("http://www.baidu.com")

 



 

pytest实现按顺序执行
https://www.cnblogs.com/se7enjean/p/13544105.html

 

 

 
posted @ 2020-05-24 22:28  mkay  阅读(202)  评论(0编辑  收藏  举报