po设计模式,pytest引入

po设计思想

1,什么是po

pageobject是一种涉及模式

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

分离测试步骤及测试对象

2,po的好处

提高代码复用率

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

代码可复用,降低成本,

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

po设计原则

1,总的原则

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

所有的po继承basepage

2,方法封装原则

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

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

扫描二维码关注公众号,回复: 11371214 查看本文章

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用例执行的前置后置处理更加高级

猜你喜欢

转载自www.cnblogs.com/addicated/p/13194370.html
今日推荐