0 上节回顾
- 引入pytest
- 利用fixture
- POM封装 使用PO来编写测试用例:
- 定义夹具,夹具中使用PO
- 编写用例,用例中使用PO 为什么会超时:因为没有定位到
1 复杂元素的定位和调试
定位失败,是UI自动化最大的坑 按照以下几个步骤进行排查:
- 定位表达式写对了吗?
- 元素出现了吗?
- 元素是否在iframe中?
元素在iframe中,就会看到到,但是定位失败 怎么解决?
定位iframe + 切换iframe
- iframe
- 下来选择框
- 动态变化的元素
2 参数化测试
2.1 什么是参数化测试
对于相似的测试用例,可以使用参数化的方式,实现测试代码重用
如果已有测试用例,可以通过参数化快速增加用例,提高测试覆盖率
2.2 实现参数化测试
import pytest
def test_a():
print("这是一个用例")
@pytest.mark.parametrize(
"i", # 参数名
range(5), # 参数值
)
def test_b(i):
print(f"这是{i}个用例")
2.3 实战:测试必填字段
- 准备测试数据
- 为用例添加装饰器
@pytest.mark.parametrize("name,tel,sheng,shi,qu,address,msg", test_data)
def test_new_address(user_driver, name, tel, sheng, shi, qu, address, msg):
page = AddressPage(user_driver)
page.input_adders(name, tel, sheng, shi, qu, address)
assert msg == page.get_msg()
3 测试报告
3.1 生成网页测试报告
allure:
- 生成测试结果
- 生成测试报告 安装pytest插件
pip install allure-pytest
启用pytest插件
import os
import pytest
if __name__ == "__main__":
pytest.main(["--alluredir=./.allure_results"]) # 启用插件
os.system("allure serve ./.allure_results") # 生成HTML报告
3.2 页面截图
截图:selenium
展示截图: allure
什么地方应该截图?
- PO实例化之后
- 元素定位之前
- 除了弹窗之外其他页面交互
3.3 日志的封装
- 配置日志
- 启用配置
- 添加日志
- 每个文件中,创建logger
logger = logging.getLogger(__name__)- 使用logger记录内容
3.4 测试框架
pytest+ POM ,前提:封装Page 大型项目来说,Page多,工作量多起来来了
各个页面,各有各的不同 但是用户的操作 总是相似的
用户的操作:
- 鼠标、键盘
大大的减少代码定义量
再配合excel,测试用例甚至不需要写代码了
关键字驱动框架的运行流程:
- excel列出用户的动作 (关键字)
- 框架 读取并执行 关键字
- 加载其他插件,实现并行测试、失败重试、生成报告等等