Pytest自动化测试框架[了解]

Pytest自动化测试框架

pytest 是 python 的第三方单元测试框架,比自带 unittest 更简洁和高效,支持非常丰富的插件,同时兼容 unittest 框架。

一. 安装 Pytest

首先,你需要在你的 Python 环境中安装 Pytest。这可以通过 pip(Python 的包管理器)来完成:

pip install pytest

二.编写

函数的名字通常以 test_ 开头或者以 _test 结尾,或者包含 test_ 字符串

  • .py 测试文件必须以test_开头(或者以_test结尾)
  • 测试类必须以Test开头,并且不能有 init 方法
  • 测试方法必须以test_开头
  • 断言必须使用 assert

通常pytest运行时,会搜索指定目录下以test_开头的测试文件 ,同时在用例中也是搜索以Test开头的类或者以test_开头的方法进行运行 。pytest会将这些标识当做测试用例去运行 ,没有标识的将不被视为测试用例 ,故在运行时会被丢弃掉 。所以 ,编写测试用例通常就的按照这种规则编写我们的测试用例 。

三. 运行测试用例

Pytest

pytest test_example.py

allure生成测试报告

直接执行allureDemo项目下的所有测试用例,并将测试报告文件夹allure_reports放在项目根目录下

D:\_Automation\allureDemo>pytest -s  -v --alluredir=./allure_results

运行完成后,打开 allure 报告

allure serve allure_reports

allure serve ./allure_results

Allure 测试报告一览

四.参数

1pytest-xdist

当用例量很多时,运行时间也会变的很长,如果想缩短脚本运行的时长,就可以用多进程来运行。多cpu分布。主要用来进行多线程运行的插件

2pytest-rerunfailures

在做测试时, 短时的网络波动会导致用例运行失败, , 此时就可通过重试运行用例的方式来解决问题。主要用来失败用例重跑的插件。

3、pytest-html

是一个pytest用于生成XML/HTML测试报告的插件。(HTML测试报告)

4pytest-assume

Pytest中可用assert断言, 但一个失败后面的断言将不再执行;pytest-assume可以实现对多个断言多重校验的。

比较预期结果和实际结果的值是否相等 ,在pytest中使用的是assert这个关键值进行比对的 。

5pytest-repeat

测试过程中会出现一些偶现的bug, 对于这种问题我们会针对此用例反复执行多次, 最终复现出问题来; pytest-repeat插件就能起到这个作用: 重复执行测试用例

6、pytest-ordering

主要用来改变用例的执行顺序的插件

pytest默认按字母顺序去执行的(小写英文--->大写英文--->0-9数字)

用例之间的顺序是文件之间按照ASCLL码排序,文件内的用例按照从上往下执行

setup_module->setup_claas->setup_function->testcase->teardown_function->teardown_claas->teardown_module

但可以通过第三方插件pytest-ordering实现自定义用例执行顺序。

7allure-pytest:主要用来生成美观自定义的allure报告

7、使用 Fixtures

Fixtures 是 Pytest 中的一个重要功能,它允许你定义一些在测试之间共享的状态或资源。Fixtures 可以使用 @pytest.fixture 装饰器来定义,然后在测试函数中使用它们作为参数。

Pytest 允许你使用参数化测试来测试多个输入和期望的输出。这可以通过 @pytest.mark.parametrize 装饰器来实现。

  • 数据参数化 :具有相同操作步骤但是不同数据的用例进行循环执行 ,比如登录步骤一样,但是登录的数据可以每次都不同
  • setup(): 初始化函数 ,在每条测试用例执行前要执行的一个函数,主要为测试用例做初始化数据 。
  • teardown(): 清除函数 ,在每条测试用例执行后要执行的一个函数 ,主要是为测试用例执行后生成的数据做清除,做恢复操作 。比如注册后在数据库用户表中记录了一条数据 ,为了下次继续能执行 ,在这里写一个删除这条记录的操作就可以循环运行 。
  • setup_class(): 类初始化函数 ,在一个类中只运行一次,而且是最先被运行 ,一般用于只初始化一次的操作,比如创建对象 。
  • tearDown_class(): 类初始化函数 ,在一个类中只运行一次,而且是最后被运行 ,一般用于恢复一次的操作,比如关闭连接对象 。

五.测试用例

pip install pytest pytest-cov pytest-html

生成HTML测试报告

pytest --html=report.html

pip install allure-pytest

pytest -m baidu -s  -v --alluredir=./allure_results

执行成功后,通过如下命令打开测试报告:

allure serve allure_reports

pytest -k “string” :匹配文件名、类名、函数名包含string的,并且可以使用逻辑操作符(and , or ,not)进行匹配 。

