web自动化中的page object模式
1|0一. 原理
将页面的元素定位和元素行为封装成一个page类,实现页面对象和测试用例分离
类的属性:元素定位
类的行为:元素的操作
测试用例:调用所需页面对象中的行为,组成测试用例
2|0二. 好处
1. 当某个页面的元素发生变化,只需要修改该页面对象中的代码即可,测试用例不需要修改
2. 提高代码重用率,结构清晰,维护代码更容易
3. 测试用例发生变化时,不需要或者只需要修改少数页面对象代码即可
3|0三. 分析
4|0四. 优化—pytest
4|1pytest:基于unittest之上的单元测试框架
1. 自动发现测试模块和测试方法
2. 断言使用assert + 表达式即可
3. 可以设置会话级、模块级、类级、函数级的fixtures
4. 有丰富的插件库,目前在300个以上
4|2安装命令
pip install pytest
4|3安装html报告的插件
pip install pytest-html
4|4pytest插件地址
http://plugincompat.herokuapp.com/
4|5pytest—mark
对测试用例打标签,在运行测试用例的时候,可根据标签名来过滤要运行的用例
使用方法:
在测试用例/测试类前面加上:@pytest.mark.标记名
示例:
@pytest.mark.smoke
4|6pytest—收集测试用例
pytest收集测试用例的规则:
1. 默认从当前目录中搜集测试用例,即在哪个目录下运行pytest命令,则从哪个目录当中搜索
2. 搜索规则:
1) 符合命令规则test_*.py 或者 *_test.py 的文件
2) 以test_开头的函数名
3) 以Test开头的测试类 (没有__init__函数) 当中,以test_开头的函数
4|7pytest—用例运行方式
指定测试模块:pytest test_mod.py
指定测试目录:pytest testing/
通过关键字表达式过滤执行:
pytest -k *MyClass and not method*
这条命令会匹配文件名、类名、方法名匹配表达式的用例
通过节点id来运行测试:
节点id的组成: py模块名::类名::函数名 或者 py模块名::函数名
示例:pytest test_xxx.py::TestXXX::func_XXX
通过标记表达式执行
pytest -m smoke
这条命令会执行被装饰器 @pytest.mark.smoke 装饰的所有测试用例
获取用例执行性能数据
5|0五. 优化—pytest—html
需要安装pytest-html插件
pytest可以生成多种样式的结果:
1. 生成JunitXML格式的测试报告: --junitxml=path
2. 生成result log格式的测试报告: --resultlog=report\log.txt
3. 生成Html格式的测试报告: --html=report\test_one_func.html
5|1只运行打了smoke标记的测试用例
5|2运行全部的测试用例
6|0六. pytest—定义fixture
fixture:即测试用例执行的环境准备和清理,在unittest中即指setup()、teardown()
fixture主要的目的:是为了提供一种可靠和可重复的手段去运行那些最基本的测试内容。比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步也是冗余
定义fixture:
把一个函数定义为fixture很简单,在函数声明之前加上@pytest.fixture,表示此函数为测试环境数据的准备和清理
那么,在一个fixture内部如何区分环境准备、环境清理呢?
在函数内使用yield关键字
yield关键字以后的代码,就是环境清理的代码,即在测试用例执行完成之后会执行的代码
fixture返回值
fixture定义之后的使用
7|0七. pytest—调用fixture
调用fixture的三种方式:
7|11. 在测试用例中直接调用它:
将fixtures的函数名字作为测试用例的参数
如果fixture有返回值,那么测试用例中的fixture函数名字就接收返回值
示例:
def test_tttt(self, myfixture): #fixture函数名字作为参数传入
myfixture.find_element_by_xpath("XXX") #函数名代表了fixture的返回值,即driver
7|22. 用fixture装饰器调用fixture
在测试用例/测试类前面加上@pytest.mark.usefixtures("fixture函数名字")
ps:定义conftest.py文件,在此文件中可定义多个fixture,pytest会自动搜索此文件
7|33. 用autos调用fixture
当定义fixture时,有一个参数是autouse,默认设置为False
当默认为False,就可以选择用上面两中方式来试用fixture
当设置为True时,在一个session内所有的test都会自动调用这个fixture
权限大,责任也大,所以用该功能时也要谨慎小心
8|0八. pytest—conftest.py
定义公共的fixture,多个测试类中都可以调用
pytest提供了conftest.py文件,可以将fixture定义在此文件中
运行测试用例时,不需要去导入这个文件,会自动去查找conftest.py文件,然后去找到对应的fixture
9|0九. pytest—定义fixture
fixture的参数中,有scope作用域
function:每个test都运行,默认是function的scope,即unittest中的setUp和tearDown
class:每个class的所有test只运行一次。即unittest中的setUpClass和tearDownClass
module:每个module的所有test只运行一次
session:每个session只运行一次(如连接数据库操作)
fixture中设置返回值
有的时候,我们在测试环境初始化时,会对资源进行处理后,在测试用例中要使用这个资源
yield 返回值
示例:
@pytest.fixture #默认scope为function
def myfixture():
driver = webdriver.Chrome()
yield driver #将driver作为返回值,在测试用例中需要使用driver
driver.close() #测试用例执行完成之后,要执行的清理操作
driver.quit() #测试用例执行完成之后,要执行的清理操作
__EOF__

本文链接:https://www.cnblogs.com/my_captain/p/9270830.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?