Web 自动化框架封装
发表于|更新于|学习笔记
|总字数:1.1k|阅读时长:4分钟|浏览量:
为什么要进行框架封装
- 定位等待之类细枝末节的事情
UI
操作代码需要可重用- 对测试用例 分类、筛选、管理
POM 框架封装
pom
是 UI
自动化测试一种主流的设计模式
page object model 页面对象模式
将页面作为对象模型,来进行框架封装:
创建类:这个 类 代表 页面
定义属性:这些属性 代表 页面中的元素
1
2LazyElement() # 定位单个元素
LazyElementList() # 定位多个元素定义方法:这些个方法 代表 对页面的操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58import time
from webdriver_helper import get_webdriver
from webdriver_helper.pom import *
class IndexPage(BasePage):
"""首页"""
# 定位到搜索框
ipt_indexPage = LazyElement(By.XPATH, '//*[@id="key"]')
# 定位到搜索按钮
btn_searchPage = LazyElement(
By.XPATH, '//*[@id="search"]/div/div[2]/button')
def search(self, wd) -> 'SearchPage':
"""
搜索关键词
:param wd: 关键词,如:手机
:return: 搜索结果
"""
# 输入内容
self.ipt_indexPage.send_keys(wd)
# 点击 搜索结果
self.btn_searchPage.click()
return SearchPage(self.driver)
class SearchPage(BasePage):
"""搜索页面"""
# //*[@id="J_goodsList"]/ul/li[2]/div/div[4]/a/em
# //*[@id="J_goodsList"]/ul/li[3]/div/div[4]/a/em
# //*[@id="J_goodsList"]/ul/li[4]/div/div[4]/a/em
p_title_list = LazyElementList(
By.XPATH, '//*[@id="J_goodsList"]/ul') # 同时定位 N 个元素
def get_all_titles(self) -> list[str]:
l = []
for p in self.p_title_list:
l.append(p.text) # 将所有元素的文本,加入的列表
return l
if __name__ == '__main__':
driver = get_webdriver() # 默认使用Google chrome,如需要用 Firefox,在括号内加入
driver.get("https://www.jd.com/") # 被测页面
driver.maximize_window() # 窗口最大化
time.sleep(3) # 强制等待
index_page = IndexPage(driver) # 点击搜索框
search_page = index_page.search("手机") # 输入文字
time.sleep(3)
title_list = search_page.get_all_titles()
for title in title_list:
print(title)
assert "手机" in title # 断言
pytest
测试框架
引入pytest
测试框架
安装
1
pip install pytest
这里还有一篇关于
pytest
测试框架的安装和介绍 Pytest介绍和教程,多扩展一些知识,编写测试用例
test_
开头的文件test_
开头的函数 (或者Test
开头的类)在用例中使用断言
1
2
3
4# test_abc.py
def test_bcd():
assert 1 == 2
执行用例
- pytest
- python-m
- pytest.main()
结果释义
结果缩写符号 符号 含义 . 通过 F 失败 E 出错 X XPass
意外通过(预期失败,结果成功==不符合预期)x xfailed
预期失败(预期失败,结果失败==符合预期)pytest
高级用法浏览器重复启动,消耗较多的时间,写法繁琐也不美观。
相似的用例,需要复制粘贴,不能用之前的代码。
fixture(夹具)不推荐使用此代码方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27from webdriver_helper import get_webdriver
from pom import IndexPage
def test_demo02():
assert "北凡" == "小冰"
def test_web_search_a():
driver = get_webdriver()
driver.get("https://www.jd.com/")
index_page = IndexPage(driver) # 实例化page 定位到搜索框
search_page = index_page.search("手机") # 输入内容
title_list = search_page.get_all_title()
for title in title_list:
print(title)
assert "手机" in title
def test_web_search_b():
driver = get_webdriver()
driver.get("https://www.jd.com/")
index_page = IndexPage(driver)
search_page = index_page.search("冰箱")
title_list = search_page.get_all_title()
for title in title_list:
print(title)
assert "冰箱" in title可以在测试用例之前、之后、自动执行代码,一般用于准备测试环境,构造测试数据,清理测试现场。
web
测试的前置条件:启动浏览器web
测试的后置条件:关闭浏览器1
2
3
4
5
6
7
8
9
10from webdriver_helper import get_webdriver
import pytest
@pytest.fixture
def driver():
d = get_webdriver() # 前置操作
yield d # 区分前后置
d.quit() # 后置操作fixture
是pytest
的装饰器 是
python
fixture
可以在用例之间共享,解决重复的前置和后置操作fixture
的共享范围 有5个级别:function
默认值 不共享class
module
(文件)package
(文件夹)session
全局共享parametrize 参数化测试1
2
3
4
5
6
7@pytest.fixture(scope='module') # 有了这 fixture 装饰器之后,成为了 fixture
def driver():
d = get_webdriver() # 前置操作
yield d # 区分前后置
d.quit() # 后置操作对于相识的测试用例,通过参数测试,传递不通的部分,可以实现复用测试用例代码。
1
2
3
4
5
6
7
8
9
10@pytest.mark.parametrize("wd",["手机","冰箱"])
def test_web_search(driver,wd):
driver.get("https://www.jd.com/")
index_page = IndexPage(driver) # 实例化page 定位到搜索框
search_page = index_page.search(wd) # 输入内容
title_list = search_page.get_all_title()
for title in title_list:
print(title)
assert wd in title
文章作者: 冰梦
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 冰刻无痕!
相关推荐

