python利用unittest测试框架组织测试用例的5种方法

利用unittest测试框架可以编写测试用例,执行方式分两大类:利用main方法和利用testsuite,其中利用测试套件来组织测试用例可以有4种写法。

在此之前,先了解几个概念

  • TestCase:所有测试用例的基本类,给一个测试方法的名字,就会返回一个测试用例实例;
  • TestSuite:组织测试用例的实例,支持测试用例的添加和删除,最终将传递给  testRunner进行测试执行;
  • TextTestRunner:进行测试用例执行的实例,其中Text的意思是以文本形式显示测试结果。测试的结果会保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息;
  • TestLoader:用来加载TestCase到TestSuite中的,其中有几个  loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例;
  • defaultTestLoader.discover:将discover方法筛选出来的用例,循环添加到测试套件中,打印出的用例信息会递增

方法一:通过unittest.main()来执行测试用例的方式

import unittest

class TestStringMethods(unittest.TestCase):

    def setUp(self):
        unittest.TestCase.setUp(self)

    def tearDown(self):
        unittest.TestCase.tearDown(self)

    def test_upper(self):
        self.assertEqual(‘foo‘.upper(), ‘FOO‘)

    def test_isupper(self):
        self.assertTrue(‘FOO‘.isupper())
        self.assertFalse(‘Foo‘.isupper())

    def test_split(self):
        s = ‘hello world‘
        self.assertEqual(s.split(), [‘hello‘,‘world‘])
        with self.assertRaises(TypeError):
            s.split(2)

if __name__ == "__main__":
    #import sys;sys.argv = [‘‘, ‘Test.testName‘]
     unittest.main()

unittest.main()会去查找所有以test开头的方法,并把它们当做一个个测试用例

方法二:用测试套件

import unittest

class TestStringMethods(unittest.TestCase):

    def setUp(self):
        unittest.TestCase.setUp(self)

    def tearDown(self):
        unittest.TestCase.tearDown(self)

    def test_upper(self):
        self.assertEqual(‘foo‘.upper(), ‘FOO‘)

    def test_isupper(self):
        self.assertTrue(‘FOO‘.isupper())
        self.assertFalse(‘Foo‘.isupper())

    def test_split(self):
        s = ‘hello world‘
        self.assertEqual(s.split(), [‘hello‘,‘world‘])
        with self.assertRaises(TypeError):
            s.split(2)

def suite():

    suite = unittest.TestSuite()
    suite.addTest(TestStringMethods(‘test_upper‘))
    suite.addTest(TestStringMethods(‘test_isupper‘))
    unittest.TextTestRunner(verbosity=2).run(suite)

if __name__ == "__main__":

    suite()
    #import sys;sys.argv = [‘‘, ‘Test.testName‘]
#     unittest.main()

方法三:用TestLoader

import unittest
class TestCase1(unittest.TestCase):
    #def setUp(self):
    #def tearDown(self):
    def testCase1(self):
        print ‘aaa‘
    def testCase2(self):
        print ‘bbb‘

class TestCase2(unittest.TestCase):
    #def setUp(self):
    #def tearDown(self):
    def testCase1(self):
        print ‘aaa1‘
    def testCase2(self):
        print ‘bbb1‘

if __name__ == "__main__":
    #此用法可以同时测试多个类
    suite1 = unittest.TestLoader().loadTestsFromTestCase(TestCase1)
    suite2 = unittest.TestLoader().loadTestsFromTestCase(TestCase2)
    suite = unittest.TestSuite([suite1, suite2])
    unittest.TextTestRunner(verbosity=2).run(suite)

方法四:测试套件的一种变性,和方法二差不多

import unittest

class TestStringMethods(unittest.TestCase):

    def setUp(self):
        unittest.TestCase.setUp(self)

    def tearDown(self):
        unittest.TestCase.tearDown(self)

    def test_upper(self):
        self.assertEqual(‘foo‘.upper(), ‘FOO‘)

    def test_isupper(self):
        self.assertTrue(‘FOO‘.isupper())
        self.assertFalse(‘Foo‘.isupper())

    def test_split(self):
        s = ‘hello world‘
        self.assertEqual(s.split(), [‘hello‘,‘world‘])
        with self.assertRaises(TypeError):
            s.split(2)

def suite():

     tests = [‘test_upper‘,‘test_isupper‘]
     suite = unittest.TestSuite(map(TestStringMethods,tests))
     unittest.TextTestRunner(verbosity=2).run(suite)

if __name__ == "__main__":

    suite()
    #import sys;sys.argv = [‘‘, ‘Test.testName‘]
#     unittest.main()

方法五:用discover

import unittest

class TestStringMethods(unittest.TestCase):

    def setUp(self):
        unittest.TestCase.setUp(self)

    def tearDown(self):
        unittest.TestCase.tearDown(self)

    def test_upper(self):
        self.assertEqual(‘foo‘.upper(), ‘FOO‘)

    def test_isupper(self):
        self.assertTrue(‘FOO‘.isupper())
        self.assertFalse(‘Foo‘.isupper())

    def test_split(self):
        s = ‘hello world‘
        self.assertEqual(s.split(), [‘hello‘,‘world‘])
        with self.assertRaises(TypeError):
            s.split(2)

