赞
踩
2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)【持续更新最新版】-CSDN博客
关键技术:
非关键技术:
实现功能:
headless/headful
模式一个自动化具备的基本功能差不多就这些了。其实主要是使用了一堆框架和插件,主要是整合能力。
$ pip install -r requirements.txt
注:安装requirements.txt
指定依赖库的版本,这是经过测试的,有时候新的版本可会有错。
在 config.py
文件配置
- class RunConfig:
- """
- 运行测试配置
- """
- # 运行测试用例的目录或文件
- cases_path = "./test_dir/test_parametrize.py"
-
- # 配置浏览器驱动类型(chromium, firefox, webkit)。
- browser = "chromium"
-
- # 运行模式(headless, headful)
- mode = "headful"
-
- # 配置运行的 URL
- url = "https://www.baidu.com"
-
- # 失败重跑次数
- rerun = "0"
-
- # 当达到最大失败数,停止执行
- max_fail = "5"
运行测试
$ python run.py
page object是自动化测试最常用的设计模式。
但 playwright 中的只提供了操作方法,元素定位
和测试数据
都只是参数。
- # 输入
- page.type('#kw', "playwright")
- # 点击
- page.click('#su')
我们依然,可以将元素定位单独封装一层。
- class BaiduElem:
- search_input = "#kw" # 搜索框
- search_button = "#su" # 搜索按钮
- settings = "#s-usersetting-top" # 设置
- search_setting = "#s-user-setting-menu > div > a.setpref" # 搜索设置
- save_setting = 'text="保存设置"' # 保存设置
在测试用例中的使用
- from element.baidu_element import BaiduElem
- from playwright.sync_api import Page
-
-
- def test_baidu_search(page: Page, base_url):
- """
- """
- page.goto(base_url)
- page.type(BaiduElem.search_input, text="playwright")
- page.click(BaiduElem.search_button)
- sleep(2)
- assert page.title() == "playwright_百度搜索"
这肯定不是什么好的设计。用例层写起来会比较啰嗦, 最好可以page.elem.type("playwright")
的语法实现,这就需要在playwright的基础上再封装一套API, 看playwright 源码还是有些复杂的,主要是用了很多就异步,成本比较大,暂时先这么用。
自动截图需要 pytest/pytest-html 和 playwright 配合完成, pytest/pytest-html 判断用例实现,并把图片插入到报告中。 playwright 实现截图动作。
- @pytest.mark.hookwrapper
- def pytest_runtest_makereport(item):
- """
- 用于向测试用例中添加用例的开始时间、内部注释,和失败截图等.
- :param item:
- """
- pytest_html = item.config.pluginmanager.getplugin('html')
- outcome = yield
- report = outcome.get_result()
- report.description = description_html(item.function.__doc__)
- extra = getattr(report, 'extra', [])
- page = item.funcargs["page"]
- if report.when == 'call':
- xfail = hasattr(report, 'wasxfail')
- if (report.skipped and xfail) or (report.failed and not xfail):
- case_path = report.nodeid.replace("::", "_") + ".png"
- if "[" in case_path:
- case_name = case_path.split("-")[0] + "].png"
- else:
- case_name = case_path
-
- capture_screenshots(case_name, page)
- img_path = "image/" + case_name.split("/")[-1]
- if img_path:
- html = '<div><img src="%s" alt="screenshot" style="width:304px;height:228px;" ' \
- 'onclick="window.open(this.src)" align="right"/></div>' % img_path
- extra.append(pytest_html.extras.html(html))
- report.extra = extra
-
- def capture_screenshots(case_name, page):
- """
- 配置用例失败截图路径
- :param case_name: 用例名
- :return:
- """
- global driver
- file_name = case_name.split("/")[-1]
- if RunConfig.NEW_REPORT is None:
- raise NameError('没有初始化测试报告目录')
- else:
- image_dir = os.path.join(RunConfig.NEW_REPORT, "image", file_name)
- page.screenshot(path=image_dir)
通过page = item.funcargs["page"]
拿到playwright的驱动,截图判断逻辑有点复杂,不过我已经实现了。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。