zoukankan      html  css  js  c++  java
  • 自动化测试框架

    1、testcase
    一个tastcase是一个测试用例,什么是测试用例?就是一个完整的测试流程,包含测试的准备环境的准备(setup),执行测试代码(run)以及测试后环境的还原(teardown)执行代码(run),以及测试后环境的还原。
    2、testsuite
    多个用例集合到一起

    3、texttestrunner
    执行用例的。其中的run()会执行Testsuite、testcase中的run(result)方法。测试的结果会保存再Texttestresult实例中,包含运行了多少测试用例,成功了多少,失败了多少等信息
    4、fixture
    而对一个测试用例环境的搭建和销毁,是一个fixture
    例:对下列单元进行测试

    class Math():
        def __init__(self,a,b):
            self.a=int(a)
            self.b=int(b)
        def add(self):
            return self.a+self.b

    测试代码:

    from calculator import Math
    import unittest
    
    class TestMath(unittest.TestCase):
        def setUp(self):
            print("test start~~~~")
        def test_add(self):
            j=Math(5,20)
            self.assertIs(j.add(),25)
            # self.assertEqual(j.add(),15)
    
        def tearDown(self):
            print("test end!")
    
    if __name__=='__main__':
        suite=unittest.TestSuite()
        suite.addTest(TestMath("test_add"))
    
        runer=unittest.TextTestRunner()
        runer.run(suite)

    常用断言方法:

    断言内容事自动化脚本的重要内容,正确设置断言以后才能帮助我们判断测试用例执行结果
    断言方法:
    assertEqual(a,b)判断a==b
    assertNotEqul(a,b)判断a!=b
    assertTrue(x)bool(x) is True
    assertFalse(x)bool(x) is False
    assertIs(a,b) a is b
    assertIsNot(a,b) a is not b
    assertIsNone(x) x is None
    新增用例测试管理:多个测试一起执行
    import unittest
    from calculator import *
    
    class Test_add(unittest.TestCase):
        def setUp(self):
            print("test start !")
    
        def test_add(self):
            j=Math(5,5)
            self.assertEqual(j.add(),10)
        def test_add1(self):
            j=Math(10,20)
            self.assertEqual(j.add(),30)
    
        def tearDown(self):
            print("test end !")
    
    class Test_sub(unittest.TestCase):
        def setUp(self):
            print("test start !")
        def test_sub(self):
            i=Math(8,8)
            self.assertEqual(i.sub(),0)
        def test_sub1(self):
            i=Math(5,3)
            self.assertEqual(i.sub(),2)
        def tearDown(self):
            print("test end !")
    if __name__=='__main__':
        suite=unittest.TestSuite()
        suite.addTest(Test_add("test_add"))
        suite.addTest(Test_add("test_add1"))
        suite.addTest(Test_sub("test_sub"))
        suite.addTest(Test_sub("test_sub1"))
    
        runer=unittest.TextTestRunner()
        runer.run(suite)

    用例公共部分合并

    每个测试类都有一个SetUp()和tearDown()方法,而且两个方法内容都是一样的,用于打印开始与结束提示语句,是否可以合并在一起呢?

    import unittest
    from calculator import *
    
    class StartEnd(unittest.TestCase):
        def setUp(self):
            print("test start !")
        def tearDown(self):
            print("test end !")
    
    class Test_add(StartEnd):
        def test_add(self):
            f=Math(1,9)
            self.assertEqual(f.add(),10)
    
    class Test_sub(StartEnd):
        def test_sub(self):
            j=Math(10,0)
            self.assertEqual(j.sub(),10)
    
    if __name__=='__main__':
    
    # suite=unittest.TestSuite()
    # suite.addTest(Test_add("test_add"))
    # suite.addTest(Test_sub("test_sub"))
    #
    # runner=unittest.TextTestRunner()
    # runner.run(suite)
    unittest.main()
    
    

    用例综合框架的管理

    测试用例和执行放到一个文件就比较混乱,因此需要根据功能模块来使用单独的模块来管理.就像一个学校根据不同年纪进行分班管理,同样的道理

    案例:Test_Project文件目录下包含4个python文件:

    1、--StartEnd.py----setup和teardown

    2、--calculator.py---加减法运算方法的实现

    3、--test_add.py----加法测试用例

    4、--test_sub.py---减法测试用例

    5、---runtest.py---用例执行管理

    startend.py

    import unittest
    class setup_teardown(unittest.TestCase):
        def setUp(self):
            print("test start !")
        def tearDown(self):
            print("test end!")

    calculator.py

    class Math():
        def __init__(self,a,b):
            self.a=int(a)
            self.b=int(b)
        def add(self):
            return self.a+self.b
        def sub(self):
            return self.a-self.b

    test_add.py

    from calculator import *
    from StartEnd import *
    class Test_add(setup_teardown):
        def test_add(self):
            i=Math(1,9)
            self.assertEqual(i.add(),10)
    
        def test_add2(self):
            i=Math(3,2)
            self.assertEqual(i.add(),5)

    test_sub.py

    from calculator import *
    from StartEnd import *
    
    class Test_sub(setup_teardown):
        def test_sub(self):
            i=Math(10,1)
            self.assertEqual(i.sub(),9)
        def test_sub2(self):
            j=Math(0,0)
            self.assertEqual(j.sub(),0)

    runtest.py

    import unittest
    test_dir='./'
    discover=unittest.defaultTestLoader.discover(test_dir,pattern='test*py')
    
    if __name__=='__main__':
        runner=unittest.TextTestRunner()
        runner.run(discover)

    跳过测试和预期失败

    概要:
    unittest.skip()直接跳过测试

    unittest.skipIf()条件为真跳过测试

    unittest.skipUnless条件为假,跳过测试

    unittest.exceptedFailure预期设置失败

    skip规则设定案例:

    用法

    @unittest.skip(“填写跳过原因”)

    @unittest.skipIf(4>2,“填写跳过原因”)

  • 相关阅读:
    mysql
    新建mysql容器
    Storm中并行度原来是这样计算的(1.0.1版本)
    集中式系统和分布式系统
    hadoop错误:Does not contain a valid host:port authority
    Linux配置ntp时间服务器(全)
    vi/vim 消除搜索后的关键字高亮
    雄鹰与蜗牛
    如何查看HBase的HFile
    MemoryUsage:监测java虚拟机内存使用
  • 原文地址:https://www.cnblogs.com/xiao-qing/p/7850909.html
Copyright © 2011-2022 走看看