pytest【1】

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%的用例。。)
要注意:如果鼠标点在某个函数里点执行的话,执行的是那一个函数用例而不是全部。
在这里插入图片描述

============================= 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
<Click to see difference>

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
<Click to see difference>

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

在这里插入图片描述
执行结果:
在这里插入图片描述

2、main代码启动

创建main.py

import pytest

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

测试结果

F:功能有问题;E:测试框架有问题
在这里插入图片描述

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:页面对象模型,通过面向对象的思想,封装页面的元素。

属性:
方法:自动化操作

相关推荐

  1. pytest

    2024-04-15 00:40:03       31 阅读
  2. Pytest单元测试系列[v1.0.0][pytest插件常用技巧]

    2024-04-15 00:40:03       57 阅读
  3. Pytest官方文档翻译及学习】2.1 如何调用pytest

    2024-04-15 00:40:03       36 阅读
  4. Pytest单元测试系列[v1.0.0][高级技巧]

    2024-04-15 00:40:03       20 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-15 00:40:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-15 00:40:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-15 00:40:03       82 阅读
  4. Python语言-面向对象

    2024-04-15 00:40:03       91 阅读

热门阅读

  1. Kotlin 面试题

    2024-04-15 00:40:03       30 阅读
  2. 前端面试问题汇总 - 工程管理工具篇

    2024-04-15 00:40:03       42 阅读
  3. 前端面试问题汇总 - 其他问题

    2024-04-15 00:40:03       42 阅读
  4. c++智能指针(2) -- auto_ptr

    2024-04-15 00:40:03       39 阅读
  5. Elasticsearch 支持的插件 —— 筑梦之路

    2024-04-15 00:40:03       41 阅读
  6. 顺序表菜单栏的实现

    2024-04-15 00:40:03       37 阅读
  7. 漫谈:C语言 值传递 函数参数 指针

    2024-04-15 00:40:03       40 阅读