精华内容
下载资源
问答
  • Unittest

    2021-01-07 13:15:54
    <div><p>unittest is now useful from the CL as well as in the browser. There are two classes: - <code>unittest.TestCase</code> which you can inherit from as in the usual use of unit test - <code>...
  • unittest

    2021-04-11 23:36:48
    python自带测试框架 unittest 的简单介绍和使用

    1.单元测试 是指对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类,一般是开发来做的 。

    2.unittest框架用于单元测试,接口测试和UI测试,是python自带的测试框架。

    官方文档 : https://docs.python.org/zh-cn/3.7/library/unittest.html

    3.unittest中最核心的四个要素

    • test case :测试用例。unittest中提供了一个基本类TestCase,可以用来创建新的测试用例,一个TestCase的实例就是一个测试用例。
    • test suite : 测试套件。是一系列的测试用例,或测试套件,或两者皆有。它用于归档需要一起执行的测试。
    • test fixure :测试脚手架。用于测试用例环境的搭建和销毁,比如创建一个临时的数据库或者启动一个服务器进程。
    • test runner : 测试运行器。用来执行和输出测试结果的。可以用图形或者文本接口把返回的测试结果展示出来。

    4.断言 :让程序代替人为判断测试程序执行结果是否符合预期结果的过程 。

    断言方法 断言描述
    assertTrue(expr,msg=None) 验证expr是true,如果为false,则fail
    assertFalse(expr,msg=None) 验证expr是false,如果为true,则fail
    assertEqual(expected,actual,msg=None) 验证expected==actual,不等则fail
    assertNotEqual(first,second,msg=None) 验证first!=second,相等则fail
    assertIsNone(obj,msg=None) 验证obj是None,不是则fail
    assertIsNotNone(obj,msg=None) 验证obj不是None,是则fail
    assertIn(member,container,msg=None) 验证是否member in container
    assertNotIn(member,container,msg=None) 验证是否member not in container

    5.简单样例1

    import unittest
    
    class TestStringMethod(unittest.TestCase):
        def test_upper(self):
            self.assertTrue("foo".upper(),"FOO")
    
    if __name__=="__main__":
        unittest.main()
    
    • 测试样例默认继承unittest.TestCase。

    • 方法名必须以test开头, 这个命名约定告诉测试运行者类的哪些方法表示测试。

    • unittest.main() 提供了一个测试脚本的命令行接口。当在命令行运行该测试脚本,上文的脚本生成如以下格式的输出:
      在这里插入图片描述

    • main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行他们。执行方法的默认顺序是:根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z 。

    • 通过 setUp() 和 tearDown() 方法,可以设置测试开始前与完成后需要执行的指令。

    • 通过unittest类调用分析,可将框架的工作流程概况如下:

      编写TestCase,由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite, 最后将运行的结果保存在TextTestResult中。

    6.简单样例2

    import unittest
    
    class TestCase1(unittest.TestCase):
        def testCase1(self):
            print("one")
    
        def testCase2(self):
            print("two")
    
    class TestCase2(unittest.TestCase):
        def testCase1(self):
            print("three")
    
        def testCase2(self):
            print("four")
    
    if __name__ == '__main__':
        suite1 = unittest.TestLoader().loadTestsFromTestCase(TestCase1)
        suite2 = unittest.TestLoader().loadTestsFromTestCase(TestCase2)
        suite = unittest.TestSuite([suite1,suite2])#将两个测试用例添加进测试套件中
        unittest.TextTestRunner(verbosity=2).run(suite)#执行测试套件
    

    运行结果如图:
    在这里插入图片描述

    展开全文
  • py_unittest_ex 此仓库用于python unittest 参考: :
  • python unittest

    2021-04-19 10:04:06
    import unittest 测试类必须继承unittest.TestCcase 测试方法必须以“test_”开头 uinttest测试函数命名:一定是小写的test开头 执行顺序,test_后按ACSII码值顺序执行 unittest执行: 方法一:执行所有 unittest....

    官方文档:

    英文文档:
    https://docs.python.org/3/library/unittest.html
    import unittest

    中文文档 :
    https://docs.python.org/zh-cn/3.7/library/unittest.html

    命名规则

    测试类必须继承unittest.TestCcase
    测试方法必须以“test_”开头
    uinttest测试函数命名:一定是小写的test开头

    执行顺序:

    test_后按,默认根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z

    断言

    Method Checks that New in
    assertEqual(a, b) a == b
    assertNotEqual(a, b) a != b
    assertTrue(x) bool(x) is True
    assertFalse(x) bool(x) is False
    assertIs(a, b) a is b 3.1
    assertIsNot(a, b) a is not b 3.1
    assertIsNone(x) x is None 3.1
    assertIsNotNone(x) x is not None 3.1
    assertIn(a, b) a in b 3.1
    assertNotIn(a, b) a not in b 3.1
    assertIsInstance(a, b) isinstance(a, b) 3.2
    assertNotIsInstance(a, b) not isinstance(a, b) 3.2
    assertMultiLineEqual(a, b) strings 3.1
    assertSequenceEqual(a, b) sequences 3.1
    assertListEqual(a, b) lists 3.1
    assertTupleEqual(a, b) tuples 3.1
    assertSetEqual(a, b) sets or frozensets 3.1
    assertDictEqual(a, b) dicts 3.1
    assertAlmostEqual(a, b) round(a-b, 7) == 0
    assertNotAlmostEqual(a, b) round(a-b, 7) != 0
    assertGreater(a, b) a > b 3.1
    assertGreaterEqual(a, b) a >= b 3.1
    assertLess(a, b) a < b 3.1
    assertLessEqual(a, b) a <= b 3.1
    assertRegex(s, r) r.search(s) 3.1
    assertNotRegex(s, r) not r.search(s) 3.2
    assertCountEqual(a, b) a and b have the same elements in the same number, regardless of their order. 3.2
    assertRaises(exc, fun, *args, **kwds) fun(*args, **kwds) raises exc
    assertRaisesRegex(exc, r, fun, *args, **kwds) fun(*args, **kwds) raises exc and the message matches regex r 3.1
    assertWarns(warn, fun, *args, **kwds) fun(*args, **kwds) raises warn 3.2
    assertWarnsRegex(warn, r, fun, *args, **kwds) fun(*args, **kwds) raises warn and the message matches regex r 3.2
    assertLogs(logger, level) The with block logs on logger with minimum level 3.4

    unittest执行:

    方法一:执行所有

    unittest.main()
    

    方法二:执行测试方法

    suite = unittest.TestSuite()#创建测试套件
    suite.addTest(TestMethod("test_01"))
    suite.addTest(TestMethod("test_02"))
    unittest.TextTestRunner().run(suite)
    

    方法三:执行测试类

    suite1 = unittest.TestLoader().loadTestsFromTestCase(TestCase1)
    suite2 = unittest.TestLoader().loadTestsFromTestCase(TestCase2)
    suite = unittest.TestSuite([suite1,suite2])
    unittest.TextTestRunner(verbosity=2).run(suite)
    

    方法四:匹配某个目录想所有以test开头的py文件,执行这些文件下所有用例

    test_dir = "./test_case"
    discover = unittest.defaultTestLoader.discover(test_dir,pattern="test*.py")
    

    discover可以一次调用多个脚本
    test_dir被测试脚本的路径
    pattern 脚本名称匹配规则

    用例执行过程:

    在这里插入图片描述

    测试报告

    python3:
    https://github.com/huilansame/HTMLTestRunner_PY3
    python2版:
    http://tungwaiyip.info/software/HTMLTestRunner.html

    在这里插入图片描述

    demo

    import time
    import unittest
    from HTMLTestRunner_PY3.HTMLTestRunner import HTMLTestRunner
    
    #被测函数
    def add(a,b):
        return a+b
    
    class TestDemo(unittest.TestCase):
        def setUp(self):
             print("每个测试用例之前执行".center(20,"*"))
    
        def tearDown(self):
            print("每个测试用例之后执行".center(20,"*"))
    
        @classmethod
        def setUpClass(cls):
            print("所有测试用例之前执行".center(20,"*"))
    
        @classmethod
        def tearDownClass(cls):
            print("所有测试用例之后执行".center(20,"*"))
    
    
        def test_add_1(self):
            a = 1
            b = 2
            expect = 3
            res = add(a,b)
            print("{}+{}={}".format(a,b,expect))
            self.assertEqual(res,expect)
    
        def test_add_2(self):
            a = 1
            b = 2
            expect = 4
            res = add(a,b)
            print("{}+{}={}".format(a, b, expect))
            self.assertEqual(res,expect)
    
    
    if __name__ == '__main__':
        # suite = unittest.TestSuite()  # 创建测试套件
        # suite.addTest(TestDemo("test_add_1"))
        # suite.addTest(TestDemo("test_add_2"))
        # unittest.TextTestRunner().run(suite)
    
        suite1 = unittest.TestLoader().loadTestsFromTestCase(TestDemo)
        suite = unittest.TestSuite([suite1,])
        reportfile = './report/' + time.strftime('%Y-%m-%d %H_%M_%S', time.localtime(time.time())) + 'HTMLreport.html'
        with open(reportfile, 'xb') as fp:
            runner = HTMLTestRunner(fp, title='测试报告', description='正常功能用例测试情况,执行人:XX', verbosity=2)
            runner.run(suite)
    
    
    展开全文
  • unittest详解

    2021-04-12 16:04:41
    unittest是python测试单元,类似于JUint框架。 Testcase: 一个Testcase就是一个测试用例。使用时, 1.首先编写一个类(class),继承unittest中Testcase。 2.编写测试类中定义测试方法,每个测试必须以test开头...

    unittest是python测试单元,类似于JUint框架。

    Testcase:
    一个Testcase就是一个测试用例。使用时,
    1.首先编写一个类(class),继承unittest中Testcase。
    2.编写测试类中定义测试方法,每个测试必须以test开头(可以采用test1或test_1),且没有其他参数输入。
    3.执行unittest.main()
    如下所示:

    import unittest
    
    def div(a,b):
        return a/b
    
    class myunittest(unittest.TestCase):
        def test1(self):
            self.assertEqual(div(1,1),1)
    
    if __name__ == '__main__':
        unittest.main()
    
    

    常用模块:

    序号 断言方法 断言描述
    1 assertEqual(arg1, arg2, msg=None) 验证arg1=arg2,不等则fail
    2 assertNotEqual(arg1, arg2, msg=None) 验证arg1 != arg2, 相等则fail
    3 assertTrue(expr, msg=None) 验证expr是true,如果为false,则fail
    4 assertFalse(expr,msg=None) 验证expr是false,如果为true,则fail
    5 assertIs(arg1, arg2, msg=None) 验证arg1、arg2是同一个对象,不是则fail
    6 assertIsNot(arg1, arg2, msg=None) 验证arg1、arg2不是同一个对象,是则fail
    7 assertIsNone(expr, msg=None) 验证expr是None,不是则fail
    8 assertIsNotNone(expr, msg=None) 验证expr不是None,是则fail
    9 assertIn(arg1, arg2, msg=None) 验证arg1是arg2的子串,不是则fail
    10 assertNotIn(arg1, arg2, msg=None) 验证arg1不是arg2的子串,是则fail
    11 assertIsInstance(obj, cls, msg=None) 验证obj是cls的实例,不是则fail
    12 assertNotIsInstance(obj, cls, msg=None) 验证obj不是cls的实例,是则fail

    示例:

    import unittest
    
    def div(a,b):
        return a/b
    
    class myunittest(unittest.TestCase):
        def test1(self):
            #assertEqual,返回True
            self.assertEqual(div(1,1),1)
    
        def test2(self):
            #assertNotEqual,返回F
            self.assertNotEqual(div(1,1),1)
    
        def test3(self):
            #assertTrue,返回True
            a = "abc"
            self.assertTrue(a == "abc")
    
        def test4(self):
            #assertFalse,返回F
            a = "abc"
            self.assertFalse(a == "abc")
    
        def test5(self):
            #assertIs,返回T
            a = "abc"
            b = "abc"
            self.assertIs(a, b)
    
        def test6(self):
            #assertIsNot,返回T
            a = "abc"
            b = "abc"
            self.assertIsNot(a, b)
    
        def test7(self):
            #assertIsNone,返回F
            a = None
            self.assertIsNone(a)
    
        def test8(self):
            #assertIsNotNone,返回T
            a = None
            self.assertIsNotNone(a)
    
        def test9(self):
            #assertIn,返回T
            a = "hello"
            b = "hello world"
            self.assertIn(a,b)
    
        def test10(self):
            #assertNotIn,返回F
            a = "hello"
            b = "hello world"
            self.assertNotIn(a,b)
    
    if __name__ == '__main__':
        unittest.main()
    
    
    展开全文
  • unittest总结

    2020-07-09 10:54:13
    unittest单元测试框架总结 unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试...

    转载自:https://www.cnblogs.com/yufeihlf/p/5707929.html

    unittest单元测试框架总结
    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。今天笔者就总结下如何使用unittest单元测试框架来进行WEB自动化测试。

    目录

    一、unittest模块的各个属性说明

    二、使用unittest框架编写测试用例思路

    三、使用unittest框架编写测试用例实例

    一、unittest模块的各个属性说明

    点击返回目录

    先来聊一聊unittest模块的各个属性,所谓知己知彼方能百战百胜,了解unittest的各个属性,对于后续编写用例有很大的帮助。
    

    1.unittest的属性如下:

    [‘BaseTestSuite’, ‘FunctionTestCase’, ‘SkipTest’, ‘TestCase’, ‘TestLoader’, ‘TestProgram’, ‘TestResult’, ‘TestSuite’, ‘TextTestResult’, ‘TextTestRunner’, ‘_TextTestResult’, ‘all’, ‘builtins’, ‘doc’, ‘file’, ‘name’, ‘package’, ‘path’, ‘__unittest’, ‘case’, ‘defaultTestLoader’, ‘expectedFailure’, ‘findTestCases’, ‘getTestCaseNames’, ‘installHandler’, ‘loader’, ‘main’, ‘makeSuite’, ‘registerResult’, ‘removeHandler’, ‘removeResult’, ‘result’, ‘runner’, ‘signals’, ‘skip’, ‘skipIf’, ‘skipUnless’, ‘suite’, ‘util’]

    说明:

    unittest.TestCase:TestCase类,所有测试用例类继承的基本类。

    class BaiduTest(unittest.TestCase):
    unittest.main():使用她可以方便的将一个单元测试模块变为可直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行他们。执行方法的默认顺序是:根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行。

    unittest.TestSuite():unittest框架的TestSuite()类是用来创建测试套件的。

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

    unittest.defaultTestLoader(): defaultTestLoader()类,通过该类下面的discover()方法可自动更具测试目录start_dir匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover。用法如下:

    discover=unittest.defaultTestLoader.discover(test_dir, pattern=‘test_*.py’)
    unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。

    @unittest.skip(reason): skip(reason)装饰器:无条件跳过装饰的测试,并说明跳过测试的原因。

    @unittest.skipIf(reason): skipIf(condition,reason)装饰器:条件为真时,跳过装饰的测试,并说明跳过测试的原因。

    @unittest.skipUnless(reason): skipUnless(condition,reason)装饰器:条件为假时,跳过装饰的测试,并说明跳过测试的原因。

    @unittest.expectedFailure(): expectedFailure()测试标记为失败。

    2.TestCase类的属性如下:

    [‘call’, ‘class’, ‘delattr’, ‘dict’, ‘doc’, ‘eq’, ‘format’, ‘getattribute’, ‘hash’, ‘init’, ‘module’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘setattr’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘weakref’, ‘_addSkip’, ‘_baseAssertEqual’, ‘_classSetupFailed’, ‘_deprecate’, ‘_diffThreshold’, ‘_formatMessage’, ‘_getAssertEqualityFunc’, ‘truncateMessage’, ‘addCleanup’, ‘addTypeEqualityFunc’, ‘assertAlmostEqual’, ‘assertAlmostEquals’, ‘assertDictContainsSubset’, ‘assertDictEqual’, ‘assertEqual’, ‘assertEquals’, ‘assertFalse’, ‘assertGreater’, ‘assertGreaterEqual’, ‘assertIn’, ‘assertIs’, ‘assertIsInstance’, ‘assertIsNone’, ‘assertIsNot’, ‘assertIsNotNone’, ‘assertItemsEqual’, ‘assertLess’, ‘assertLessEqual’, ‘assertListEqual’, ‘assertMultiLineEqual’, ‘assertNotAlmostEqual’, ‘assertNotAlmostEquals’, ‘assertNotEqual’, ‘assertNotEquals’, ‘assertNotIn’, ‘assertNotIsInstance’, ‘assertNotRegexpMatches’, ‘assertRaises’, ‘assertRaisesRegexp’, ‘assertRegexpMatches’, ‘assertSequenceEqual’, ‘assertSetEqual’, ‘assertTrue’, ‘assertTupleEqual’, 'assert’, ‘countTestCases’, ‘debug’, ‘defaultTestResult’, ‘doCleanups’, ‘fail’, ‘failIf’, ‘failIfAlmostEqual’, ‘failIfEqual’, ‘failUnless’, ‘failUnlessAlmostEqual’, ‘failUnlessEqual’, ‘failUnlessRaises’, ‘failureException’, ‘id’, ‘longMessage’, ‘maxDiff’, ‘run’, ‘setUp’, ‘setUpClass’, ‘shortDescription’, ‘skipTest’, ‘tearDown’, ‘tearDownClass’]

    说明:

    setUp():setUp()方法用于测试用例执行前的初始化工作。如测试用例中需要访问数据库,可以在setUp中建立数据库连接并进行初始化。如测试用例需要登录web,可以先实例化浏览器。

    tearDown():tearDown()方法用于测试用例执行之后的善后工作。如关闭数据库连接。关闭浏览器。

    assert*():一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的。

    assertEqual(a,b,[msg=‘测试失败时打印的信息’]):断言a和b是否相等,相等则测试用例通过。

    assertNotEqual(a,b,[msg=‘测试失败时打印的信息’]):断言a和b是否相等,不相等则测试用例通过。

    assertTrue(x,[msg=‘测试失败时打印的信息’]):断言x是否True,是True则测试用例通过。

    assertFalse(x,[msg=‘测试失败时打印的信息’]):断言x是否False,是False则测试用例通过。

    assertIs(a,b,[msg=‘测试失败时打印的信息’]):断言a是否是b,是则测试用例通过。

    assertNotIs(a,b,[msg=‘测试失败时打印的信息’]):断言a是否是b,不是则测试用例通过。

    assertIsNone(x,[msg=‘测试失败时打印的信息’]):断言x是否None,是None则测试用例通过。

    assertIsNotNone(x,[msg=‘测试失败时打印的信息’]):断言x是否None,不是None则测试用例通过。

    assertIn(a,b,[msg=‘测试失败时打印的信息’]):断言a是否在b中,在b中则测试用例通过。

    assertNotIn(a,b,[msg=‘测试失败时打印的信息’]):断言a是否在b中,不在b中则测试用例通过。

    assertIsInstance(a,b,[msg=‘测试失败时打印的信息’]):断言a是是b的一个实例,是则测试用例通过。

    assertNotIsInstance(a,b,[msg=‘测试失败时打印的信息’]):断言a是是b的一个实例,不是则测试用例通过。

    3.TestSuite类的属性如下:(组织用例时需要用到)

    [‘call’, ‘class’, ‘delattr’, ‘dict’, ‘doc’, ‘eq’, ‘format’, ‘getattribute’, ‘hash’, ‘init’, ‘iter’, ‘module’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘setattr’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘weakref’, ‘_addClassOrModuleLevelException’, ‘_get_previous_module’, ‘_handleClassSetUp’, ‘_handleModuleFixture’, ‘_handleModuleTearDown’, ‘_tearDownPreviousClass’, ‘_tests’, ‘addTest’, ‘addTests’, ‘countTestCases’, ‘debug’, ‘run’]

    说明:

    addTest(): addTest()方法是将测试用例添加到测试套件中,如下方,是将test_baidu模块下的BaiduTest类下的test_baidu测试用例添加到测试套件。

    suite = unittest.TestSuite()
    suite.addTest(test_baidu.BaiduTest(‘test_baidu’))

    4.TextTextRunner的属性如下:(组织用例时需要用到)

    [‘class’, ‘delattr’, ‘dict’, ‘doc’, ‘format’, ‘getattribute’, ‘hash’, ‘init’, ‘module’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘setattr’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘weakref’, ‘_makeResult’, ‘buffer’, ‘descriptions’, ‘failfast’, ‘resultclass’, ‘run’, ‘stream’, ‘verbosity’]

    说明:

    run(): run()方法是运行测试套件的测试用例,入参为suite测试套件。

    runner = unittest.TextTestRunner()
    runner.run(suite)

    二、使用unittest框架编写测试用例思路

    点击返回目录

    设计基本思路如下:

    复制代码

    coding=utf-8

    #1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

    #2.注释:包括记录创建时间,创建人,项目名称。
    ‘’’
    Created on 2016-7-27
    @author: Jennifer
    Project:使用unittest框架编写测试用例思路
    ‘’’
    #3.导入unittest模块
    import unittest

    #4.定义测试类,父类为unittest.TestCase。
    #可继承unittest.TestCase的方法,如setUp和tearDown方法,不过此方法可以在子类重写,覆盖父类方法。
    #可继承unittest.TestCase的各种断言方法。
    class Test(unittest.TestCase):

    #5.定义setUp()方法用于测试用例执行前的初始化工作。
    #注意,所有类中方法的入参为self,定义方法的变量也要“self.变量”
    #注意,输入的值为字符型的需要转为int型
    def setUp(self):
    self.number=raw_input(‘Enter a number:’)
    self.number=int(self.number)

    #6.定义测试用例,以“test_”开头命名的方法
    #注意,方法的入参为self
    #可使用unittest.TestCase类下面的各种断言方法用于对测试结果的判断
    #可定义多个测试用例
    #最重要的就是该部分
    def test_case1(self):
    print self.number
    self.assertEqual(self.number,10,msg=‘Your input is not 10’)

    def test_case2(self):
        print self.number
        self.assertEqual(self.number,20,msg='Your input is not 20')
    
    @unittest.skip('暂时跳过用例3的测试')
    def test_case3(self):
        print self.number
        self.assertEqual(self.number,30,msg='Your input is not 30')
    

    #7.定义tearDown()方法用于测试用例执行之后的善后工作。
    #注意,方法的入参为self
    def tearDown(self):
    print ‘Test over’

    #8如果直接运行该文件(name__值为__main),则执行以下语句,常用于测试脚本是否能够正常运行
    if name==‘main’:
    #8.1执行测试用例方案一如下:
    #unittest.main()方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们。
    #执行顺序是命名顺序:先执行test_case1,再执行test_case2
    unittest.main()

    ‘’’
    #8.2执行测试用例方案二如下:
    #8.2.1先构造测试集
    #8.2.1.1实例化测试套件
    suite=unittest.TestSuite()
    #8.2.1.2将测试用例加载到测试套件中。
    #执行顺序是安装加载顺序:先执行test_case2,再执行test_case1
    suite.addTest(Test(‘test_case2’))
    suite.addTest(Test(‘test_case1’))
    #8.2.2执行测试用例
    #8.2.2.1实例化TextTestRunner类
    runner=unittest.TextTestRunner()
    #8.2.2.2使用run()方法运行测试套件(即运行测试套件中的所有用例)
    runner.run(suite)
    ‘’’

    ‘’’
    #8.3执行测试用例方案三如下:
    #8.3.1构造测试集(简化了方案二中先要创建测试套件然后再依次加载测试用例)
    #执行顺序同方案一:执行顺序是命名顺序:先执行test_case1,再执行test_case2
    test_dir = ‘./’
    discover = unittest.defaultTestLoader.discover(test_dir, pattern=‘test_*.py’)
    #8.3.2执行测试用例
    #8.3.2.1实例化TextTestRunner类
    runner=unittest.TextTestRunner()
    #8.3.2.2使用run()方法运行测试套件(即运行测试套件中的所有用例)
    runner.run(discover)
    ‘’’
    复制代码
    使用方案一执行测试用例结果如下:

    Enter a number:10
    10
    Test over
    Enter a number:.10
    Fs

    Ran 3 tests in 6.092s

    FAILED (failures=1, skipped=1)
    10
    Test over

    因为先执行test_case1,再执行test_case2,所以第一次输入10时,执行通过,返回. 第二次输入10时,执行不通过,返回F,最终一个用例通过,一个用例失败,还有一个用例是直接跳过的(装饰器)。

    使用方案二执行测试用例结果如下:

    Enter a number:10
    10
    Test over
    Enter a number:F10
    .

    Ran 2 tests in 4.973s

    FAILED (failures=1)
    10
    Test over

    因为先执行test_case2,再执行test_case1,所以第一次输入10时,执行不通过,返回F , 第二次输入10时,执行通过,返回. ,最终一个用例通过,一个用例失败。

    使用方案三执行测试用例结果如下(执行测试用例顺序同方案一):

    Enter a number:10
    10
    Test over
    Enter a number:.10
    Fs

    Ran 3 tests in 6.092s

    FAILED (failures=1, skipped=1)
    10
    Test over

    因为先执行test_case1,再执行test_case2,所以第一次输入10时,执行通过,返回. 第二次输入10时,执行不通过,返回F,最终一个用例通过,一个用例失败,还有一个用例是直接跳过的(装饰器)。

    三、使用unittest框架编写测试用例实例

    点击返回目录

    目录结构:

    百度搜索测试用例Test Case:

    复制代码

    coding=utf-8

    ‘’’
    Created on 2016-7-22
    @author: Jennifer
    Project:登录百度测试用例
    ‘’’
    from selenium import webdriver
    import unittest, time

    class BaiduTest(unittest.TestCase):
    def setUp(self):
    self.driver = webdriver.Firefox()
    self.driver.implicitly_wait(30) #隐性等待时间为30秒
    self.base_url = “https://www.baidu.com”

    def test_baidu(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_id("kw").clear()
        driver.find_element_by_id("kw").send_keys("unittest")
        driver.find_element_by_id("su").click()
        time.sleep(3)
        title=driver.title
        self.assertEqual(title, u"unittest_百度搜索") 
    
    def tearDown(self):
        self.driver.quit()
    

    if name == “main”:
    unittest.main()
    复制代码
    有道翻译测试用例Test Case:

    复制代码

    coding=utf-8

    ‘’’
    Created on 2016-7-22
    @author: Jennifer
    Project:使用有道翻译测试用例
    ‘’’
    from selenium import webdriver
    import unittest, time

    class YoudaoTest(unittest.TestCase):
    def setUp(self):
    self.driver = webdriver.Firefox()
    self.driver.implicitly_wait(30) #隐性等待时间为30秒
    self.base_url = “http://www.youdao.com”

    def test_youdao(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_id("translateContent").clear()
        driver.find_element_by_id("translateContent").send_keys(u"你好")
        driver.find_element_by_id("translateContent").submit()
        time.sleep(3)
        page_source=driver.page_source
        self.assertIn( "hello",page_source) 
    
    def tearDown(self):
        self.driver.quit()
    

    if name == “main”:
    unittest.main()
    复制代码
    web测试用例:通过测试套件TestSuite来组装多个测试用例。

    复制代码

    coding=utf-8

    ‘’’
    Created on 2016-7-26
    @author: Jennifer
    Project:编写Web测试用例
    ‘’’
    import unittest
    from test_case import test_baidu
    from test_case import test_youdao

    #构造测试集
    suite = unittest.TestSuite()
    suite.addTest(test_baidu.BaiduTest(‘test_baidu’))
    suite.addTest(test_youdao.YoudaoTest(‘test_youdao’))

    if name==‘main’:
    #执行测试
    runner = unittest.TextTestRunner()
    runner.run(suite)
    复制代码
    测试结果:

    说明:.代表用例执行通过,两个点表示两个用例执行通过。F表示用例执行不通过。

    展开全文
  • unittest 学习

    2019-11-23 22:05:13
    介绍2.unittest 包中的类与方法2.1 unittest 包的 TestCase 类中2.2 unittest 包的 TestSuite 类中2.3 unittest 包的 TextTextRunner 类中2.4 unittest 包的 defaultTestLoader 类中 部分内容来自此篇博客 此文做...
  • unittest用法

    2020-10-22 23:23:38
    Unittest 单元测试框架 --unittest 类要继承 unittest.Testcase 类中的方法(即用例)必须以test开头 使用unittest.main()运行py文件 前置条件和后置条件 在类中加setup和teardown----------类方法(每一个...
  • unittest框架

    2020-03-08 13:56:47
    pytest、unittest、nose(python版单元测试框架) unittest是python官方自带标准包 junit、TestNg(java版单元测试框架) 2、unittest单元测试框架可用于web自动化测试用例的开发与执行,该测试框架可组织执行测试用例,...
  • Unittest学习

    2020-03-27 00:15:15
    unittest.py # coding:utf-8 import time import unittest import os class Test1(unittest.TestCase): @classmethod def setUpClass(cls): print("setUpClass初始化操作:用例开始前只执行一次") ...
  • Python必会的单元测试框架 —— unittest

    万次阅读 多人点赞 2016-10-27 12:52:37
    用Python搭建自动化测试框架,我们需要组织用例以及测试执行,这里博主推荐Python的标准库——unittestunittest是xUnit系列框架中的一员,如果你了解xUnit的其他成员,那你用unittest来应该是很轻松的,它们的...
  • UnitTest框架

    2020-04-18 16:24:04
    UnitTest框架是专门用来进行执行代码测试的框架; 优点: 能够组织多个用例去执行 提供丰富的断言方法 提供丰富的日志与测试结果 核心要素 TestCase 说明:(翻译:测试用例)一个TestCase就是一条测试用例; ...
  • 简析unittest

    2019-02-27 13:49:54
    unittest是单元测试框架,既可以做单元测试,也可以做自动化测试。 1)unittest属性 1.unittest.TestCase:TestCase类,所有测试用例类继承的基本类。 2.unittest.TestSuite():创建测试套件,把多个测试用例集合...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,076
精华内容 8,430
关键字:

unittest