当pytest遇上poium会擦出什么火花

当pytest遇上poium会擦出什么火花

首先,创建一个test_sample/test_demo.py 文件,写入下面三行代码。

def test_bing(page):page.get("https://www.bing.com")assert page.get_title == "必应"

不要问题 page 从哪里来,打开终端进入test_sample/目录,执行pytest 命令。

❯ pytest
================================================= test session starts =================================================
platform win32 -- Python 3.8.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
benchmark: 3.2.3 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: D:\github\test-circle\seldom\test_sample
plugins: allure-pytest-2.8.40, base-url-1.4.2, benchmark-3.2.3, html-3.1.1, metadata-1.11.0, rerunfailures-9.1.1, seldom-0.0.3
collected 1 itemtest_case.py
DevTools listening on ws://127.0.0.1:63137/devtools/browser/32d7e69d-69b5-4e0c-b0df-0e1d1d37af46
.                                                                                                   [100%]================================================== 1 passed in 4.75s ==================================================

是不是觉得做UI自动化超级简单,并好奇是怎么做到的,别急,我画个图帮你理解。

说明

  • poium: poium集成了selnium/appium并提供一套UI自动化测试的API。
  • pytest: 强大的自动化测试框架,背后有一个丰富的生态,使用pytest就可以使用他背后的各种插件。
  • seldom-pytest: 这是我开发的粘合剂,将poium和 pytest,以及pytest背后的插件粘合到一起。
  • UI 自动化项目: 站在seldom-pytest的基础上编写你的UI自动化项目。

seldom-pytest设计思想

如上图所示,在seldom-pytest中,核心只需要编写两类文件。

  • conftest.py: 这是pytest的配置文件,功能非常强大,你可以在里面写各种钩子函数。如前面的例子,page就是一个钩子函数。

  • test_xxx.py: 这是你的用例文件,你只需要引用各种钩子函数来完成用例即可。

seldom-pytest 实战

其实,seldom-pytest 并没有做什么事情,几乎也没有提供API,更多是的提倡一个设计思想。我们来举个例子说明哈。

  1. 创建一个test_sample/conftest.py 文件。
import pytest
from poium import Page, Elementclass BaiduPage(Page):search_input = Element(id_="kw", describe="搜索框")search_button = Element(id_="su", describe="搜索按钮")settings = Element(css="#s-usersetting-top", describe="设置")search_setting = Element(css="#s-user-setting-menu > div > a.setpref", describe="搜索设置")save_setting = Element(link_text="保存设置", describe="保存设置")@pytest.fixture(scope="module", autouse=True)
def baidu_page(page):return BaiduPage(page)
  • BaiduPage 类主要通过poium封装元素定位。

  • baidu_page 将BaiduPage类封装为一个钩子函数。

  1. 修改一个test_sample/test_demo.py 文件,代码如下:

def test_baidu_search(baidu_page, base_url):"""搜索"""baidu_page.get(base_url)baidu_page.search_input.send_keys("pytest")baidu_page.search_button.click()baidu_page.sleep(2)assert baidu_page.get_title == "pytest_百度搜索"

test_demo.py文件不需要导入任何模块。可以直接调用钩子函数baidu_page 、base_url 实现自动化测试用例。

  1. 如何运行用例,交给pytest 即可。
# 运行测试 (默认chrome)
> pytest# 指定不同的浏览器 (chrome/gc, firefox/ff, safari)
> pytest --browser chrome
> pytest --browser firefox
> pytest --browser safari# 指定base-url 
> pytest --base-url https://www.baidu.com# 生成测试报告
> pytest --html ./report.html

当然,你也可以创建一个run.py文件来使用pytest。

import pytestpytest.main(["--browser=firefox","--html=./report.html","--base-url=https://www.baidu.com"
])

只需要运行该文件即可。

> python run.py

关于conftest文件

  1. conftest.py 用来实现钩子函数的,我把xxPage类定义在里面有点奇怪,当然,你也可以单独封装一层,只在conftest.py实现xx_page钩子函数即可。

  2. 一个项目中每个目录下都可以有一个conftest.py文件。每个conftest.py文件作用于当前目录以及子目录。我们可以充分利用这个特点。

test_sample/
├── test_aa/
│   ├── conftest.py
│   ├── test_aa.py
├── test_bb/
│   ├── conftest.py
│   └── test_bb.py
└── test_cc/
│   ├── conftest.py
│   └── test_cc.py
├── conftest.py
├── pytest.ini
└── run.py

