前言

  说到测试框架,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加载执行用例的方法总结的更多相关文章

  1. windows 下加载执行hta文件的方法

    首先编写这么一个hta的文件: <html> <head> <script> s = new ActiveXObject("WScript.Shell&q ...

  2. 【Spring源码分析】非懒加载的单例Bean初始化过程(上篇)

    代码入口 上文[Spring源码分析]Bean加载流程概览,比较详细地分析了Spring上下文加载的代码入口,并且在AbstractApplicationContext的refresh方法中,点出了f ...

  3. 【Spring源码分析】非懒加载的单例Bean初始化过程(下篇)

    doCreateBean方法 上文[Spring源码分析]非懒加载的单例Bean初始化过程(上篇),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下 ...

  4. 【Spring源码分析】非懒加载的单例Bean初始化前后的一些操作

    前言 之前两篇文章[Spring源码分析]非懒加载的单例Bean初始化过程(上篇)和[Spring源码分析]非懒加载的单例Bean初始化过程(下篇)比较详细地分析了非懒加载的单例Bean的初始化过程, ...

  5. Spring源码分析:非懒加载的单例Bean初始化前后的一些操作

    之前两篇文章Spring源码分析:非懒加载的单例Bean初始化过程(上)和Spring源码分析:非懒加载的单例Bean初始化过程(下)比较详细地分析了非懒加载的单例Bean的初始化过程,整个流程始于A ...

  6. Spring源码分析:非懒加载的单例Bean初始化过程(下)

    上文Spring源码分析:非懒加载的单例Bean初始化过程(上),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下AbstractAutowireC ...

  7. Spring源码分析:非懒加载的单例Bean初始化过程(上)

    上文[Spring源码分析]Bean加载流程概览,比较详细地分析了Spring上下文加载的代码入口,并且在AbstractApplicationContext的refresh方法中,点出了finish ...

  8. js 动态加载事件的几种方法总结

    本篇文章主要是对js 动态加载事件的几种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助   有些时候需要动态加载javascript事件的一些方法往往我们需要在 JS 中动态添 ...

  9. Java的cmd配置(也即Java的JDK配置及相关常用命令)——找不到或无法加载主类 的解决方法

    Java的cmd配置(也即Java的JDK配置及相关常用命令) ——找不到或无法加载主类  的解决方法 这段时间一直纠结于cmd下Java无法编译运行的问题.主要问题描述如下: javac 命令可以正 ...

随机推荐

  1. [转] CV Datasets on the web

    转自:CVPapers This material is presented to ensure timely dissemination of scholarly and technical wor ...

  2. linux下使用script和scriptreplay对命令行操作进行录像

    转自:linux下用script和scriptreplay对命令行操作录像 在Linux中可以使用script命令来记录命令行的操作过程,并使用scriptreplay命令对命令操作进行回放,操作步骤 ...

  3. 异步POST请求解析JSON

    异步POST请求解析JSON 一.创建URL NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/order ...

  4. android TabHost控件

    (一)TabHost控件,默认是在顶部显示的 TabHost是盛放Tab按钮和Tab内容的首要容器, TabWidget(tabs标签)用于选择页面,是指一组包含文本或图标的 ,FrameLayout ...

  5. FileZilla文件下载的目录

    连接上ftp服务器之后,在remote site那边邮件选中了目录下载文件,但是下载完成之后. 不知道下载到哪里了,用search everything软件搜了一下,发现就在D盘的根目录. 所以,下载 ...

  6. java web中路径问题。

    转自:http://blog.csdn.net/liang5630/article/details/38474543 如有侵权,请及时联系本人及时删除 在java web种经常出现 404找不到网页的 ...

  7. [BZOJ 1660] Bad Hair Day

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1660 [算法] Sprease Table + 二分 时间复杂度 : O(NlogN ...

  8. tyvj2054 四叶草魔杖——连通块 & 状压DP

    题目:http://www.joyoi.cn/problem/tyvj-2054 把点分成几个连通块,和为0的几个点放在一块,在块内跑最小生成树作为这个块的代价: 然后状压DP,组成全集的最小代价就是 ...

  9. sizeof中的表达式不执行

    char a = 255;      printf("%d\n",a);    printf("%d\n",sizeof(++a));      printf( ...

  10. Linux搭建tomcat文件服务器

    Linux搭建tomcat文件服务器 Linux下配置Tomcat服务器和Windows下其实差不多,可以去官网下载安装包释放或者在线下载,只是当时下载的windows.zip文件,现在下载.tar. ...