码迷,mamicode.com
首页 > 其他好文 > 详细

po设计模式,pytest引入

时间:2020-06-26 12:25:00      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:集中   --   扩展   获取   内容   txt   接收   信息   pre   

po设计思想

1,什么是po

pageobject是一种涉及模式

减少冗余的代码和对代码进行管理

分离测试步骤及测试对象

2,po的好处

提高代码复用率

集中管理定位信息,提高可维护行,

代码可复用,降低成本,

不同po之间没有交叉,可团队并行开发

po设计原则

1,总的原则

封装basepage,提取出来各个page中的公共方法

所有的po继承basepage

2,方法封装原则

共有的方法,点击,输入内容,获取元素节点内容,等待

滑动页面,执行js代码等等

3,定位封装原则

将每个po类的定位xpath分类做为类属性进行封装,命名风格统一,做到见名知意

pytest引入

pytest标记

@pytest.mark.skip 在用例方法上使用,即可跳过用例的执行

@pytest.mark.xfail 标记预期不会通过的用例

自定义

1,注册标记:在启动文件同级目录下创建一个 pytest.ini的配置文件

2,在pytest.ini添加一个 pytest配置块

3,在pytest的配置块下面加一个mjarkers的配置项

4,在markers的配置项中去注册标记

5,给对应的用例打标记,

@pytest.mark.注册的标记名称

[pytest]
markers =
    addicated
    yuze
    class_
  • 给类打标记
    1,直接在类上面打
    2,通过类属性的pytestmark
class TestDome1:
    pytestmark = [pytest.mark.class_, pytest.mark.musen]

    def test_demo1_01(self):
        assert 1 == 100

    def test_demo1_02(self):
        assert 100 == 100

断言

assert断言, 根据assert后面的表达式的结果是True还是False来决定是否断言通过

原生的测试报告

pip install pytest-html

 

第一种 log 普通文本  TextTestRunner

 

--resultlog=report/demo.txt  相对路径

第二种 xml,生成xml文件

--junitxml=report/demo.xml   jenkins使用
html和xml 标记性语言

第三种 html HTMLTestRunner

--html=report/demo.html

 

用例编写

pytest编写用例,不使用ddt,因为不兼容,

pytest中使用pytest.mark.parameterize来实现数据驱动,给用例传参

注意点

要么按照unittest的规则来写,数据驱动,前后置都用unittest中的

要么按照pytest来写,数据驱动,前后置都是pytest中的

回顾一下unittest中的ddt

# --------------------unittest中的数据驱动实现--------------------------
@ddt.ddt
class TestClass(unittest.TestCase):

    def setUp(self):
        print("--用例的前置条件--")

    @ddt.data(11, 22, 333, 444, 55)
    def test_01(self, case):
        assert case < 100

    def tearDown(self):
        print("--用例执行的后置条件--")

pytest的数据驱动实现

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

pytest的前后置方法

用例级别

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

用例类级别

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

用例模块级别

@pytest.fixture(scope=‘module‘, autouse=True)
def module_fixture():
    # 前置条件
    print("-------模块-----执行的前置条件--------------------")
    yield
    # 后置条件
    print("-------模块-----执行的后置条件--------------------")

会话级别

@pytest.fixture(scope=‘session‘, autouse=True)
def session_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")

使用一变量接收来自前置执行的结果,前置将需要返回给用例的内容卸载yield后,就可以直接接收,

注意:实例中注释掉的方法只限于 不需要将前置中的数据传给用例的情况下才适用。

pytest与unittest之间的对比

1,pytest兼容unittest,使用unittest写的用例,可以通过pytest去执行

2,pytest写用例更简单

3,加载用例更智能

4,pytest可以对用例进行分类管理,执行用例更加的灵活

5,unittest是python中的官方库,兼容性更好,更稳定,pytest在安装的时候可能会出现同python版本的兼容问题

6,pytest支持的插件分厂丰富,功能扩展性强

7,pytest用例执行的前置后置处理更加高级

po设计模式,pytest引入

标签:集中   --   扩展   获取   内容   txt   接收   信息   pre   

原文地址:https://www.cnblogs.com/addicated/p/13194370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!