unittest笔记

unittest学习笔记

一、组件之间的关系

二、测试固件、分离测试固件(模块化的应用)

三、测试用例

四、测试套件

五、测试断言

六、测试执行

七、测试报告

八、测试覆盖率

九、其他注意事项

 

一、组件之间的关系

TestCase(测试用例)——> Test Fixure(测试固件:setup、teardown)

       |

TestSuite(测试套件《=》容器)——>TestRunner(测试运行器)---->TestReport(测试报告)

 

二、测试固件、分离测试固件(模块化的应用)

    a.setUp&tearDown

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

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

       一个py文件中,每执行一个函数,都会执行一次setUp&tearDown(多个函数会执行多次)

    def setUp(self):
self.driver=webdriver.Chrome()
self.driver.maximize_window()
self.driver.implicity_wait(30)
self.driver.get('http://www.baidu.com')
def tearDown(self):
self.driver.quit()

    b.setUpClass&tearDownClass

        用于不需要多次打开网页的情况,一个py文件中只执行一次

    @classmethod
def setUpClass(cls):
cls.driver=webdriver.Chrome()
cls.driver.maximize_window()
cls.driver.implicityly_wait(30)
cls.driver.get("http://www.baidu.com")
@classmethod
def tearDownClass(cls):
cls.driver.quit()

  区别:

  ① setup():每个测试函数运行前运行

  ② teardown():每个测试函数运行完后执行

  ③ setUpClass():必须使用@classmethod 装饰器,所有test运行前运行一次

  ④ tearDownClass():必须使用@classmethod装饰器,所有test运行完后运行一次

分离测试固件(运用继承的思路)

      init.py

     Class Init(unittest.TestCase):

    def setUp(self):
self.driver=webdriver.Chrome()
self.driver.maximize_window()
self.driver.implicity_wait(30)
self.driver.get('http://www.baidu.com')
def tearDown(self):
self.driver.quit()
Student.py
from init import *
Class Student(init):
def test_add():
return

三、测试用例

        1、测试用例需要以test开头

        2、测试用例执行顺序:

            根据排序规则,unittest执行测试用例,默认是根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。

            可以通过该函数名的方式修改执行顺序:test_001_add()、test_002_update()

        3、用例中函数增加注释,执行完成后会显示到测试报告中:

           def test_quit_legion(self):

               """退出军团 """

               print("吧啦啦啦啦啦啦")

               assert 1 == 2

        4、测试用例去取消执行:

         @unittest.skip("------原因,取消---测试用例执行")

           

、测试套件(测试用例的集合)

          1、测试套件添加测试用例:

                 suite=unittest.TestSuite()

                 1) suite.addTest(Student('test_add_user'))

                 2) suite.addTest(Student)

                  unittest.TextTestRunner(verbosity=2).run(suite)

           2、测试套件添加测试类:

                  1) suite=unittest.TestSuite(unittest.makeSuite(Student))

                       unittest.TextTestRunner(verbosity=2).run(suite)

                  2)  suite=unittest.TestLoader().loadTestsFromTestCase(Student)

                       unittest.TextTestRunner(verbosity=2).run(suite)

           3、测试套件添加模块:

                  1)  suite=unittest.TestLoader().LoadTestsFromModule(Student.py)

                       unittest.TextTestRunner(verbosity=2).run(suite)

            4、测试套件优化:

                 @staticmethod

                 def suite():

                     suite=unittest.TestLoader().LoadTestsFromModule(Student.py)

                     return suite

                 调用

                 unittest.TextTestRunner(verbosity=2).run(Student.suite())

五、测试断言

 unittest中断言主要有三种类型:

  1.基本的布尔断言,即:要么正确,要么错误的验证
  2.比较断言,如比较两个变量的值(跟上面的布尔断言区别不大,主要是通过比较两个变量的值得出布尔值)
  3.复杂断言(一般用的比较少,像断言两个列表、元组等)

  1.基本的布尔断言

  这个就是断言参数的对错,当然也有部分比较断言。有一个共同点:都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回。主要有以下:

       

 


  2.比较断言

  assertAlmostEqual (first, second, places = 7, msg = None, delta = None)
  验证first约等于second。 palces: 指定精确到小数点后多少位,默认为7

  assertNotAlmostEqual (first, second, places, msg, delta)
  验证first不约等于second。 palces: 指定精确到小数点后多少位,默认为7

  注: 在上述的两个函数中,如果delta指定了值,则first和second之间的差值必须≤delta

  assertGreater (first, second, msg = None)
  验证first > second,否则fail

  assertGreaterEqual (first, second, msg = None)
  验证first ≥ second,否则fail

  assertLess (first, second, msg = None)
  验证first < second,否则fail

  assertLessEqual (first, second, msg = None)
  验证first ≤ second,否则fail

  assertRegexpMatches (text, regexp, msg = None)
  验证正则表达式regexp搜索匹配的文本text。 regexp:通常使用re.search()

  assertNotRegexpMatches (text, regexp, msg = None)
  验证正则表达式regexp搜索不匹配的文本text。 regexp:通常使用re.search()

  3.复杂断言

 

原文:https://blog.csdn.net/qq_29699799/article/details/79947882 
版权声明:本文为博主原创文章,转载请附上博文链接!

六、测试用例批量执行

 suite=unittest.TestLoader().discover(

    start_dir=os.path.dirname(__file__),

    pattern="test_*.py"

    top_level_dir=None)

unittest.TextTestRunner(verbosity=2).run(suite)

七、测试报告

 下载HTMLTestRunne.py到Lib目录下(目录的斜杠方向系统会自动处理,无需特殊处理)

fp=os.path.jion(os.path.dirname(__file__),'report','testReport.html')

HTMLTestRunner.HTMLTestRunner(

  stream=fp,

  title='自动化测试报告',

  description='自动化测试报告详情').run(suite)

 

八、测试覆盖率

         针对已经存在的测试用例的执行覆盖率情况:

         coverage

         安装:pip install coverage

         执行:coverage run allTestRun.py

         报告:coverage html    ---> htmlcov/index.py        

九、其他注意事项

        unittest.TextTestRunner(verbosity=2).run(suite) 打印详细信息

 

posted @ 2019-07-24 14:30  (●—●)大白  阅读(240)  评论(0编辑  收藏  举报