0 上节回顾
- 自动化测试的情况
- Selenium测试环境的一键安装
- 电商下单流程实战 暴露的问题:
- 流水账
- 使用sleep等待页面就绪
- 每次都需要重新登录
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种:
- function :默认,夹具在单个用例结束后销毁
- class :夹具在类的最后一个用例结束后销毁
- module : 夹具在模块的最后一个用例结束后销毁
- package:夹具在包的最后一个用例结束后销毁
- session : 夹具在整个测试活动的最后一个用例结束后销毁
3 解决:用例需要登录
需要登录的用例:
- test_order_ok
- test_order_fail 如何进行自动登录:
- 每次执行用例之前,先进行一次登录流程
- 保持登录状态,不需要登录
- 鉴权的原理和方式
- 保持cookies状态
测试框架如何判断用例通过或者失败?
默认情况下:出现异常,认为失败,否则认为通过
特殊情况下:出现异常,认为通过,否则认为失败
特殊的特殊情况下:
- 出现A异常,认为通过,
- 否则认为i失败
4 POM
pytest解决用例层面的问题 页面(UI)层面的问题:
- 字段多
- 字段复杂(下拉联动)
- 选填、必填
- 弹出
定位复杂
Page Object Model :页面对象 设计模式
- 使用对象 代表 页面
- 使用对象的属性 代表 页面的元素
- 使用对象的方法 代表 对页面的操作 细节进行封装:
- 定义BasePage
- 定义Page
- 定义元素交互 使用过程:
- 实例化PO
- 调用PO的方法,完成交互
深度挖掘
alert弹窗处理失败的问题
Selenium处理Alert时出现UnexpectedAlertPresentException