def suite():

     suite=unittest.TestSuite()
     discover=unittest.defaultTestLoader.discover(casepath, pattern=‘test_*.py‘, top_level_dir=None)
     #将discover方法筛选出来的用例,循环添加到测试套件中,打印出的用例信息会递增
     for test_case in discover:
             suite.addTests(test_case)
     print(suite)
     return suite

if __name__ == "__main__":

    all_test_cases = suite()
    unittest.TextTestRunner().run(all_test_cases)
    #import sys;sys.argv = [‘‘, ‘Test.testName‘]
#     unittest.main()

原文地址:https://www.cnblogs.com/mgzc-1508873480/p/8280451.html

时间: 2024-10-07 02:02:00

python利用unittest测试框架组织测试用例的5种方法的相关文章

python+selenium+unittest测试框架3-项目构建和发送邮件

项目构建和发送邮件 一.项目构建 1.建立项目chen 打开pycharm左上角File>New Project,在Location输入testing项目所在文件夹D:\chen,创建后选择Opin in current window. 2.创建子文件夹 PS:创建文件夹,一定要选Python Package的方式创建. 3.创建测试脚本 4.创建runalltest.py PS:在runalltest.py这个脚本里面写主函数,控制执行所有的用例. 5.下载生成测试报告的源码 import H

python+selenium+unittest测试框架2-装饰器@classmethod

装饰器@classmethod 一.装饰器@classmethod 多个用例可能需要多次打开浏览器,装饰器@classmethod只打开一次浏览器.classmethod是python里的类方法,@是修饰符号. 1.setUpClass(): @classmethod def setUpClass(cls): 2.tearDownClass(): @classmethod def tearDownClass(cls): 示例: from selenium import webdriver fro

python+selenium+unittest测试框架4-邮件发送最新测试报告

邮件发送最新测试报告 示例: import HTMLTestRunner import unittest import os import time import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart def allcase(): '''加载测试用例''' discover = unittest.defaultTestLoader.discover(c

Python3-unittest测试框架之测试用例类

unittest测试框架之测试用例类 自己定义的类只要继承unittest中的TestCase,那么这个类就是一个测试用例类 测试用例类中,以test开头的方法就是一条测试用例 用例执行是否通过的评判标准-->>断言异常 先准备一个简单功能函数测试两数相加 def sum(a, b): return a + b 一.测试用例类(自定义的测试用例类要继承unittest中的TestCase) class SumTestCase(unittest.TestCase): pass 二.测试用例(以t

Python接口测试实战3(下)- unittest测试框架

如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战2 - 使用Python发送请求 Python接口测试实战3(上)- Python操作数据库 Python接口测试实战3(下)- unittest测试框架 Python接口测试实战4(上) - 接口测试框架实战 Python接口测试实战4(下) - 框架完善:用例基类,用例标签,重新运行上次失败用例

Python 下的unittest测试框架

unittest测试框架,直接上图吧: data:数据:主要格式为CSV:读取方式:csv.reade: public:封装的模块:通用的模块单独封装,所需参数设置为变量: testcase:测试用例:使用unittest框架编写测试用例: report:测试报告:保存测试报告,调用封装好的runcases.py,其中加入时间和HTMLTestRunner生成的带时间的测试报告; run_tests.py:执行测试用例:调用封装好的runcases.py执行用例: mail:发送邮件:封装好发送

selenium一个完整的unittest测试框架格式(单线程,非测试报告)

我在工作中碰到过同事写了些web自动化测试的脚本,有次我问他使用的是什么测试框架, 他居然说不知道.这位同事其实写selenium自动化测试也有些时间了.当我看了他的脚本 不出意外,他使用的就是unittest框架,哈哈.所以我觉得有些同学虽然会做相关东西, 但其实并不知道自己所掌握的东西是什么. 下面呢,我就结合自己写的脚本分析下一个完成的unittest测试框架的包括的内容. 图中我已经写的很详细拉.想交流的可以加QQ群:610845268

用JavaScript刷新框架子页面的七种方法

下面以三个页面分别命名为framedemo.html,top.html,button.html为例来具体说明如何做. 其中framedemo.html由上下两个页面组成,代码如下: < !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> < HTML> < HEAD> < TITLE> frameDemo < /TITLE> < /HEAD> 

python利用unittest进行测试用例执行的几种方式

利用python进行测试时,测试用例的加载方式有2种: 一种是通过unittest.main()来启动所需测试的测试模块:  一种是添加到testsuite集合中再加载所有的被测试对象,而testsuit里存放的就是所需测试的用例,下面分别列出3种方法的具体使用方式:1.通过unittest.main()来执行测试用例的方式: import unittest class UCTestCase(unittest.TestCase):    def setUp(self):        #测试前需