Unittest加载执行用例的方法总结
前言
说到测试框架,unittest是我最先接触的自动化测试框架之一了, 而且也是用的时间最长的, unittest框架有很多方法加载用例,让我们针对不同的项目,不同项目的大小及用例的多少自己选择加载方式。今天我们就简单的说说几种加载方式。
方式1
简单的实例
import unittest
class LoadTest(unittest.TestCase):
def test_case_01(self):
self.assertEqual(1, 1)
def test_case_02(self):
self.assertEqual(2, 1)
if __name__ == '__main__':
suit = unittest.TestSuite()
suit.addTest(LoadTest('test_case_01'))
suit.addTest(LoadTest('test_case_02'))
runner = unittest.TextTestRunner()
runner.run(suit)
# 输出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Process finished with exit code 0
说明
首先我们需要创建一个测试套件suite,其次通过addTest方法添加用例,addTest的参数为单个用例, 比如实例中记载的是LoadTest测试类中的test_case_01 和 02, 我们就按照上述方式传递参数。如果加载运行用例的代码在另一个文件中,我们需要在此文件中导入测试类。
方式2
简单实例
import unittest
class LoadTest(unittest.TestCase):
def test_case_01(self):
self.assertEqual(1, 1)
def test_case_02(self):
self.assertEqual(2, 2)
if __name__ == '__main__':
suit = unittest.TestSuite()
case_list = [LoadTest('test_case_01'), LoadTest('test_case_02')]
suit.addTests(case_list)
runner = unittest.TextTestRunner()
runner.run(suit)
# 输出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Process finished with exit code 0
说明
方式2是通过同样的原理加载测试用例的,只不过是一次性加载多个,不需要多次调用addTest方法,我们只需要调用一次addTests方法,加载一个用例组成的序列,相比较而言,第二种比第一种稍微方便那么一点
方式3
简单实例
import unittest
class LoadTest(unittest.TestCase):
def test_case_01(self):
self.assertEqual(1, 1)
def test_case_02(self):
self.assertEqual(2, 2)
if __name__ == '__main__':
suit = unittest.TestSuite() # 测试套件
loader = unittest.TestLoader() # 用例加载器
test_class = loader.loadTestsFromTestCase(LoadTest) # 加载测试类
suit.addTest(test_class) # 测试类添加到测试套件中
runner = unittest.TextTestRunner() # 用例运行器
runner.run(suit) # 运行
# 输出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Process finished with exit code 0
说明
实例是通过创建一个加载器来加载测试用例,可以看到加载器需要加载一个测试类, 不需要像前两个方式那样,一个一个加载测试用例,但是如果一个模块中有多个测试类的情况,我们仍然需要编写多条加载代码 test_class = loader.loadTestsFromTestCase(LoadTest) # 加载测试类
方式4
简单实例
import unittest
class LoadTest(unittest.TestCase):
def test_case_01(self):
self.assertEqual(1, 1)
def test_case_02(self):
self.assertEqual(2, 2)
if __name__ == '__main__':
pass
import unittest
import sys
sys.path.append('.')
import unittest_tc_load if __name__ == '__main__':
suit = unittest.TestSuite() # 测试套件
loader = unittest.TestLoader() # 用例加载器
test_module = loader.loadTestsFromModule(unittest_tc_load) # 加载测试类
suit.addTest(test_module) # 测试类添加到测试套件中
runner = unittest.TextTestRunner() # 用例运行器
runner.run(suit) # 运行
说明
这个方式其实是和方式3一样的原理, 只不过这个方式是直接加载整个测试模块, 如果测试模块中含有多个测试类,都将被加载,这样批量添加测试会很方便,前提是我们需要导入我们测试模块
方式5
说明
方式5是直接通过在创建测试套件的时候直接把测试模块添加到测试套件中,看下面的代码
loader = unittest.TestLoader() # 用例加载器
test_modules = (loader.loadTestsFromModule(unittest_tc_load1), loader.loadTestsFromModule(unittest_tc_load2)) # 加载测试类
suit = unittest.TestSuite(tests=test_modules) # 测试套件
runner = unittest.TextTestRunner() # 用例运行器
runner.run(suit) # 运
unittest_tc_load1和unittest_tc_load2为两个测试模块,我们使用这种方式的时候需要先导入这两个模块
方式6
简单实例
import unittest
class LoadTest(unittest.TestCase):
def test_case_01(self):
self.assertEqual(1, 1)
def test_case_02(self):
self.assertEqual(2, 2)
if __name__ == '__main__':
suite = unittest.makeSuite(LoadTest)
runner = unittest.TextTestRunner()
runner.run(suite)
# 输出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Process finished with exit code 0
说明
方式6的方法同样只能加载一个测试类,但是相比前面几种方法,代码少了很多,同样,如果运行多个测试类仍然需要创建多个suite
方式7
简单实例
import unittest
class LoadTest(unittest.TestCase):
def test_case_01(self):
self.assertEqual(1, 1)
def test_case_02(self):
self.assertEqual(2, 2)
if __name__ == '__main__':
discover = unittest.defaultTestLoader.discover(start_dir='.', pattern='unittest*.py')
runner = unittest.TextTestRunner()
runner.run(discover)
# 输出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Process finished with exit code 0
说明
方式7通过defaultTestLoader.discover()方法来发现用例,我们可以看到第一个参数start_dir 表示用例的目录, pattern 表示匹配什么样的文件搜索测试用例,比较上面几种方法,个人认为这种方法是最灵活的,我们可以通过规范测试模块文件的命名,使用这种方式一次性加载所有的用例
总结
大概方法差不多就这些,其实还有很多其他加载方法, 比如通过TestLoader方法加载用例,我们可以看到他其他加载用例的方法。

