在写测试用例的时候,单个脚本的用例很好执行,那么多个脚本的时候,如何批量执行呢?这时候就可以通过unittet中的TestLoader来加载用例,加载完用例后,使用unittest中的TestRunner去一次执行多个脚本的用例。
一、新建测试项目
1)创建测试工程
点击pycharm左上角 File > New Project > Pure Python,创建名称为Demo的测试工程。
2)创建目录结构
选中刚才新建的工程右键 > New > Python Package,新建一个case和report文件夹,然后在case文件夹下新建baidu和blog文件夹。目录结构如下所示:
3)创建测试脚本
在baidu和blog文件夹下分别创建两个测试脚本,脚本内容如下:
4)创建批量执行脚本
在Demo这个项目下面创建一个脚本run_all_case.py,接下来用这个脚本去批量执行所有的用例。
二、通过discover加载测试用例
discover加载到的测试用例是在一个list列表中,加载完之后,使用unittest中的TestRunner去执行。discover方法主要传两个参数:
- case_dir:这个是指定测试用例所在的目录。
- pattern:这个是在指定目录下,匹配脚本名称的规则,test*.py意思是匹配test开头的所有脚本。
运行后结果如下所示,正是加载到的所有测试用例:
<unittest.suite.TestSuite tests=[<baidu.test_01.Test testMethod=test01>,
<baidu.test_01.Test testMethod=test02>,
<baidu.test_01.Test testMethod=test03>,
<baidu.test_02.Test testMethod=test01>,
<baidu.test_02.Test testMethod=test02>,
<baidu.test_02.Test testMethod=test03>,
<blog.test_03.Test testMethod=test01>,
<blog.test_03.Test testMethod=test02>,
<blog.test_03.Test testMethod=test03>,
<blog.test_04.Test testMethod=test01>,
<blog.test_04.Test testMethod=test02>,
<blog.test_04.Test testMethod=test03>]
三、批量执行测试用例
为了更方便的理解,可以把上面discover加载用例的方法封装成一个函数。
import unittest
import os
# 1.指定测试用例所在的目录
case_path = os.path.join(os.getcwd(), 'case')
# 2.通过discover加载测试用例
def get_all_case():
discover = unittest.defaultTestLoader.discover(case_path, pattern='test*.py')
return discover
if __name__ == '__main__':
# 3.批量执行测试用例
runner = unittest.TextTestRunner()
runner.run(get_all_case())
四、补充
1)os.path.join()
Windows 路径使用反斜杠\作为分隔符;Linux 路径使用正斜杠/作为分隔符。
如果想要程序运行在所有操作系统上,在编写 Python 脚本时,就必须处理这两种情况。
os.path.join() 函数可以实现如果将单个文件和路径上的文件夹名称的字符串传递给它,
os.path.join() 就会返回一个文件路径的字符串,包含正确的路径分隔符。
>>> import os
>>> os.path.join('demo', 'exercise')
'demo\\exercise'
因为此程序是在 Windows 上运行的,所以返回 'demo\\exercise';
如果在 Linux 上调用这个函数,会返回 'demo/exercise'。
2)os.getcwd()
在Python语言中,os.getcwd()函数可以取得当前工作路径的字符串。