在我们已经学会使用Selenium来写测试脚本之后我们需要引入另一主流单元测试框架pytest以及Allure报告来对项目进行重构pytestpytest是一种功能比较完善的基于Python的测试框架。安装1.WinR打开CMD2.在终端中输入如下代码pip install pytest运行后如图所示3.检验是否下载好输入如下代码pip show pytest运行后如图所示即下载成功实操pytest示例当使用pytest框架编写测试用例时测试类名称必须以Test开头测试方法或函数名称要以test开头。我们先打一个测试代码如下所示#定义了一个求和函数add()该函数用于求函数中传递的参数a与参数b的和 def add(a, b): return a b #定义了一个测试类TestAdd class TestAdd: #定义了一个test_add()方法用于测试函数add()是否为求和函数 def test_add(self): result add(4, 5) #将函数求和结果输出 print(result)在VSCode中使用pytest测试步骤如下1.如图点击2.选择代码所在文件夹3.运行测试4.结果如图所示pytest断言目的是让程序去判断程序运行的结果是否符合预期结果。语法格式如下assert 表达式如果表达式返回值为true则断言成功否则断言失败程序抛出异常pytest中常用的断言表达式如表所示断言表达式说明assert a in b判断b是否包含aassert a not in b判断b受否不包含aassert a b判断a是否大于bassert a b判断a是否小于bassert a b判断a是否等于bassert a b判断a是否大于等于bassert a b判断a是否小于等于bassert a判断a是否为真assert not a判断a是否为假试一下用断言判断result的值是否为9#定义了一个求和函数add()该函数用于求函数中传递的参数a与参数b的和 def add(a, b): return a b #定义了一个测试类TestAdd class TestAdd: #定义了一个test_add()方法用于测试函数add()是否为求和函数 def test_add(self): result add(4, 5) # #将函数求和结果输出 # print(result) assert result 9运行后结果如下FixtureFixture在pytest框架中表示测试固件用于对测试环境的初始化和销毁并且功能灵活应用简单便捷支持参数设置有利于运行多条测试用例在pytest框架中使用Fixture管理测试用例有两种方式是以模块或函数的模式管理测试用例。是以类或方法的模式管理测试用例。这两种模式可以独立运行也可以进行交互Fixture基于测试用例运行层的固件部分可以分为四个级别模块级别模块级别是指在模块中定义setup_module()方法和teardown_module()方法这两个方法分别在模块运行前和运行后被调用在整个模块运行中只执行一次作用于模块中的测试用例函数级别函数级别是指在模块中定义setup_function()方法和teardown_function()方法这两个方法分别在函数运行前和运行后被调用作用于测试函数定义于类外面的测试用例。模块中有几个测试函数就执行几次函数级别的方法。类级别类级别是指在模块或类中定义setup_class()方法和teardown_class()方法并为这两个方法添加装饰器classmethod。setup_class()方法和teardown_class()方法分别在类运行前和运行后被调用。在类运行的过程中只执行一次作用于类中的测试用例方法级别方法级别是指在类中定义setup_method()方法或setup()方法、teardown_method()方法或teardown()方法。这两个方法分别在测试方法运行前和运行后被调用。在每个测试方法运行的过程中只执行一次作用于类中的所有测试方式接下来通过一个案例演示如何使用Fixture中四个级别对应的方法新建一个test_fixture.py文件注意test开头如果不是test开头pytest会检测不到def add(x, y): return x y #模块级别 def setup_module(): print(模块级别模块运行前运行1次setup_module()方法) def teardown_module(): print(模块级别模块运行后运行1次teardown——module()方法) #函数级别 def setup_function(): print(函数级别函数运行前运行1次setup_function()方法) def teardown_function(): print(函数级别函数运行后运行1次teardown_function()方法) def test_add01(): print(测试函数1) assert add(5, 6) 11 class TestFixture: #类级别 classmethod #装饰器 def setup_class(cls): print(类级别类运行前运行1次setup_class()方法) classmethod def teardown_class(cls): print(类级别类运行后运行1次teardown_class()方法) #方法级别 def setup_method(self): print(方法级别方法运行前运行1次setup_method()方法) def teardown_method(self): print(方法级别方法运行后运行1次teardown_method()方法) def test_add02(self): print(测试方法1) assert add(3, 4) 7如图下操作进行测试注意通过用 VSCode 的烧瓶按钮测试面板运行时看不到 print 输出是因为Pytest 默认会“捕获”测试过程中的打印内容不让它直接显示在控制台以免干扰测试结果。要让这些 print 显示出来需要添加-s参数来关闭捕获在终端页面输入如下代码运行pytest -s test_fixture.py运行结果如图所示即成功conftestconftest文件是pytest特有的配置文件可以实现数据参数、方法、函数的共享。它的核心作用是存放共享的 Fixture让同一个目录及子目录下的测试文件自动使用不需要 import。fixture中的scope参数可以控制fixture的作用范围。共有function、scope、module和session 4种作用范围。一句话总结conftest管的是「这个 fixture 对谁可见」scope管的是「这个 fixture 活多久」。fonction每一个函数或方法都会被调用。class每一个类被调用一次module每一个Python文件被调用一次session多个文件仅调用一次参数化pytest常用参数如上面用到的-spytest还包含以下常用参数对测试也比较有帮助-x表示在测试过程中如果有一个测试用例执行失败则退出整个测试。常用于调试测试代码-k用于对测试用例的筛查如只运行包含“search”字样测试用例命令为“pytest -k search test_case.py”-s可以显示测试代码中的print语句的输出-v详细模式显示每个测试用例的完整名称和结果如何做参数化在测试过程中很可能需要基于同一个测试方法进行多轮测试但是每轮测试的输入参数可能是不一样的。此时需要考虑测试数据的管理和应用。Pytest单元测试框架提供了参数化的方式减少测试程序中的冗余代码和测试人员的工作量。参数化就是把一组测试用例中的固定测试数据提取出来然后存放在一个集合中程序执行时会自动从该集合中获取测试数据直到集合中的数据被获取完。在pytest中可以通过装饰器pytest.mark.parametrzie()实现参数化语法格式如下pytest.mark.parametrzie(argnames,argvalues,indirectfalse,idsNone,scopeNone)上述装饰器中有五个参数其中参数argnames和argvalues为必传参数其余三个参数通常不用传递。argnames必传参数表示参数名称多个参数名称之间用逗号隔开。例如“usernamepasswor”argvalues必传参数表示参数值多个参数值之间用逗号隔开该值可以是列表类型、元组类型或字典类型的数据例如列表类型的数据[123,456]元组类型的数据[(1,2,3),(4,5,6)]。argvalues中有几组数据测试方法就会运行几次需要注意的是argvalues中每组测试数据的参数个数要与argnames中的参数名称个数相同否则程序会报错接下来测试一下product()是否为求积函数演示如何使用参数化新建文件test_param.py#由于要使用pytest中的装饰器pytest.mark.parametrzie() # 所以需要先import,导入包 import pytest def product(a, b): return a * b class TestProduct: pytest.mark.parametrize(a,b,expect,[(2, 2, 4),(2, 3, 6)]) def test_product(self, a, b, expect): result product(a, b) assert expect result在终端中输入命令pytest -sv test_param.py结果如下可见成功带入执行了两次AllureAllure可以给用户提供比较直观的测试图文报表效果比较炫酷。首先需要安装all LUE软件包安装命令为pip install allure-pytest一句话来说Selenium 是干活的手Pytest 是管事的工头Allure 是写报告的文员