pytest【1】

2024-04-14 1019阅读

文章目录

  • pytest
    • 测试用例示例
    • 测试用例批量执行
      • 1、terminal执行pytest
      • 2、main代码启动
      • 测试结果
      • fixtures(夹具)
        • 创建fixtures
        • 使用fixtures
        • fixtures共享范围
        • POM:对元素的封装复用

          pytest

          单selenuim的问题:

          • 代码重用性
          • 元素加载延迟
          • 浏览器重复驱动

            解决方法:封装框架 pytest

            测试用例示例

            • 创建 test_ 开头的文件
            • 创建 test_ 开头的函数(或类)
            • 用例中使用断言assert
              def test_a(): # 测试用例a
              	assert 2==2  #若不符合预期,则
              class TestYongli:  # 测试套件,,类,将不同的测试用例打包在一起
              	def test_b():  # 测试用例b
              		...
              

              例如:文件名test_class_3.py

              def test_a():
                  a = 2
                  b = 2
                  assert a == b
                  print("a==b")
              def test_b():
                  a = 1
                  b = 2
                  assert a == b
                  print("a==b")
              def test_c():
                  a = 3
                  b = 3
                  c = 4
                  assert a == b
                  assert a == c
                  print("a==b")
              

              执行结果:(那个50%和100%是测试进度条,表示执行了50%的用例。。)

              要注意:如果鼠标点在某个函数里点执行的话,执行的是那一个函数用例而不是全部。

              pytest【1】

              ============================= test session starts =============================
              collecting ... collected 3 items
              test_class_3.py::test_a PASSED                                           [ 33%]a==b
              test_class_3.py::test_b FAILED                                           [ 66%]
              test_class_3.py:11 (test_b)
              1 != 2
              Expected :2
              Actual   :1
              
              def test_b():
                      a = 1
                      b = 2
              >       assert a == b
              E       assert 1 == 2
              test_class_3.py:15: AssertionError
              test_class_3.py::test_c FAILED                                           [100%]
              test_class_3.py:18 (test_c)
              3 != 4
              Expected :4
              Actual   :3
              
              def test_c():
                      a = 3
                      b = 3
                      c = 4
                      assert a == b
              >       assert a == c
              E       assert 3 == 4
              test_class_3.py:24: AssertionError
              ========================= 2 failed, 1 passed in 0.20s =========================
              

              测试用例批量执行

              1、terminal执行pytest

              pytest【1】

              执行结果:

              pytest【1】

              2、main代码启动

              创建main.py

              import pytest
              if __name__ == "__main__":	# 表示当当前文档是被import调用时,该if后的代码块不会被执行  
                  pytest.main()  # 程序入口
                  
              # 当python文件直接被运行时,if __name__ == '__main__': 语句下面的代码段将被执行。
              # 当python文件以模块形式被调用时,if __name__ == '__main__': 语句下面的代码段不会被执行。
              

              测试结果

              F:功能有问题;E:测试框架有问题

              pytest【1】

              fixtures(夹具)

              可以在测试用例的执行前和执行后,自动执行一部分代码,例如浏览器的启动和关闭。实现代码复用。

              创建fixtures

              fixtures = 函数 + fixtures装饰器

              文件名必须叫 conftest.py

              import pytest
              from selenium import webdriver
              @pytest.fixture()
              def driver():
                  d = webdriver.Chrome()  # 启动浏览器
                  d.get("https://baidu.com")  # 控制浏览器,访问百度
                  return d
              

              使用fixtures

              在测试用例的参数列表中,加上夹具名称,夹具就会被自动使用

              def test_b(self, driver):   # 测试用例,“driver”表示调用了conftest.py中的driver函数
              	...
              def test_c(self, driver):
              	...  
              

              fixtures共享范围

              将启动浏览器设置为共享范围,使得多个测试用例调用driver时只启动一次浏览器。

              创建夹具,可以指定夹具的共享范围,在共享范围内的用例,会共享同一个夹具

              pytest的夹具共享范围有5个:

              • function(函数)(默认,最小)
              • class(类)
              • module(文件)
              • package(文件夹)
              • session(会话)

                每个fixture只能有一个范围

                两个测试用例如果要使用同一个浏览器,只需要调整fixtures的范围;

                上述用例处于同一个类,就可以将fixtures改为:

                @pytest.fixture(scope=“class”)

                import pytest
                from selenium import webdriver
                @pytest.fixture(scope="class") # 共享范围为class
                def driver():
                    d = webdriver.Chrome()  # 启动浏览器
                    d.get("https://baidu.com")  # 控制浏览器,访问百度
                    return d
                

                POM:对元素的封装复用

                POM实现对页面的封装

                Page Object Model:页面对象模型,通过面向对象的思想,封装页面的元素。

                属性:

                方法:自动化操作

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]