使用unittest的discover方法发现目录中子文件夹中的case

摘要:
第一种方法:testcase目录上代码:注释写的很详细,其逻辑很简单,就是先用os.walk()方法拿到所有的py文件名称,再用判断去除非testcase.py文件,添加进case_list列表,再遍历case_list得到单个文件名,然后用discover中的pattern匹配方式去匹配相应文件名的文件得到单个testcase,就可以拿到所有的用例了。

前言:开始用的时候都是把所有的test.py文件放在一个目录下,虽然对运行没什么影响,但是吧,总是不那么好看,且有时候文件名类似,要找好久,就想能不能再创建子文件夹进行分类一下,那又该如何使用discover方法去拿到所有用例呢?下面分享。

可能有人说可以用pytest框架,可以的,我可以用,但是我还想基于Unittest去解决试试。

第一种方法:

testcase目录

使用unittest的discover方法发现目录中子文件夹中的case第1张

上代码:

注释写的很详细,其逻辑很简单,就是先用os.walk()方法拿到所有的py文件名称,再用判断去除非testcase.py文件,添加进case_list列表,再遍历case_list得到单个文件名,然后用discover中的pattern匹配方式去匹配相应文件名的文件得到单个testcase,就可以拿到所有的用例了。

特别注意一点:要想拿到所有的testcase必须在每个文件夹中有一个__init__.py文件引导,否则无法获取。

# pro_path是工程目录,构造了一个case_pth路径
case_path = os.path.join(pro_path, "testcase")
        suit = unittest.TestSuite()
        case_list = []

        # 使用os.walk方法遍历得到所有文件名称filename的列表集合
        for dirpath, dirname, filename in os.walk(case_path):
            for file in filename:
                # 判断文件以.py结尾且不以__开始,为去除__init.py文件和.pyx后缀的文件
                if file.endswith(".py") and not file.startswith("__"):
                    # print(file)
                    case_list.append(file)

        # 得到有效的用例文件列表后传值给discover方法的pattern匹配方式,可拿到所有testcase
        # 此处注意,要想拿到所有的testcase必须在每个文件夹中有一个__init__.py文件引导,否则无法获取。
        for case in case_list:
            discover = unittest.defaultTestLoader.discover(start_dir=case_path, pattern=case)
            suit.addTest(discover)  

第二种方法:

用一个txt配置文件去记录所有的test.py文件,

使用unittest的discover方法发现目录中子文件夹中的case第2张

上代码:思路我就不讲解了,注释很清晰

caseListFile = os.path.join(pro_path, "caselist")
fb = open(caseListFile)
        # 逐行读取文件名信息
        for value in fb.readlines():
            data = str(value)
            # 过滤空格和#开头注释的文件名
            if data != '' and not data.startswith("#"):
                # 再添加进caseList列表中
                self.caseList.append(data.replace("
", ""))
        fb.close()
test_suite = unittest.TestSuite()
        # 遍历caseList列表
        for case in self.caseList:
            # 读取的文件名带了user路径,使用split进行分割,[-1]最后一个值
            case_name = case.split("/")[-1]
            print(case_name+".py")
            # 使用discover方法去寻找以case_name开头的文件(txt中并未带.py后缀)
            discover = unittest.defaultTestLoader.discover(self.caseFile, pattern=case_name + '.py', top_level_dir=None)
            suite_module.append(discover)

免责声明:文章转载自《使用unittest的discover方法发现目录中子文件夹中的case》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(八)golang--复杂类型之指针面向服务的架构SOA下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

用户home目录下的.gitconfig 和 库文件夹目录下的 .gitignore 示例

.gitconfig文件: [user] name = hzh email = 924948@qq.com [core] editor = vi quotepath = false # git config --global core.autocrlf true autocrlf = true...

react工程目录简介

首先我们可以看到底部一个 yarn.lock的文件,这个文件主要是项目依赖的安装包,他的一些版本号,会在这里做一些限制,这个文件不要动就好了。 readme.md,这个文件其实是项目的说明文件,他里面会有一些关于项目的说明,我们可以全部删除掉,自己用markdown的语言做一些相关的介绍 package.json,基本上每个脚手架工具都会有这个pack...

Linux项目部署

Linux 项目部署 Chmod 777 绝对路径  ——  修改文件夹权限 Linux 上传下载文件 rz  上传文件    在shell终端仿真器中输入命令  即可从弹出的对话框中选择本地磁盘上的文件,利用Zmodem上传到服务器当前路径下。 sz 下载文件 在shell终端仿真器中输入命令 即可利用Zmodem将文件下载到本地某目录下。 下载的文件...

org.eclipse.core.resources.bak文件导致MyEclipse每次关闭时无法保存文件

MyEclipse关闭时提示如下信息 Problems occurred while trying to save the state of the workbench. Internal Error Cannot set lower sequence number for root (previous: 16, new: 1). Location: D:...

使用cwRsync实现windows下文件定时同步

1.参考文献: 使用cwRsync实现windows下文件定时同步(备份) 文件同步工具CwRsync的使用方法及常用命令详解 2.背景: 当前的SCADA架构中,有1台Server,5台FE,还有1台Client。其架构如下图所示: 虽然叫法不同,但是他们的安装文件和配置文件是完全一样的。并且大多数情况下,也建议这些服务器上面的配置文件保持一致,这样只...

Makefile系列之三 : 变量

一、变量的基础变量在声明时需要给予初值,而在使用时,需要给在变量名前加上“$”符号,但最好用小括号“()”或是大括号“{}”把变量给包括起来。如果你要使用真实的“$”字符,那么你需要用“$$”来表示。二、变量中的变量在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来在用变量定义变量的值。1)使用“=”号,在“=”左侧是变...