1.介绍和安装

概念


pytest 是 python 的一种单元测试框架,同自带的 UnitTest 测试框架类似,相比于 UnitTest 框架使用起来更简洁,效率更高。

1.2特点

官方文档地址:https://docs.pytest.org/en/6.2.x/
1.非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
2.支持简单的单元测试和复杂的功能测试
3.支持参数化
4.执行测试过程中可以将某些测试跳过,或者对某些预期失败的 Case 标记成失败
5.支持重复执行失败的 Case
6.支持运行由 Nose,UnitTest 编写的测试 Case
7.具有很多第三方插件,并且可以自定义扩展
8.方便的和持续集成工具集成

说明:pytest 是 Python 的一种单元测试框架,同自带的 UnitTest 测试框架类似,相比 UnitTest框架使用起来更简洁,效率更高。(在自动化测试中同样充当测试执行的功能!并且可以跟 unitTest互换)

2.安装步骤

说明:与 UnitTest 不同的是,pytest 框架需要先安装才能使用!

安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pytest
查看:pip show pytest
确认版本:pytest--version

第一种情况:

使用命令报以下错误

解决方法:

使用 Python 模块方式运行

py -m pytest -s .\new.py

运行方式分为两种:


命令行模式【建议】

  • 命令行中执行 pytest-s test_login.py
  • 主函数模式

。在 test login.py 文件中增加主函数
if  _name_=='_main_'
      pytest.main(["-s","login.py"])
-s表示支持控制台打印,如果不加,print不会出现任何内容

建议使用命令行的形式运行,对比主函数模式更加方便

函数方法

运行结果

函数开始-->我是函数1-->函数结束      函数开始-->我是函数2-->函数结束     

类级别方法
运行于测试类的始末,在一个测试内只运行一次 setup class 和 teardown class,不关心测试类
内有多少个测试函数。

配置文件


应用场景
使用配置文件后可以快速的使用配置的项来选择执行哪些测试模块。
使用方式
1.项目下新建 scripts 模块
2.将测试脚本文件放到scripts中
3. pytest 的配置文件放在自动化项目目录下
4.名称为 pytest.ini
5.命令行运行时会使用该配置文件中的配置
6.第一行内容为[pytest]

说明:使用配置文件后可以快速的使用配置的项来选择执行哪些测试模块
注意:
1.在 Windows 系统下,pytest 配置文件中,不允许写注释信息
2.一个工程内只需要一个 pytest 配置文件,并且需要保证京件名正确
3.一般情况,只需要将 pytest 配置文件,置于工程根目录下
4.配置有 pytest 配置文件的工程,只需要打开命令行,输入pytest 指令,即可执行测试

默认设置
说明: 测试用例文件名/测试类名/测试方法名均为 Test/test 开头

[pytest]
testpaths =./case
addopts =-s
python_files =test*.py
python classes =Test*
python functions =test*

扩展: 指定单个文件/类/方法执行


[pytest]
testpaths =./case
addopts =-s
python_files = demo_case1.py
python classes = Demo_Demo1
python functions = demo_method1

说明: 与 UnitTest 不同的是,pytest 框架需要先安装才能使用!
安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pytest
查看:pip show pytest
确认版本:pytest --version

Pytest常用插件

1、HTML报告插件

安装步骤

pip  install  pytest-html

pycharm里安装

使用步骤


1.在 pytest 配置文件中,增加命令选项 --html=./report/report.html
2.:执行 pytest 指令,运行测试即可

[pytest]
#告知系统该文件的类型
testpaths = ./case
#testpaths:指定测试用例存放位置
addopts = -s
          --html=./report/report.html
#addopts:添加 pytest 命令选项
python_files = test*.py
#python_fles: 指定测试脚本文件名前缀
python_classes = Test*
#python_classes:指定测试类名前缀
python_functions = test*
#python_functions:指定测试函数/测试方法名前缀

2.控制函数执行顺序
应用场景
现实生活中,如果想下订单,必须先登录,我们可以通过插件的形式来控制函数执行的顺序
安装


使用命令 pip3 install pytest-ordering 进行安装
使用

标记于被测试函数,@pytest.mark.run(order=x)
根据order传入的参数来解决运行顺序
order值全为正数或全为负数时,运行顺序:值越小,优先级越高
正数和负数同时存在:正数优先级高

扩展:序号支持正数和负数,以及正负混合
#1.纯正数:数越小,优先级越高
2.纯负数:数越小,优先级越高
#3.正负混合:正数先按照顺序执行,负数最后执行

注意:控制方法执行顺序对测试类同样有效!

3.失败重试插件
应用场景
自动化测试脚本可能会使用到网络,如果网络不好可能最终会使脚本不通过。像这种情况可能并不
是脚本本身的问题,仅仅是因为网络忽快忽慢,那么我们可以使用失败重试的插件,当失败后尝试
再次运行。一般情况最终成功可以视为成功,但最好进行进行排查时候是脚本问题。
安装
使用命令 pip3 install pytest-rerunfailures 进行安装
使用
在配置文件中的命令行参数中增加
--reruns n

[pytest]
#告知系统该文件的类型
testpaths = ./case
#testpaths:指定测试用例存放位置
addopts = -s
          --html=./report/report.html
          --reruns 1
#addopts:添加 pytest 命令选项
python_files = test*.py
#python_fles: 指定测试脚本文件名前缀
python_classes = Test*
#python_classes:指定测试类名前缀
python_functions = test*
#python_functions:指定测试函数/测试方法名前缀

使用步骤
1.在 pytest 配置文件中,增加命令选项:--reruns 次数
2.执行 pytest 指令,运行测试即可

pytest的高级用法

1、跳过测试函数

应用场景
同一个软件在不同的设备上可能会有不同的效果,比如,iOS的 3d h 操作是需要 6s 以上设备
支持的,6和 6s都可以安装同一款应用,如果设备不支持,那么根本没有必要去测试这个功能。
此时,我们可以让这种函数进行跳过。

2、参数化功能

应用场景
登录功能都是输入用户名,输入密码,点击登录。但登录的用户名和密码如果想测试多个值是没有
办法用普通的操作实现的。数据参数化可以帮我实现这样的效果。
方法名
#数据参数化
#参数:
argnames:参数名
argvalues:参数对应值,类型必须为可迭代类型,一般使用1ist
@pytest.mark.parametrize(argnames,argvalues, indirect=False, ids=None, scope=None)
一个参数使用方式
1.argnames 为字符串类型,根据需求决定何时的参数名
2.argvalues 为列表类型,根据需求决定列表元素中的内容
3.在测试脚本中,参数,名字与 argnames 保持一致
4.在测试脚本中正常使用

import  pytest




def add_fun(num1,num2):
    return num1 + num2

class testDemo(object):

     def test(self):

         result = add_fun(2,3)

         assert result == 7

if __name__ == '__main__':
 pytest.main(['-s','test666.py'])
[pytest]
#告知系统该文件的类型
testpaths = ./case
#testpaths:指定测试用例存放位置
addopts = -s
          --html=./report/report2.html
;          --reruns 1
#addopts:添加 pytest 命令选项
python_files = test*.py
#python_fles: 指定测试脚本文件名前缀
python_classes = Test*
#python_classes:指定测试类名前缀
python_functions = test*
#python_functions:指定测试函数/测试方法名前缀

if __name__ == '__main__':
 pytest.main(['-s','test666.py'])

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