自动化测试框架

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,“填写跳过原因”)

原文地址:https://www.cnblogs.com/xiao-qing/p/7850909.html