• 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里用对应的方法封装页面操作。

    是不是很简单,赶快去试试吧,欢迎留言交流!

  • 相关阅读:
    PHP+MySQL存储数据出现中文乱码的问题
    IE和火狐的css兼容性问题
    JS调用Webservice
    NET-使用Js调用WebService
    ASP.NET 与 Ajax 的实现方式
    未能加载文件或程序集“System.Web.Extensions, Version=1.0.61025.0, Culture=neutral
    c#webservice的简单示例
    HttpRequest Get和Post调用其他页面的方法
    MYSQL 递归操作
    sql with as 用法
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/12778829.html
Copyright © 2020-2023  润新知