1、前置准备
参考:- 官方地址:https://docs.python.org/zh-cn/3.11/library/unittest.html#command-line-interface
- 官方简要说明:unittest 模块可以通过命令行运行模块、类和独立测试方法的测试
- 个人对应视频:https://www.bilibili.com/video/BV1sLYQe8EN7?vd_source=08c71734f77982d07d5229c567db82aa&p=39&spm_id_from=333.788.videopod.episodes
- 命令: python --version
- 由于 unittest 是内置于 Python 中,因此 Python 环境如果正常,unittest 一般不会出问题。
- 父目录(包):ex_07
- 模块文件: testA.py,一个标准测试用例,两个测试方法
- 模块文件: testB.py,一个返回测试套件的函数
- 子目录(包):ex_sub
- 模块文件: testC.py,一个标准测试用例,两个测试方法
- 模块文件: testD.py,一个标准测试用例,两个测试方法
2、查看命令行使用帮助
先从命令行自带的帮助说起:- 查看帮助命令: python -m unittest -h
- 选项 -m :python 命令的选项,告诉 Python 解释器运行一个库模块作为脚本。在这里指示为让 Python 运行 unittest 模块。
- 选项 -h: unittest 命令的选项,查看 unittest 命令的帮助
- unittest 使用命令行方式运行,有两种运行方法
- ① 执行测试列表(暂且称之为通用方式)
- 核心参数:tests
- 即:执行指定测试列表,可以是 [ “模块”, “测试类”, “测试方法”, “测试套件” ]
- 基本用法:python -m unittest tests
- 核心参数:tests
- ② 探索性测试
- 即通过前面文章提到过的 discover() 方法,指定搜寻目录后,由 unittest 自行递归搜索测试并执行
- discover(self, start_dir, pattern='test*.py', top_level_dir=None)
- 基本用法:python -m unittest discover -s xxx
- 核心选项:
- 选项 -s:指定探索的开始目录。默认为当前目录(.)
- 选项 -p:匹配测试的模块名称。默认为“test*.py”
- 选项 -t:指定探索的顶级目录。默认为开始目录
- 注意:对于测试发现,所有测试模块都必须可以从项目的顶级目录导入。
- 即通过前面文章提到过的 discover() 方法,指定搜寻目录后,由 unittest 自行递归搜索测试并执行
- 通用选项(红色是重点选项)
- -h:查看帮助
- -v:输出时显示详细信息
- -q:静默模式运行测试,将减少其输出到最低限度,通常只会显示失败和错误信息
- --locals:在测试失败输出堆栈跟踪信息时,显示局部变量 - -f, --failfast:当出现第一个错误或者失败时,停止运行测试。
- -b,--buffer:在测试运行时,标准输出流与标准错误流会被放入缓冲区。成功的测试的运行时输出会被丢弃;测试不通过时,测试运行中的输出会正常显示,错误会被加入到测试失败信息。
- -c, --catch:当测试正在运行时, Control-C 会等待当前测试完成,并在完成后报告已执行的测试的结果。当再次按下 Control-C 时,引发平常的 KeyboardInterrupt 异常。
- -k:只运行匹配模式或子字符串的测试方法和类。 此选项可以被多次使用,在此情况下将会包括匹配任何给定模式的所有测试用例。
- 包含通配符(*)的模式使用 fnmatch.fnmatchcase() 对测试名称进行匹配。另外,该匹配是大小写敏感的。
- 匹配模式下对测试加载器导入的测试方法全名进行匹配。
- 例如,-k foo 可以匹配到 foo_tests.SomeTest.test_something 和 bar_tests.SomeTest.test_foo ,但是不能匹配到 bar_tests.FooTest.test_something
- ① 执行测试列表(暂且称之为通用方式)
3、通用执行方式
3.1、执行测试模块
位置参数 tests 使用 “模块”:- 如果是 Windows 系统,保证切换到被测模块所在盘符
- 模块写法
- 可以使用 “全路径(路径+全文件名)” 方式指定,即类似: D:\xxx\yyy\test_a.py
- 注意,这种方式最后部分必须写扩展名(.py)
- 可以使用 “点” 连接方式指定,即类似: xxx.yyy.test_a
- 注意,这种方式最后部分不要写扩展名(.py)
- 可以使用 “全路径(路径+全文件名)” 方式指定,即类似: D:\xxx\yyy\test_a.py
3.2、执行测试类
如果象执行模块一样,直接使用绝对路径的写法,在最后位置添加 “测试类”,执行会报错 所以,要把路径改成以 “点” 连接的方式,即: xxx.yyy.模块名.测试类名3.3、执行测试方法
最后部分为 “测试方法” 名称即可3.4、执行测试套件
按以上的试验结构,此处指定执行 “测试套件” 失败- 原因:定义测试套件的文件中,又导入了其它目录下的模块文件,命令行找不到该导入文件的位置,即:
- 当前路径是D盘根目录: D:\
- 导入的文件夹 ex_07,无法通过当前路径找到,即: D:\ex_07 这个是无效路径
- 将当前路径切换到 Temp 目录(也是 PyCharm 中的项目根路径)
- 而 ex_07 目录就在该跟目录下,即: .....\Temp\ex_07 这个路径就是有效路径了
3.5、混合执行
以上测试对象可以混合到一起执行,如下:- 当前路径:项目根路径
- 测试对象表示方法:以 “点” 连接方式