web自动化多次打开浏览器嫌烦?打开一次浏览器,pytest有个招
最近系统前端组件做了更新,我就把之前做的web自动化的代码做了一些修改,顺便优化了下用例,只保留少量的测试用例了,大头还是在接口自动化上。然后发现关于pytest的还有一个点应该比较常用,这里再介绍一下。
相信有的同学在使用python的unittest框架做web自动化测试的时候会遇到一个问题,需要在setUp方法里去定义浏览器驱动,为了执行case之前打开浏览器。如果在执行很多case的时候呢,打开浏览器浪费的时间还是挺多的,当然了,你可以一个模块打开一次浏览器,不过仍然不是我们最终想要的,执行全部测试,只需要打开一次浏览器,这才是我们想要的。
一、使用unittest的传统方式
这里就是使用unittest框架,执行之前DemoCase类下的用例前打开浏览器。
class DemoCase(unittest.TestCase):
def setUp(self): #每个用例执行之前
print('before test')
self.driver = webdriver.Chrome()
def test_demo1(self):
xxxx
def test_demo2(self):
xxxx
def tearDown(self): #每个用例执行之前
self.driver.quit()
if __name__ == '__main__':
unittest.main()
二、使用pytest实现打开一次浏览器
这里要用到conftest.py跟fixture了,在之前的文章里已经讲过。
还有一个点就是web自动化的原理,其实就是我们的代码向被测试的浏览器发送了一个http请求,然后浏览器接受请求,执行相应操作,并在Response中返回执行状态、返回值等信息。所以当你启动一次浏览器的时候就是产生了一次session,下面来实现以下就好了。
原理也很简单,在你case所在目录的上层创建conftest.py文件,不放心的可以放在项目根目录下。然后在conftest.py文件里定义一个全局的浏览器驱动,利用pytest的fixture特性,设置这个驱动的范围在整个session里,几行代码就可以了。
#conftest.py
driver = None
@pytest.fixture(scope='session', autouse=True)
def browser():
global driver
if driver is None:
driver = webdriver.Chrome()#GUI界面运行
driver.maximize_window()
return driver #返回驱动
使用的时候,在需要启动浏览器进行页面操作的地方,传入驱动就好了。比如下面的这个登录操作
#test_demo.py
def test_login_failed(browser, username, password, res):
'''测试非法登录'''
LP = LoginPage(browser)
error_msg = LP.login_failed_and_return_error_msg(username, password)
assert error_msg == res
这是建立在使用page object设计模式上的,对应的,LoginPage里用对应的方法封装页面操作。
是不是很简单,赶快去试试吧,欢迎留言交流!
web自动化多次打开浏览器嫌烦?打开一次浏览器,pytest有个招的更多相关文章
- Helium文档12-WebUI自动化-go_to在当前的Web浏览器窗口中打开指定的URL
前言 go_to在当前的Web浏览器窗口中打开指定的URL 入参介绍 url def go_to(url): """ :param url: URL to open. : ...
- jmeter+WebDriver:启动浏览器进行web自动化
无论是web自动化还是手机app自动化,WebDriver是Selenium的核心模块,jmeter WebDriver 仅支持Firefox.Chrome 和 HTML Unit驱动,暂不支持IE ...
- 【Selenium01篇】python+selenium实现Web自动化:搭建环境,Selenium原理,定位元素以及浏览器常规操作!
一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 二.话不多说,直接开干,开始搭建自动化测试环境 这里以前在 ...
- 【Selenium05篇】python+selenium实现Web自动化:读取ini配置文件,元素封装,代码封装,异常处理,兼容多浏览器执行
一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第五篇博 ...
- web自动化浏览器chrome和驱动chromedriver
1.web自动化下载浏览器和对应的浏览器驱动,以谷歌浏览器为例 电脑上安装谷歌浏览器,查看谷歌浏览器的版本,输入chrome://settings/help 2.chromedriver国内镜像地址h ...
- 【python+selenium的web自动化】- 控制浏览器的常用操作
如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html 前言 本文主要介绍se ...
- web自动化之浏览器启动
一.环境准备 1.本地引入jar 从http://selenium-release.storage.googleapis.com/index.html?path=3.9/,下载selenium-ser ...
- web自动化工具-liveStyle
web自动化工具-liveStyle LiveStyle. The first bi-directional real-time edit tool for CSS, LESS and SCSS主要用 ...
- web自动化工具-livereload
web自动化工具-livereload livereload是一个很神奇的工具,主要解放了F5键,监听文件变动,整个页面自动刷新.可搭载gulp等构建工具使用.和liveStyle 针对样式文件相比, ...
随机推荐
- demo2动态加载显示商品详情页
/* 要求:实现 头像+昵称(多余7位用...) 商品图片(根据商品实际的图片的大小进行动态的展示.按照一定的比例进行展示.) 产品简介.产品简介在商品图片的下边.并跟随商品图片的大小进行动态的收缩或 ...
- 网络安全传输系统-sprint3账号管理子系统设计
part1:sqlite嵌入式数据库移植 1.数据库系统构成:访问数据库应用-->管理数据库系统-->数据库存储(自上而下) 2.数据库中数据以表的形式而存在.表与表之间可能存在关联关系( ...
- CentOS7安装Redis的两种方式
1. 源码安装方式(不推荐): https://www.cnblogs.com/zuidongfeng/p/8032505.html https://www.cnblogs.com/zerotomax ...
- JSP中contentType、pageEncoding和meta charset的区别
1.创建JSP 使用Eclipse创建JSP文件: <%@ page language="java" contentType="text/html; charset ...
- .NET Core 微服务—API网关(Ocelot) 教程 [三]
前言: 前一篇文章<.NET Core 微服务—API网关(Ocelot) 教程 [二]>已经让Ocelot和目录api(Api.Catalog).订单api(Api.Ordering)通 ...
- 文章要保存为TXT文件,其中的图片要怎么办?Python帮你解决
前言 用 python 爬取你喜欢的 CSDN 的原创文章,保存为TXT文件,不仅查看不方便,而且还无法保存文章中的代码和图片. 今天教你制作成 PDF 慢慢看.万一作者的突然把号给删了,也会保存备份 ...
- MarkDown总结(适合初学者快速入门)
本文转自https://blog.csdn.net/sun8112133/article/details/79871702 总得的来说,MarkDown是一种简单.轻量级的标记语法,它是基于HTML之 ...
- C#算法设计排序篇之02-快速排序(附带动画演示程序)
快速排序(Quick Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/677 访问. 快速排序由C. A. R ...
- C#LeetCode刷题之#66-加一(Plus One)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3684 访问. 给定一个由整数组成的非空数组所表示的非负整数,在该 ...
- arm-linux-gcc-4.4.3.tar.gz
http://u.163.com/xzbSXC6T 提取码: QNk9KsMH