『心善渊』Selenium3.0基础 — 40.单元测试框架unittest(五)

(五)测试套件

1、测试套件的作用

在我们实际工作,使用unittest框架会有两个问题:

  1. 我们知道测试用例的执行顺序是根据测试用例名称顺序执行的,在不改变用例名称的情况下,我们怎么来控制用例执行的顺序。
  2. 一个测试文件,我们直接执行该文件即可,但如果有多个测试文件,怎么实现多个测试文件一起执行行。

要解决上面两个问题,我们就要用到测试套件TestSuite

2、使用测试套件

(1)入门用法

用法:

  1. unittest.TestSuite():创建测试套件。

  2. addTest()addTests()方法是将测试用例添加到测试套件中。

  3. unittest.TextTextRunner():通过该类下面的run()方法来运行suite所组装的测试用例,suite测试套件为run()方法参数。

例如:将test_Demo1模块下的TestDmeo类下的test_case_01测试用例添加到测试套件中。

# 1.创建测试套件
suite = unittest.TestSuite()

# 2.向测试套件中添加测试用例
# 模块名.测试类名('测试用例名')
suite.addTest(test_Demo.TestDmeo('test_case_01'))

# 3.执行测试套件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)

示例:

# 1 导入unittest
import unittest

# 2 创建测试类
class TestDmeo(unittest.TestCase):

    # 3 编写test case
    def test_case_01(self):
        """测试用例1"""
        print("执行测试用例1")

    def test_case_02(self):
        """测试用例2"""
        print("执行测试用例2")

    def test_case_03(self):
        """测试用例3"""
        print("执行测试用例3")


if __name__ == '__main__':
    # 执行当前测试类中,以test开头的测试用例
    # unittest.main()

    # 1. 创建测试套件
    suite = unittest.TestSuite()
    # 2. 向测试套件中添加测试用例
    # 当前模块中的测试用例,可省略模块名(文件名)
    suite.addTest(TestDmeo('test_case_02'))
    suite.addTest(TestDmeo('test_case_03'))
    suite.addTest(TestDmeo('test_case_01'))
    # 3. 执行测试套件中的用例
    runner = unittest.TextTestRunner()
    runner.run(suite)

提示:向测试套件中添加测试用例的顺序,就是测试用例执行的顺序。(此时解决了第一个问题)

注意:

使用PyCharm执行上边代码,会按顺序执行全部测试用例,这是PyCharm问题。

使用命令行直接执行该Python文件,没有问题。

(2)根据不同的条件加载测试用例(了解)

提示:这种方式很少用,了解一下即可。都用下面(3)的方式。

unittest.TestLoader():根据不同的条件加载测试用例,其中有几个方法:

  1. unittest.TestLoader().loadTestsFromName(测试用例名)
  2. unittest.TestLoader().loadTestsFromNames(测试用例名的列表)
  3. unittest.TestLoader().loadTestsFromTestCase(测试类名)
  4. unittest.TestLoader().loadTestsFromModule(模块名)
  5. unittest.TestLoader().discover()

例如:将``test_demo2模块下的TestDmeo类下的test_case_01`测试用例添加到测试套件中。

测试用例名格式:文件名+类名+方法名,一级一级的。

示例:

# 1 导入unittest
import unittest

# 2 创建测试类
class TestDmeo(unittest.TestCase):

    # 3 编写test case
    def test_case_0001(self):
        """测试用例0001"""
        print("执行测试用例0001")

    def test_case_0002(self):
        """测试用例0002"""
        print("执行测试用例0002")

    def test_case_0003(self):
        """测试用例0003"""
        print("执行测试用例0003")


if __name__ == '__main__':
    # 1. 创建测试套件
    suite = unittest.TestSuite()

    # 2. 向测试套件中添加测试用例
    """
    # 2.1 loadTestsFromName
    # 提示:
        name参数是传入文件名,字符串格式
        格式:模块名.测试类名.测试用例名  
    """
    # suite_1 = unittest.TestLoader().loadTestsFromName('test_demo2.TestDmeo.test_case_01')

    """
    # 2.2 loadTestsFromNames
        参数是一个列表,列表中的元素格式同上
    """
    # suite_1 = unittest.TestLoader().loadTestsFromNames(
    #     ['test_demo2.TestDmeo.test_case_01','test_demo2.TestDmeo.test_case_02'])

    """
    # 2.3  loadTestsFromTestCase
        参数一个测试类名
        当前模块直接传如测试类名称即可            
    """
    suite_1 = unittest.TestLoader().loadTestsFromTestCase(TestDmeo)

    # 加入套件
    suite.addTest(suite_1)
    # 3. 执行测试套件中的用例
    runner = unittest.TextTestRunner()
    runner.run(suite)

(3)常用方式(推荐)

unittest.defaultTestLoader():通过该类下面的discover()方法可自动根据测试目录test_dir匹配查找测试用例文件,如test*.py,并将查找到的测试用例组装到测试套件中。

简单示例:

discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

测试套件示例:

  1. 创建test_case包用来存放测试用例。
  2. 以上面两个测试类做例子,把test_demo1test_demo2两个测试用例类文件放入test_case包中。
  3. 编写调用用例脚本run_case.py文件执行多个测试用例。

说明:

test_demo1test_demo2两个文件,就是上面(1)(2)的示例。

下面是run_case.py文件内容,需求是同时执行test_demo1test_demo2两个文件中的测试用例。

"""
1.学习目标
    run_case.py必须会写
2.操作步骤
    2.1 明确测试用例存放路径
    2.2 将要执行的用例添加到测试套件中
    2.3 执行测试套件中的用例
3.注意事项
    1.run_case.py文件需要放置在项目根目录下
    2.所有测试用例都写在test_caset文件夹中
    3.编写用例的py文件需要以test开头
"""
# 1.导入unittest
import unittest

# 2.获取测试用例存放路径---测试用例存放文件夹
case_path = "./test_case"

# 3.添加用例到测试套件中
"""
# 如果只添加一个文件,pattern就直接填写文件名
start_dir, 指定case目录
pattern='test*.py', 匹配文件规则,# 选择文件夹中的写test_开头的py文件
"""
discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py")  

# 4.执行测试套件中的用例
runner = unittest.TextTestRunner()
runner.run(discover)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335