最近系统前端组件做了更新,我就把之前做的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有个招的更多相关文章

  1. Helium文档12-WebUI自动化-go_to在当前的Web浏览器窗口中打开指定的URL

    前言 go_to在当前的Web浏览器窗口中打开指定的URL 入参介绍 url def go_to(url): """ :param url: URL to open. : ...

  2. jmeter+WebDriver:启动浏览器进行web自动化

    无论是web自动化还是手机app自动化,WebDriver是Selenium的核心模块,jmeter WebDriver 仅支持Firefox.Chrome 和 HTML Unit驱动,暂不支持IE  ...

  3. 【Selenium01篇】python+selenium实现Web自动化:搭建环境,Selenium原理,定位元素以及浏览器常规操作!

    一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 二.话不多说,直接开干,开始搭建自动化测试环境 这里以前在 ...

  4. 【Selenium05篇】python+selenium实现Web自动化:读取ini配置文件,元素封装,代码封装,异常处理,兼容多浏览器执行

    一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第五篇博 ...

  5. web自动化浏览器chrome和驱动chromedriver

    1.web自动化下载浏览器和对应的浏览器驱动,以谷歌浏览器为例 电脑上安装谷歌浏览器,查看谷歌浏览器的版本,输入chrome://settings/help 2.chromedriver国内镜像地址h ...

  6. 【python+selenium的web自动化】- 控制浏览器的常用操作

    如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html 前言 ​ 本文主要介绍se ...

  7. web自动化之浏览器启动

    一.环境准备 1.本地引入jar 从http://selenium-release.storage.googleapis.com/index.html?path=3.9/,下载selenium-ser ...

  8. web自动化工具-liveStyle

    web自动化工具-liveStyle LiveStyle. The first bi-directional real-time edit tool for CSS, LESS and SCSS主要用 ...

  9. web自动化工具-livereload

    web自动化工具-livereload livereload是一个很神奇的工具,主要解放了F5键,监听文件变动,整个页面自动刷新.可搭载gulp等构建工具使用.和liveStyle 针对样式文件相比, ...

随机推荐

  1. 当asp.net core偶遇docker二(打造个人docker镜像)

    网络上的docker容器总有一些不尽人意的感觉,这个时候,就需要自己diy一个自用的. 比如我们想在163的mysql 5.7内diy一下,结果发现,这个不带vim,我想改造一个自用的mysql镜像, ...

  2. 28-关键字:static

    static:静态的 1.可以用来修饰的结构:主要用来修饰类的内部结构 >属性.方法.代码块.内部类 2.static修饰属性:静态变量(或类变量) 2.1 属性,是否使用static修饰,又分 ...

  3. 初识HTML(二)

    目录 HTML表格 HTML列表 HTML表格 表格主要显示.展示数据. 表格基本语法:<table>定义一个表格,<tr>定义表格中的一行,<td>定义一行中的某 ...

  4. 解Bug之路-dubbo流量上线时的非平滑问题

    前言 笔者最近解决了一个困扰了业务系统很久的问题.这个问题只在发布时出现,每次只影响一两次调用,相较于其它的问题来说,这个问题有点不够受重视.由于种种原因,使得这个问题到了业务必须解决的程度,于是就到 ...

  5. imx28x arm-gcc arm-linux-4.4.4 EasyARM-iMX283

    gcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2 提取码: UgUtMUNX

  6. scanf函数与getchar函数

    #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h&g ...

  7. 解决"$ is not defined" 亲自体验

    引入jquery <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>

  8. 同事不太懂负载均衡,我直接把阿里架构师的这份Nginx笔记甩给他

    Nginx功能强大,架构复杂,学习.维护和开发的门槛较高. 本份笔记深入最新的Nginx源码,详细剖析了模块体系.动态插件.功能框架.进程模型.事件驱动.线程池.TCP/UDP/HTTP 处理等Ngi ...

  9. Object.prototype.__proto__, [[prototype]] 和 prototype

    Object.prototype.__proto__ , [[prototype]] 和 prototype Object.prototype.__proto__ 是什么? __proto__ 是一个 ...

  10. 【源码】RocketMQ如何实现获取指定消息

    概要 消息查询是什么? 消息查询就是根据用户提供的msgId从MQ中取出该消息 RocketMQ如果有多个节点如何查询? 问题:RocketMQ分布式结构中,数据分散在各个节点,即便是同一Topic的 ...