2022-12-12
JMeter和java8安装
jdk下载和安装 注:因为JMeter运行需要依赖jdk环境,所以在安装JMeter之前需要配置安装jdk且配置好环境变量,需要jdk8以上的版本(这里推荐安装java8版本就够了)。 jdk下载: 引用站外地址 JMeter 下载地址 这里就不截图了,找到自己的系统版本,下载就可以了。 注:这里下载需要一个登录账号,你需要注册一个。 jdk安装点击安装包,并点击下一步。 后面还有jre安装,路径记得更改。 配置环境变量 环境配置 打开高级系统设置(用系统的搜索就可以找到),打开环境变量,在系统变量下创建一个JAVA_HOME变量名,并且找到你的jdk安装路径。 123变量名:JAVA_HOME变量值:jdk的安装路径 这里再添加一个ClassPath变量,方法和java-home一样,在系统变量下创建一个ClassPath变量,引入变量值。 12变量名:ClassPath变量值:.;%JAVA_...

2023-01-05
Pytest介绍和教程
pytest简介 pytest是一个非常成熟的python的单元框架,比unittest更灵活,容易上手。 pytest可以和selenium,requests,appium结合实现web自动化,接口自动化,app自动化 pytest可以实现测试用例的跳过以及reruns失败用例重试。 pytest可以和allure生成非常美观的测试报告。 pytest可以和Jenkins持续集成。 pytest有很多非常强大的插件,并且这些插件能够实现很多实用的操作。 单元测试框架 单元测试框架是指在软件开发中,针对软件的最小单位(函数,方法)进行正确性的检查测试 单元测试所需要的框架: java:junit和testing python:unittest和pytest 单元测试框架主要使用: 测试发现:从多个文件里面找到我们的测试用例 测试执行:按照一定的顺序和规则去执行,并生成结果 测试判断:通过断言判断预期结果和实际结果的差异 测试报告:统计测试进度,耗时,通过率,生成测试报告 单元测试框架和自动化的关系 提高测试效率,降低维护成本 减少人工干预。提高测试...

2022-12-09
Selenium 基本用法
基本用法使用Selenium我们需要将浏览器渠道添加到环境变量或者绝对路径,前者可以初始化后者需要进行指定。 这里用的是Firefox浏览器,可以用Google chrome来执行 12345678910111213from selenium import webdriver# 初始化浏览器为chrome浏览器browser = webdriver.Chrome()# 指定绝对路径的方式path = r'D:\drivers\chromedriver\chromedriver.exe'browser = webdriver.Firefox(path)# 强制等待time.sleep(5)# 关闭浏览器browser.close() 这样我们看到的是运行成功的的标志,这里我们可以启动为无界面的浏览器 1234567891011121314151617from selenium import webdriverimport time# 无界面的浏览器option = webdriver.ChromeOptions()option.add_argument(...

2023-01-05
allure安装配置和简单使用
记录配置allure的过程和简单的使用 检查是否有java的运行环境 win+r输入cmd回车,打开终端窗口 输入Java回车 如果没有显示就代表你的电脑没有安装Java运行环境,可以参考我的其中的一个教程,那里有关于Java的安装过程 JMeter和java8安装 下载allure 引用站外地址 allure allure下载地址 如果下载慢可以使用以下链接,不过它更新速度比较慢,不过也够用了。 引用站外地址 allure allure下载地址 配置allure 把下载好的allure压缩包放到你需要解压的文件夹下。 进入到allure文件夹下,找到bin目录。 找到allure.exe,cd到此目录下运行allure.e...

2023-01-13
web 自动化实战基础
对比web自动化测试技术方案的对比 自动化控制浏览器 自动化控制页面内容 执行高级的指令(js代码) 搭建Selenium自动化测试环境Web自动化测试原理: Python > 浏览器 × Python > selenium > 浏览器驱动 > 浏览器 √ 关键: selenium 浏览器驱动 安装selenium这里简单介绍我安装的插件和版本,详情可以去看我的另一篇文章 配置 Selenium。 这里再推荐一个浏览器驱动下载网站: 引用站外地址 ChromeDriver 浏览器驱动下载网址 python 3.10 1pip install selenium 安装浏览器驱动 操作系统类型:Windows 浏览器类型:chrome 浏览器版本:107.0.5304.122 一件搭建自动化环境webdriver_helper: 自动判断浏览器类型,版本,操作系统 自动选择和下载...

2022-01-15
学习笔记
测试常用分类按阶段划分 单元测试:针对程序源代码进行测试 集成测试:又称接口测试,主要针对模块与模块或系统与系统之间的接口进行验证 系统测试:针对软件全面进行验证(功能,兼容性,文档) 验收测试:使用内测,公测来实现 内测:公司内部进行验证 公测:让玩家来进行测试 按代码可见度划分 黑盒测试:看不见源代码,主要对程序功能进行测试 灰盒测试:看见部分代码,主要对程序接口进行测试 白盒测试:看见全部代码,主要对程序源代码进行测试 扩展-总结: 系统测试和黑盒测试重点核心是功能测试 集成测试和灰盒测试又称接口测试 单元测试和白盒测试是对代码进行测试 自动化测试归属功能测试 性能测试、安全测试归属专项测试 扩展-测试策略 冒烟测试:大规模测试之前,针对程序主功能进行测试,保证程序具备可测试性。 面试题:提测试标准时什么? – 冒烟测试通过!测试之前要怎么做?–冒烟测试。 模型 质量模型 测试模型 质量模型学到了什么?–针对任何软件或硬件,测试要覆盖的方面 重点:功能、兼容、性能、易用性、安全 W模型学到了什么?–软件开发流程、软件测在开发的作用 开发流...
评论