pytest -m string : 需要在代码中编写装饰器@pytest.mark.标记符 ,然后通过命令行去匹配这些用例 。

  • 如果想运行用例级别为p2的用例 :pytest test01_login.py -m p2

pytest -s : 将测试用例中的打印信息输出到控制台 。

pytest -v : 输出更加详细的信息到控制台

pytest -q : 输出最简化的信息 。

pytest -x : 遇到错误的时停止运行。

pytest --pdb : 这个也可以打断点 ,关键是这个可以进行交互,比如让其输出变量等 。

pytest -runxfail : 将标记为失败的用例正常情况下是不运行 ,但是加上此参数 ,继续会运行 。

pytest --lf : 只跑上次测试失败的用例 ,这就意味着至少要跑两次 。

pytest --ff : 先跑上次测试失败的用例 ,再把其他用例再执行一遍 。

pytest -n number  需要安装pytest-xdisk模块,同时运行多个线程 ,在用例量大的情况下,可以使用这个参数 。

pytest --html 需要安装pytest-html模块 ,可以直接生成html的测试报告 。

  • 如果想要直接生成html测试报告到当前路径下,报告名为report.html :pytest --html=report.html

设置测试用例的运行顺序: 需要安装模块pytest-ordering ,如果运行的测试用例希望给它控制顺序 ,尤其是流程性用例 ,一般都会有顺序的 。这个直接通过装饰器给用例设置就可以了 。

pytest支持的初始化和清除函数

六.pytest支持的初始化和清除函数

举个例子:

比如你要做web自动化测试 ,通常的操作是:

  1. 打开浏览器
  2. 运行一条测试用例
  3. 关闭浏览器
  4. 重复上面的3个步骤 ,只到所有测试用例运行完毕 。

打开浏览器的操作 ,它本身不属于测试用例 ,但是又是一个必须要做的操作。

将打开浏览器操作放在setup_method()或者setup函数 ,同样关闭浏览器放在teardown_method()或teardown()中。

  1. 做初始化操作
  2. 执行测试用例
  3. 进行清除操作

对应的:

  • 初始化函数:setUp()
  • 参数化的测试用例 :test_case()
  • 清除函数:tearDown()

1、fixture

  • 可以进行参数化
  • 可以解决初始化和清除的操作,在上一小节中介绍的那10个函数 ,都可以通过这个fixture来实现 。

fixture(scope,autouse,params,ids,name):

    scope :在什么层级下运行 ,它的值只有 :session ,package ,module ,class ,function(默认值)

autouse : 代表的是否自动执行 ,若此参数不加或者设置为False的话,代表不会自动运行 ,设置为True自动执行,无需调用

    params : 进行的数据参数化 ,参数化的数据就是通过此参数传入到测试用例中。

    ids : 它是给生成的结果的fixture进行重命名 ,主要是为了好理解 ,前提是必须要有参数params

    name : 对fixture的函数名起别名, 或者叫重命名 ,没啥大用处 。

参数名 :scope ,它有5个值,分别是 :

session :如果等于此值 ,那么这个fixture在整个项目下只运行一次 ,这个特别适合于登录 ,登录在项目中只需要登录一次。

package :如果设置为此值 ,那么这个fixture在这个包下只运行一次 。

module : 如果设置为此值 ,那么这个fixture在这个文件中只运行一次 ,文件中可能既有函数又有类 。

class : 如果设置为此值 ,那么这个fixture在这个类中只运行一次

function:它是这个函数的默认值,如果为此值,那么这个fixture在每个测试函数前运行一次

Allure 测试报告除了涵盖测试运行的全面信息外,还提供各种维度的分析图,包括如下几个部分。

项目总览(OverView)

项目总览显示了总体测试运行的一系列统计信息。

按缺陷种类分析(Categories)

缺陷种类分析显示了所有不同原因引起的失败,并分类展示。

按测试套件分析(Suites)

测试套件分析显示了按照套件和类划分的所有的测试执行情况。

图表模块(Graphs)

图表模块,包括按照不同维度分析的各种图表(例如测试状态表分析,测试用例等级分析表,测试执行时间分析表等等)。

按执行时间分析(Timeline)

按执行时间分析模块,详细列出了各个测试用例的执行时间,你可以筛选出那些运行时间最长的测试用例进行优化。

针对 BDD 驱动的测试用例进行分析(Behaviors)

这里主要是根据 Epic、Feature 和 Story 标签对测试结果进行分组。

按照 Package 进行分析(Packages)

Package 模块列出了按照 Package 维度进行分析的详细图表。



 

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梖梖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值