如果定义的xxPage类会被所有测试用例用到,那么就放到根目录;如果只会被某个测试用例用到,那么就放到和他平级的目录。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/424341.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

冷链温湿度监控解决方案,实时监测,助力运输安全

为了确保药品、生鲜等在冷链运输过程中的安全监管,需要对冷链、仓库等环节的温湿度信息进行实时自动检测和记录,有效防范储运过程中可能影响产品质量安全的各类风险,确保储存和运输过程的产品质量。 冷链温湿度监控系统解决方案,利用智能温湿…

【C++语言1】基本语法

前言 💓作者简介: 加油,旭杏,目前大二,正在学习C,数据结构等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏&#x1…

超优秀的三维模型轻量化、格式转换、可视化部署平台!

1、基于 HTML5 和 WebGL 技术,可在主流浏览器上进行快速浏览和调试,支持PC端和移动端 2、自主研发 AMRT 展示框架和9大核心技术,支持3D模型全网多端流畅展示与交互 3、提供格式转换、减面展UV、烘焙等多项单模型和倾斜摄影模型轻量化服务 4、…

削峰填谷与应用间解耦:分布式消息中间件在分布式环境下并发流量控制的应用

这是《百图解码支付系统设计与实现》专栏系列文章中的第(18)篇,也是流量控制系列的第(4)篇。点击上方关注,深入了解支付系统的方方面面。 本篇重点讲清楚分布式消息中间件的特点,常见消息中间件…

图神经网络X项目|基于图神经网络的电商行为的预测(5%)

文章目录 Jupyter Notebook 学习人工智能的好帮手数据集数据集下载数据集调用数据集应用技巧——获取不重复的编号数据集应用技巧——随机采样数据集应用技巧——抽取前N项进行模拟测试 数据集构建技巧一——查看数据集构建进度 Jupyter Notebook 学习人工智能的好帮手 【Jupy…

自动化测试总结

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 软件测试作为软件生命周期中不可缺少的组成部分,对提…

Final Cut Pro v10.7.1中文版 专业级视频剪辑软件 兼容M

Final Cut Pro 是 macOS平台上最好的视频剪辑软件,基于Cocoa编写,支持多路多核心处理器,支持GPU加速,支持后台渲染,可编辑从标清到4K的各种分辨率视频,ColorSync管理的色彩流水线则可保证全片色彩的一致性。…

【QT+QGIS跨平台编译】之六:【LZMA+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、lzma介绍二、文件下载三、文件分析四、pro文件五、编译实践一、lzma介绍 LZMA(Lempel-Ziv-Markov chain-Algorithm的缩写),是一个Deflate和LZ77算法改良和优化后的压缩算法。 libLzma是基于LZMA压缩算法封装的开源库。2001年被首次应用于7-Zip压缩工具中,是 …

架构篇09:架构设计原则案例

文章目录 淘宝案例手机QQ案例小结 我们先复习一下架构设计的三条核心原则:合适原则、简单原则和演化原则。 我们在架构设计实践中,应该时刻谨记这三条设计原则,指导我们设计出合适的架构,即使是代表中国互联网技术最顶尖水平的 BA…

【易经】-- 风水基础

目录 一、基础概念 1、五行 2、十天干 3、十二地支 4、八卦 4.1 伏羲八卦次序图 4.2 八卦对应自然界的基本事物 4.3 八卦及所代表的意像 ​编辑 5、生辰八字 5.1 定义 5.2 换算方法 5.3 举例 5.4 八字排盘示例 5.5 算法实现 二、举例 1、计算某年的生肖和年的属…

CSS之边框样式

让我为大家介绍一下边框样式吧!如果大家想更进一步了解边框的使用,可以阅读这一篇文章:CSS边框border 属性描述none没有边框,即忽略所有边框的宽度(默认值)solid边框为单实线dashed边框为虚线dotted边框为点线double边框为双实线 代码演示&…

医疗器械的条码二维码读取难点的应对措施

医疗器械作为医学应用的主要使用工具,对其追踪和管理尤为重要,条码二维码技术作为一种通用的数据捕捉工具,在医疗器械管理应用中发挥着关键作用,然而在实际工作中,医疗器械的条码二维码读取往往会遇到一些难点。本文由…