selenium2学习:单元测试框架

Posted jxba

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium2学习:单元测试框架相关的知识,希望对你有一定的参考价值。

1       单元测试框架

1.1     认识单元测试

Unittest提供了全局的main()方法,使用他可以方便地将一个单元测试模块变成可以直接运行的测试脚本。Main()方法使用testloader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行它们。

If __name__ == “___main__”:直接使用

1.1.1      Test case

一个完整的测试流程,包括测试前准备环境的搭建(setUP)、实现测试过程中的代码(run)、以及测试后环境的还原(tearDown)。单元测试(unit test)的本质也在这里,一个测试用例就是一个完整的测试单元。

1.1.2      Test suite

把多个测试用例集合在一起执行,就产生了测试套件testsuite的概念,test suite用来组装单个测试用例,可以通过addtest加载testcase到testsuite中,从而返回一个testsuite实例。

1.1.3      Test runner

在unittest单元测试框架中,通过texttestrunner类提供的run()方法来执行test suite/test case。Test runner可以使用图形界面、文本界面,或返回一个特殊的值等方式来表示测试执行的结果。

1.1.4      Test fixture

对于一个测试环境的搭建和销毁,就是一个fixture, 通过覆盖testcase的setUP()和tearDown()方法来实现。有什么用呢,比如说在这个测试用例中需要访问数据库,那么可以通过setup()中通过建立数据库连接来进行初始化,在teardown()中清除数据库产生的数据,然后关闭连接等。

1.2     断言方法

# 0517005:AssertTest
import unittest

class test(unittest.TestCase):
    
     def setUp(self):
         print (\'\')
         print (\'test:assert:start\')
     def test_case1(self):
         self.assertEqual(10,8,msg=\'assertEqual:相等。结果:不相等\')
         
     def test_case2(self):
         self.assertNotEqual(10,8,msg=\'assertNotEqual:不相等。结果:OK\')

     def test_case3(self):         
         self.assertIs(\'aa\',\'bb\',msg=\'assertIs:是。结果:不是\')
         
     def test_case4(self):
         self.assertIsNot(\'aa\',\'bb\',msg=\'assertIsNot:不是。结果:OK\')

     def test_case5(self):
         self.assertIn(\'aa\',\'aabb\',msg=\'assertIn:存在。结果:OK\')

     def test_case6(self):
         self.assertNotIn(\'aa\',\'aabb\',msg=\'assertNotIn:不存在。结果:存在\')

     def tearDown(self):
         print (\'test:assert:OVER\')
         pass
if __name__ == \'__main__\':
    unittest.main()   

\'\'\'
assertIsNone:为空
assertIsNotNone:不为空
assertIsInstance(a,b):a为b的一个实例
assertIsNotInstance(a,b):a不为b的一个实例

\'\'\'

 

1.3    测试套件

调用的calculator.py

 

#0517006:calculator:add test
# 计算器类

class count:
    def __init__(self,a,b):
        self.a = int(a)
        self.b = int(b)

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

 

1.3.1      含一个用例

测试集包含1个用例:suite.addTest()

#0517007:suite:just one

from calculator import count
import unittest

class testcount(unittest.TestCase):
    def setUp(self):
        print(\'Test Start\')

    def test_add1(self):
        j = count(2,3)
        self.assertEqual(j.add(),5,msg= \'错了1\')

    def test_add2(self):
        j = count(3,3)
        self.assertEqual(j.add(),5,msg= \'错了2\')
        
    def test_add3(self):
        j = count(3,8)
        self.assertEqual(j.add(),11,msg= \'错了3\')
        
    def tearDown(self):
        print(\'Test Over\')

if __name__ == \'__main__\':
    #构造测试集
    suite = unittest.TestSuite()
    #测试集包含1个用例:suite.addTest()
    suite.addTest(testcount(\'test_add3\'))
    suite.addTest(testcount(\'test_add2\'))

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

执行结果:

>>> 
 RESTART: C:\\Users\\tians\\AppData\\Local\\Programs\\Python\\Python36\\example-JLL\\modules\\002-calculator\\test-suite.py 
Test Start
Test Over
.Test Start
Test Over
F
======================================================================
FAIL: test_add2 (__main__.testcount)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\\Users\\tians\\AppData\\Local\\Programs\\Python\\Python36\\example-JLL\\modules\\002-calculator\\test-suite.py", line 58, in test_add2
    self.assertEqual(j.add(),5,msg= \'错了2\')
AssertionError: 6 != 5 : 错了2

----------------------------------------------------------------------
Ran 2 tests in 0.064s

FAILED (failures=1)
>>> 

 

 

 

 1.3.2      含多个用例

测试集包含多个用例suite.addTests()

 

#0517006:suite:many

from calculator import count
import unittest

class testcount(unittest.TestCase):
    def setUp(self):
        print(\'Test Start\')

    def test_add1(self):
        j = count(2,3)
        self.assertEqual(j.add(),5,msg= \'错了1\')

    def test_add2(self):
        j = count(3,3)
        self.assertEqual(j.add(),5,msg= \'错了2\')
        
    def test_add3(self):
        j = count(3,8)
        self.assertEqual(j.add(),11,msg= \'错了3\')
        
    def tearDown(self):
        print(\'Test Over\')

if __name__ == \'__main__\':
    #构造测试集
    suite = unittest.TestSuite()
     #测试集包含多个用例suite.addTests()
    tests = [testcount(\'test_add1\'), testcount(\'test_add2\')]
    suite.addTests(tests)

    # 或直接写入:suite.addTests([testcount(\'test_add1\'), testcount(\'test_add2\')])
   
    #执行测试
    runner = unittest.TextTestRunner()
    runner.run(suite)

执行结果:

>>> 
 RESTART: C:\\Users\\tians\\AppData\\Local\\Programs\\Python\\Python36\\example-JLL\\modules\\002-calculator\\test-suite.py 
Test Start
Test Over
.Test Start
Test Over
F
======================================================================
FAIL: test_add2 (__main__.testcount)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\\Users\\tians\\AppData\\Local\\Programs\\Python\\Python36\\example-JLL\\modules\\002-calculator\\test-suite.py", line 16, in test_add2
    self.assertEqual(j.add(),5,msg= \'错了2\')
AssertionError: 6 != 5 : 错了2

----------------------------------------------------------------------
Ran 2 tests in 0.066s

FAILED (failures=1)
>>> 

 

 
 
 

以上是关于selenium2学习:单元测试框架的主要内容,如果未能解决你的问题,请参考以下文章

《selenium2 python 自动化测试实战》(21)——unittest单元测试框架解析

虫师Selenium2+Python_00学习大纲

selenium2自动化测试实战--基于Python语言

Selenium2(java)TestNG的使用 七

Python3+Selenium2完整的自动化测试实现之旅:自动化测试框架Python面向对象以及POM设计模型简介

go语言学习笔记 — 基础 — go工具(5.1):单元测试 —— 测试和验证代码的框架