Pytest测试实战

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pytest测试实战相关的知识,希望对你有一定的参考价值。

参考技术A Pytest测试框架是动态语言Python专用的测试框架,使用起来非常的简单,这主要得易于它的设计,Pytest测试框架具备强大的功能,丰富的第三方插件,以及可扩展性好,可以很好的和unittest测试框架能够结合起来在项目中使用。本文章主要介绍Pytest测试框架中参数化的详细信息。

参数化的本质是对列表中的对象进行循环,然后把循环的对象进行一一的赋值,它的应用场景主要是基于相同的业务场景,但是需要不同的测试数据来测试从而达到最大化的覆盖更多的业务场景和测试的覆盖率。理解了这样的一个思想之后,我们就以两个数想加作为案例,来演示Pytest测试框架的参数化实际应用,另外一点需要特别说的是在Pytest测试框架中参数化使用的方式是通过装饰器的方式来进行。刚才也说到它的本质是对列表中的对象进行循环和赋值,那么这个对象可以是列表,也可以是元祖以及和字典数据类型,见如下的实战案例,把测试的数据分离到不同的对象中(列表,元组,字典),源码如下:

执行后的结果信息如下:

在如上的结果信息中,可以看到真正实现测试用例的代码是很少的,而且把参数化使用到的数据分离到不同的数据类型中。

下面结合API的测试场景来考虑,被测试的API的代码如下:

在基于API测试维度的思想,针对该接口测试我们不考虑接口的安全性,高并发以及它的稳定性方面,单纯的只是从功能层面来考虑进行测试,那么需要针对每个参数是否缺少都得需要进行验证,就会涉及到五个测试用例的设计,我们把数据分别分离到主流的文件中,文件的格式主要为JSON,Yaml,Excel和CSV的文件,先来看分离到JSON的文件内容:

涉及到的测试代码为:

再来看分离到Yaml文件的数据:

涉及到的测试代码为:

分离到CSV的文件内容为:

涉及到的测试代码为:

最后来看分离到Excel的文件内容:

涉及到的测试代码为:

其实我们发现套路都是一样的,不管把数据分离到什么样的数据格式下,都得符合它的本质思想,也就是参数化的本质是对列表中的对象进行循环赋值,把握住这样的一个思想就可以了。整合上面的所有代码,完整代码为:

执行后的结果信息为:

Pytest测试框架最强大的功能除了丰富的第三方插件外,还有就是它的Fixture和共享Fixture的conftest.py,下面具体来看被测试的接口代码:

我们通过token的方式,首先需要授权,授权成功后才可以针对书籍这些接口进行操作,如添加删除以及查看所有的书籍信息,那么获取token这部分的代码完全可以放在conftest.py里面,具体源码为:

Fixture一点需要考虑的是初始化与清理,也就是说在一个完整的测试用例中,都必须都得有初始化与清理的部分,这样才是一个完整的测试用例的。Fixture可以很轻松的来解决这部分,还有一点需要说的是Fixture的函数也可以和返回值整合起来,如添加书籍成功后,把数据ID返回来,下面就以查看书籍为案例,那么查看书籍前提是需要添加书籍,这样可以查看,最后把添加的书籍删除,这样一个测试用例执行完成后才符合它的完整流程,具体测试代码如下:

在如上的代码中可以看到,我们刻意了写了init的Fixture函数,就是使用了它的初始化与清理的思想,当然还可以结合内置的Fixture把代码改造为如下的部分:

感谢您的阅读!针对Pytest测试框架的其他知识体系就在这里不详细的说了,后续会逐步的完善。

pytest测试框架实战一

参考链接

https://docs.pytest.org/en/stable/ 3

注意

起名字,类,包或者方法,都最好不要起关键字的名字,比如 os,sys, http , appium, selenium

自动化测试用例的设计基本原则

  1. 变动小,尽量页面不要经常变动
  2. 每条测试用例尽量简单,尽量去覆盖一个基本的功能
  3. 尽量不要有关联关系

pytest介绍

pytest测试用例的识别、运行

pytest 框架结构

  • import pytest 类似的setup,teardown同样更灵活,
  • 模块级(setup_module/teardown_module)模块始末,全局的( 优先最高 )
  • 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
  • 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
  • 方法级(setup_method/teardown_methond)开始于方法始末(在类中)
  • 类里面的(setup/teardown)运行在调用方法的前后

Pytest 常用参数解析

pytest/py.test [包名] 执行包下所有的用例
pytest -v 打印详细运行日志信息
pytest -s s是带控制台输出结果,也是输出详细
pytest -k "add” 匹配所有名称中包含add的用例,可以使用 and ,or , not等逻辑运算
pytest -m [标记名] @pytest.mark.[标记名] 将运行有这个标记的测试用例
pytest -x 文件名 一旦运行到报错就停止 运行
pytest - -maxfail=[num] 当运行错误达到num的时候就停止 运行
pytest 文件名.py 执行单独一个pytest模块
pytest 文件名.py::类名 运行某个模块里面某个类
pytest 文件名.py::类名::方法名 运行某个模块里面某个类里面的方法
–collect-only 给定配置下显示那些用例会运行只收集用例,而不执行
–junitxml=path 生成执行结果xml文件
–setup-show 回溯fixture的执行过程

Pytest fixture 用法

fixture 用法

  • Fixture 是为了测试?例的执?,初始化?些数据和?法
    • 实现了 unittest ?面的 setUp, tearDown 功能,但? setUp, tearDown 更灵活
    • 直接通过函数名字调?或usefixtures
    • 允许使用多个fixture
    • 使用 autouse,如果要返回值,需要传fixture函数名
    • -setup-show 回溯 fixture 的执行过程

fixture 作用域

  • fixture 里面有一个参数 scope,通过 scope 可以控制 fixture 的作用范围,根据作用范围大小划分:session> module> class> function,具体作用范围如下:
      • function 函数或者方法级别都会被调用
      • class 类级别调用一次
      • module 模块级别调用一次
      • session 是多个文件调用一次(可以跨.py文件调用,每个.py文件就是module)

conftest.py 用法

  • conftest.py配置需要注意:
    • conftest.py文件名是不能换的
    • conftest.py与运行的用例要在同一个package下,并且有__init__.py文件
    • 不需要import导入conftest.py,pytest用例会自动查找
    • 所有同目录测试文件运行前都会执行conftest.py文件
    • 全局的配置和前期工作都可以写在这里,放在某个包下,就是这 个包数据共享的地方。
    • 如果不同层级的包下都有conftest.py文件,那么内层目录的conftest.py文件中的方法会覆盖外部的conftest.py文件中的方法(重名的方法)

Pytest 参数化与数据驱动

pytest 常用插件

课后作业: 1、补全计算器(加减乘除)的测试用例 2、使用数据驱动完成测试用例的自动生成 3、conftest.py中创建fixture 完成setup和teardown 4、在调用测试方法之前打印【开始计算】,在调用测试方法之后打印【计算结束】

以上是关于Pytest测试实战的主要内容,如果未能解决你的问题,请参考以下文章

Pytest测试实战

技术干货 | pytest 自动化测试实战展示

超详细从入门到精通,pytest自动化测试框架实战教程-allure测试报告

干货 | 一文搞定 pytest 自动化测试实战

pytest接口自动化测试框架 | 插件二次开发实战

[接口测试_B] 14 pytest+requests实战-参数化