web自动化多次打开浏览器嫌烦?打开一次浏览器,pytest有个招

摘要:
另一点是web自动化的原理。实际上,我们的代码向被测试的浏览器发送一个http请求,然后浏览器接受该请求,执行相应的操作,并返回Response中的执行状态、返回值和其他信息。然后单击conftest中定义了全局浏览器驱动程序。py文件。使用pytest的fixture特性,您可以在整个会话中设置此驱动程序的范围,只需几行代码。

web自动化多次打开浏览器嫌烦?打开一次浏览器,pytest有个招第1张

最近系统前端组件做了更新,我就把之前做的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有个招》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql学习笔记(三)----函数图片浏览器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python从入门到实践第十一章练习题

'''这是11-1和11-2的练习题用于接受城市名称的函数'''"""def get_ciy_name(city,country):#定义一个城市名称的函数有2个形参 city_name = city + ',' + country return city_name.title()#把值返回给函数,用title()的方法把每个单词的第一个字母转...

pytest测试报告allure

1.python安装allure插件,pip install allure-pytest(PS:安装完成之后,打开一个你之前写的pytest脚本,看能不正常使用,如果报错:AttributeError: module 'allure' has no attribute 'severity_level'这个是之前 pytest-allure-adaptor...

搭建类似pytest的Java环境把Java搞起来

每次想写Java都被环境折腾困扰,不如写Python这般顺畅。为了解决这个问题,我写下这篇文章,归档到在线电子书,以备不时查看之需。 安装Java Python安装包是个.exe文件,比如python-3.8.3.exe。Java也是如此,区别在于文件名不是java-xxx.exe而是jdk-xxx.exe,比如jdk-8u281-windows-x64....

pytest框架+allure2框架的基本使用(2019-09-03更新)

前提准备: pip安装allure-pytest、pytest和allure-python-commons包,安装过程如下图: pip install allure-pytest pip install pytest pip install allure-python-commons 安装成功如下: allure --version 2.12.1 py...

NET Core3前后端分离开发框架

NET Core前后端分离快速开发框架 https://www.cnblogs.com/coldairarrow/p/11870993.html 引言 时间真快,转眼今年又要过去了。回想今年,依次开源发布了Colder.Fx.Net.AdminLTE(254Star)、Colder.Fx.Core.AdminLTE(335Star)、DotNettySoc...

unittest 执行airtest 脚本

参考:https://blog.csdn.net/gzh00001/article/details/93331399 #!/user/bin/python3#coding=utf-8#2019/12/14 --17:21#author :huifrom airtest.core.api import *import unittestfrom Beautif...