最后呢还是需要根据个人实际中的一个需求选择不同的方法, 正确的方法往往会事半功倍。
Unittest加载执行用例的方法总结的更多相关文章
- windows 下加载执行hta文件的方法
首先编写这么一个hta的文件: <html> <head> <script> s = new ActiveXObject("WScript.Shell&q ...
- 【Spring源码分析】非懒加载的单例Bean初始化过程(上篇)
代码入口 上文[Spring源码分析]Bean加载流程概览,比较详细地分析了Spring上下文加载的代码入口,并且在AbstractApplicationContext的refresh方法中,点出了f ...
- 【Spring源码分析】非懒加载的单例Bean初始化过程(下篇)
doCreateBean方法 上文[Spring源码分析]非懒加载的单例Bean初始化过程(上篇),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下 ...
- 【Spring源码分析】非懒加载的单例Bean初始化前后的一些操作
前言 之前两篇文章[Spring源码分析]非懒加载的单例Bean初始化过程(上篇)和[Spring源码分析]非懒加载的单例Bean初始化过程(下篇)比较详细地分析了非懒加载的单例Bean的初始化过程, ...
- Spring源码分析:非懒加载的单例Bean初始化前后的一些操作
之前两篇文章Spring源码分析:非懒加载的单例Bean初始化过程(上)和Spring源码分析:非懒加载的单例Bean初始化过程(下)比较详细地分析了非懒加载的单例Bean的初始化过程,整个流程始于A ...
- Spring源码分析:非懒加载的单例Bean初始化过程(下)
上文Spring源码分析:非懒加载的单例Bean初始化过程(上),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下AbstractAutowireC ...
- Spring源码分析:非懒加载的单例Bean初始化过程(上)
上文[Spring源码分析]Bean加载流程概览,比较详细地分析了Spring上下文加载的代码入口,并且在AbstractApplicationContext的refresh方法中,点出了finish ...
- js 动态加载事件的几种方法总结
本篇文章主要是对js 动态加载事件的几种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 有些时候需要动态加载javascript事件的一些方法往往我们需要在 JS 中动态添 ...
- Java的cmd配置(也即Java的JDK配置及相关常用命令)——找不到或无法加载主类 的解决方法
Java的cmd配置(也即Java的JDK配置及相关常用命令) ——找不到或无法加载主类 的解决方法 这段时间一直纠结于cmd下Java无法编译运行的问题.主要问题描述如下: javac 命令可以正 ...
随机推荐
- C#根据规则生成6位随机码
#region 获得6位优惠码 zhy public static string CreatePromoCode(string code) { if (code == "") { ...
- ACdream区域赛指导赛之手速赛系列(7)
A -Dragon Maze Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) Submi ...
- 洛谷 P1498 南蛮图腾 —— 模拟
题目:https://www.luogu.org/problemnew/show/P1498 大约一年前该做的题...现在来填一下坑: 然而不怎么会模拟!还滚去看TJ了: 就是翻倍复制: \ 这个符号 ...
- WP处理事件
(1).Launching事件 Launching(进入)事件是每一个第三方应用在第一次运行时都必须执行的事件,它主要负责应用程序的初始化.这个事件与Closing事件是对应的,一个运行正常的应用程序 ...
- Magnetic Storms
http://acm.timus.ru/problem.aspx?space=1&num=1126 简单的线段树求区间最值 #include <stdio.h> #include ...
- python django简单操作
准备: pip3 install django==1.10.3 cmd django-admin startproject guest 创建一个guest的项目 cd guest manage. ...
- dialog的各类显示方法
图1效果:该效果是当按返回按钮时弹出一个提示,来确保无误操作,采用常见的对话框样式. 代码: 创建对话框方法dialog() protected void dialog() { AlertDialo ...
- UNIX环境高级编程--7
进程环境main函数: C程序总是从main函数开始执行.main函数原型是: int main(int argc, char *argv[]); 当内核执行C程序时(使用一个exe ...
- Java_注解之二
在上一次的注解案例里面配置注解的同时,也添加了一对多(@OneToMany)的关系在里面. 本次将补充上次的缺失:其他三种关联方式的配置. 为了简化配置的复杂度 在此案例中Emp和Dept并不是唯 ...
- [ HAOI 2010 ] 最长公共子序列
\(\\\) \(Description\) 求两个长度\(\le5000\)的大写字母串的\(LCS\)长度及个数,定义两\(LCS\)中某一字符在两序列出现位置有一处不同就视为不同. \(\\\) ...