WEB自动化实战提高篇

66 阅读2分钟

0 上节回顾

  • 自动化测试的情况
  • Selenium测试环境的一键安装
  • 电商下单流程实战 暴露的问题:
  1. 流水账
  2. 使用sleep等待页面就绪
  3. 每次都需要重新登录

1 pytest框架

安装pytest

pip install pytest

使用pytest

def test_login_ok(): # 一个测试用例
pass
def test_login_fail():
pass

使用测试框架好处:

  • 管理用例
  • 准备用例(自动登录)

2 pytest 夹具

夹具:在测试用例前、后 自动的执行一些代码,来准备和销毁测试环境
比如说:

  • 测试下单流程,需要已登录的状态
  • 可用讲登录,作为前置,放在夹具
  • 测试之后,产生了很多垃圾数据
  • 将数据清理,作为后置,放在夹具

2.1 定义夹具

@pytest.fixture
def driver():
driver = get_webdriver()
driver.maximize_window()
driver.get("http://localhost:8000/")
return driver

2.2 使用夹具

def test_login_ok(driver)

重点1:前置和后置

@pytest.fixture
def driver():
driver = get_webdriver()
driver.maximize_window()
driver.get("http://localhost:8000/")
print("测试用例准备执行了") # 前置的部分
yield driver # 生成器的写法,返回值
print("测试用例执行结束了") # 后置的部分
driver.quit()

重点2:范围
pytest 夹具范围 5种:

  1. function :默认,夹具在单个用例结束后销毁
  2. class :夹具在类的最后一个用例结束后销毁
  3. module : 夹具在模块的最后一个用例结束后销毁
  4. package:夹具在包的最后一个用例结束后销毁
  5. session : 夹具在整个测试活动的最后一个用例结束后销毁

3 解决:用例需要登录

需要登录的用例:

  • test_order_ok
  • test_order_fail 如何进行自动登录:
  1. 每次执行用例之前,先进行一次登录流程
  2. 保持登录状态,不需要登录
  • 鉴权的原理和方式
  • 保持cookies状态

测试框架如何判断用例通过或者失败?
默认情况下:出现异常,认为失败,否则认为通过
特殊情况下:出现异常,认为通过,否则认为失败
特殊的特殊情况下:

  • 出现A异常,认为通过,
  • 否则认为i失败

4 POM

pytest解决用例层面的问题 页面(UI)层面的问题:

  • 字段多
  • 字段复杂(下拉联动)
  • 选填、必填
  • 弹出

定位复杂

Page Object Model :页面对象 设计模式

  • 使用对象 代表 页面
  • 使用对象的属性 代表 页面的元素
  • 使用对象的方法 代表 对页面的操作 细节进行封装:
  1. 定义BasePage
  2. 定义Page
  3. 定义元素交互 使用过程:
  4. 实例化PO
  5. 调用PO的方法,完成交互 深度挖掘 alert弹窗处理失败的问题
    Selenium处理Alert时出现UnexpectedAlertPresentException