selenium单元测试框架unittest

单元测试框架的优势:

  • 用例规范,组织明了,方便后续维护
  • 提供多种比较方法
  • 日志清晰,能够快速定位bug

 四个概念:

  • test case:测试用例,即一个包括setUp--run--tearDown的测试流程
  • test suite:测试套件,可以执行一个或多个测试用例
  • test runner:执行用例,测试结果保存到TextTeestResult实例中
  • test fixture:对一个测试用例环境的搭建和销毁,通过setUp和tearDown视线

在count.py文件中定义Count类

#coding=utf-8

class Count:
    """docstring for Count"""
    def __init__(self,a,b):  #初始化参数
        self.a=a
        self.b=b

    def add(self):
        return self.a+self.b

un_test.py文件

#coding=utf-8
from count import Count
import unittest

class TestCount(unittest.TestCase):
    """docstring for TestCount"""
    def setUp(self):  #测试开始前的前置性工作
        self.c = Count(4,6)

    def test_count(self):  #测试案例必须以test开头
        self.add = self.c.add()
        self.assertEqual(self.add,10)

    def tearDown(self):  #完成测试后的后置工作
        pass

if __name__ == '__main__':
    unittest.main()  #main方法默认执行所有的用例

将assertEqual(self.add,10)改为assertEqual(self.add,8),再执行一次,则有详细的报错信息

main()方法中封装了TestSuite()和TextTestRunner(),注释掉main()方法后如下:

    #unittest.main()

    #构造测试集
    suite = unittest.TestSuite()
    suite.addTest(TestCount('test_count'))  #addTest装载测试用例,只执行装载的用例

    #执行测试
    runner = unittest.TextTestRunner()
    runner.run(suite)

unittest中提供的比较方法:

discover更多测试用例

太多用例写在一个文件中不便于后续的维护工作,discover方法后续添加 un_*.py 文件时,不需要对 alltest.py 文件进行修改

如果discover中运行的文件涉及到多层级目录,需要在每个目录中添加__init__.py文件

#alltest.py


#coding=utf-8
import unittest

def creatsuite():
    testunit = unittest.TestSuite()
    test_address = 'C:\\Users\\user\\Desktop\\python_study\\script'  #测试脚本所在目录

    #定义discover方法的参数
    discover = unittest.defaultTestLoader.discover(test_address,pattern='un_*.py',top_level_dir=None)

    for test_suite in discover:
        for test_case in test_suite:
            testunit.addTests(test_case)
    return testunit

if __name__ == '__main__':
    runner = unittest.TextTestRunner()
    runner.run(creatsuite())

两个测试类文件un_test.py  un_test2.py

#un_test.py


#coding=utf-8
from count import Count
import prime
import unittest

class TestCount(unittest.TestCase):
    """docstring for TestCount"""
    def setUp(self): 
        self.c = Count(4,6)

    def test_count(self):  
        self.add = self.c.add()
        self.assertEqual(self.add,10)

    def test_prime(self):
        self.pr = prime.is_Prime(3)
        self.assertTrue(self.pr,msg='is not prime')

    def tearDown(self):  
        pass
#un_test2.py


#coding=utf-8
from count import Count
import prime
import unittest

class TestCount2(unittest.TestCase):
    """docstring for TestCount"""
    def setUp(self): 
        self.c = Count(4,6)

    def test_count2(self): 
        self.add = self.c.add()
        self.assertEqual(self.add,10)

    def test_prime2(self):
        self.pr = prime.is_Prime(3)
        self.assertTrue(self.pr,msg='is not prime')

    def tearDown(self): 
        pass

对于目录、文件、用例来说,默认根据ASCII码顺序执行:0~9,A~Z,a~z

如果对用例执行有顺序要求,可以通过调整目录、文件、用例的名称或者用 TestSuite 类的 addTest() 方法按照一定的顺序来加载

猜你喜欢

转载自www.cnblogs.com/hlbzzt/p/9994250.html