日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python單元測(cè)試框架—Unittest

系統(tǒng) 1963 0

介紹

unittest原名為PyUnit,是由Java的JUnit衍生而來(lái).它支持自動(dòng)化測(cè)試,在測(cè)試中使用setup(初始化)和shutdown(關(guān)閉銷毀)操作,組織測(cè)試用例為套件(批量運(yùn)行),以及把測(cè)試和報(bào)告獨(dú)立開來(lái)。為了實(shí)現(xiàn)這些,unittest以一種面向?qū)ο蟮姆绞疆a(chǎn)生了一些很重要的概念:

  • test fixture:fixture表示tests運(yùn)行前需要做的準(zhǔn)備工作以及結(jié)束后的清理工作。比如,創(chuàng)建臨時(shí)/代理數(shù)據(jù)庫(kù)、目錄或啟動(dòng)一個(gè)服務(wù)器進(jìn)程。
  • test case:test case是單元測(cè)試中的最小個(gè)體。它檢查特定輸入的響應(yīng)信息。unittest提供了一個(gè)基礎(chǔ)類:TestCase,用來(lái)創(chuàng)建test case。
  • test suite:test suite是test case的合集,通常用test suite將test case匯總?cè)缓笠黄饒?zhí)行。
  • test runner:test runner是一個(gè)執(zhí)行器,它可以執(zhí)行case并提供結(jié)果給用戶。它可以提供圖形界面、文本界面或者返回一個(gè)值表示測(cè)試結(jié)果。

工作原理

unittest中最核心的五個(gè)概念是:test case, test suite,?testLoader,test runner, test fixture。

下面我們分別來(lái)解釋這四個(gè)概念的意思,先來(lái)看一張unittest的靜態(tài)類圖(下面的類圖以及解釋均來(lái)源于網(wǎng)絡(luò),原文鏈接):

Python單元測(cè)試框架—Unittest_第1張圖片

  • 一個(gè)TestCase的實(shí)例就是一個(gè)測(cè)試用例。什么是測(cè)試用例呢?就是一個(gè)完整的測(cè)試流程,包括測(cè)試前準(zhǔn)備環(huán)境的搭建(setUp),執(zhí)行測(cè)試代碼(run),以及測(cè)試后環(huán)境的還原(tearDown)。單元測(cè)試(unit test)的本質(zhì)也就在這里,一個(gè)測(cè)試用例是一個(gè)完整的測(cè)試單元,通過(guò)運(yùn)行這個(gè)測(cè)試單元,可以對(duì)某一個(gè)問(wèn)題進(jìn)行驗(yàn)證。
  • 而多個(gè)測(cè)試用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。
  • TestLoader是用來(lái)加載TestCase到TestSuite中的,其中有幾個(gè)loadTestsFrom__()方法,就是從各個(gè)地方尋找TestCase,創(chuàng)建它們的實(shí)例,然后add到TestSuite中,再返回一個(gè)TestSuite實(shí)例。
  • TextTestRunner是來(lái)執(zhí)行測(cè)試用例的,其中的run(test)會(huì)執(zhí)行TestSuite/TestCase中的run(result)方法。?
  • 測(cè)試的結(jié)果會(huì)保存到TextTestResult實(shí)例中,包括運(yùn)行了多少測(cè)試用例,成功了多少,失敗了多少等信息。
  • 而對(duì)一個(gè)測(cè)試用例環(huán)境的搭建和銷毀,是一個(gè)fixture。

簡(jiǎn)單示例

            
              # coding=utf-8

__author__ = "小小漁夫"

from appium import webdriver
from common.HTMLTestRunner import HTMLTestRunner
import unittest


class LoginTest(unittest.TestCase):
    def setUp(self):
        desired_caps = {
            'platformName': 'Android',
            'deviceName': 'SGEEGEHIQ8I7CI90',
            'platformVersion': '7.0',
            'appPackage': 'com.XXX.mall',
            'appActivity': '.business.main.MainActivity'
        }
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

    def testCase(self):
        self.driver.find_element_by_id("bottom_nav").click()
        self.driver.find_element_by_name('使用其他方式登錄').click()
        self.driver.find_element_by_name('手機(jī)登錄').click()
        self.driver.find_element_by_id("username").send_keys("18300000000")
        self.driver.find_element_by_name('獲取驗(yàn)證碼').send_keys("123456")
        self.driver.find_element_by_id("btn").click()

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    filename = "E:\\report.html"
    # stream測(cè)試報(bào)告寫入文件的存儲(chǔ)區(qū)域,verbosity參數(shù)可以控制輸出的錯(cuò)誤報(bào)告的詳細(xì)程度,默認(rèn)為1如果設(shè)為0,則不輸出每一用例的執(zhí)行結(jié)果,如果設(shè)為 2,則輸出詳細(xì)的執(zhí)行結(jié)果
    runner = HTMLTestRunner.HTMLTestRunner(title="測(cè)試報(bào)告標(biāo)題", description="這是測(cè)試報(bào)告的描述", stream=open(filename, "wb"),verbosity=2, retry=0)
    runner.run()


            
          

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 乐清市| 浠水县| 新营市| 侯马市| 邳州市| 汽车| 磴口县| 从江县| 梁山县| 江安县| 城固县| 会东县| 衡阳市| 浏阳市| 富阳市| 翁牛特旗| 开鲁县| 营山县| 许昌县| 镇沅| 鹰潭市| 乡宁县| 开鲁县| 台州市| 本溪| 集安市| 贵港市| 蓝田县| 黑龙江省| 罗田县| 垦利县| 焦作市| 石狮市| 江陵县| 莱西市| 全南县| 凌源市| 乌海市| 双牌县| 聊城市| 吴桥县|