在pytest框架中,编写测试用例有如下约束:

  • 所有的测试用例文件名都需要满足test_*.py格式或*_test.py格式。
  • 在测试用例文件中,测试类以Test开头,并且不能带有__init__方法,否则pytest不会执行该class。
  • 在测用例的class中,可以包含一个或多个test_开头的方法。

在满足上面约束后,有两种方式来执行测试用例:

  1. 主函数方式
  2. 命令行方式

主函数方式

执行所有用例

使用pytest.main()方式执行用例,如果不加参数,会自动从当前目录及子目录中寻找符合上述约束的测试用例来执行。

import pytest

class TestPractice:

    def test_01(self):
        print("执行用例1")

    def test_02(self):
        print("执行用例2")

if __name__ == '__main__':
    pytest.main()

执行结果

python执行pytest命令 pytest运行指定用例_命令行

从上面的结果中,可以看到,print()打印的信息未显示,可以使用-s参数显示打印信息

...(省略)

if __name__ == '__main__':
    pytest.main(["-s"])

注意参数格式是列表

python执行pytest命令 pytest运行指定用例_命令行_02

上面的pytest.main()是写在用例文件中的,我们可以将其独立出来,结构如下

python执行pytest命令 pytest运行指定用例_python执行pytest命令_03

执行指定用例集

每个测试用例都有一个唯一的nodeid,节点ID格式为  “相对于执行文件的用例文件路径::类名::用例名”。可以使用-v参数,查看执行的详细信息,详细信息包含了用例的节点ID。

python执行pytest命令 pytest运行指定用例_用例_04

在知道了用例的节点ID后,只需要将用例的节点ID以参数的形式传入,就可以执行指定用例了。

执行指定用例

python执行pytest命令 pytest运行指定用例_python执行pytest命令_05

执行指定用例类

python执行pytest命令 pytest运行指定用例_命令行_06

执行指定用例文件或指定路径

python执行pytest命令 pytest运行指定用例_命令行_07

命令行方式

命令行方式与主函数相差不大,区别是主函数是以列表添加参数,命令行是以空格添加参数。

python执行pytest命令 pytest运行指定用例_用例_08

python执行pytest命令 pytest运行指定用例_命令行_09

配置文件修改约束条件

文章开头强调了测试用例的约束条件,这些约束条件是可以通过pytest.ini来修改的,下面是常用的配置字段:

[pytest]
# 命令行参数,用空格分隔
addopts = -v -s

# 读取测试用例的起始文件夹
testpaths = ./testcase

# 配置搜索的模块文件名称
python_files = test*.py

# 配置搜索的测试类名
python_classes = Test

# 配置搜索的测试方法名
python_functions = test

复制上面信息,在项目根目录创建pytest.ini,将复制的信息粘贴进去,然后执行用例。

注意:此时会报错:UnicodeDecodeError: 'gbk' codec can't decode

python执行pytest命令 pytest运行指定用例_测试用例_10

原因是我们在配置文件中使用了中文,解决方法有两种:

  • 删除文件中的中文
  • 修改iniconfig中的代码

点击倒数第二行的报错,在其前面一行代码的open()函数中增加 encoding='utf-8' 就能解决问题

python执行pytest命令 pytest运行指定用例_命令行_11

解决报错问题后,就可以通过修改配置文件执行我们想要执行的用例了,比如,执行类名以A开头用例以b开头的用例

python执行pytest命令 pytest运行指定用例_python执行pytest命令_12