国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,測(cè)試用例setup和teardown(三)

這篇具有很好參考價(jià)值的文章主要介紹了從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,測(cè)試用例setup和teardown(三)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、前言

二、用例運(yùn)行級(jí)別

三、函數(shù)式

1、setup_function / teardown_function

2、setup_module / teardown_module

四、類和方法

五、函數(shù)和類混合


一、前言

學(xué)過(guò) unittest 的都知道里面用前置和后置 setup 和 teardown 非常好用,在每次用例開(kāi)始前和結(jié)束后都去執(zhí)行一次

當(dāng)然還有更高級(jí)一點(diǎn)的 setupClass 和 teardownClass,需配合 @classmethod 裝飾器一起使用,在做 selenium 自動(dòng)化的時(shí)候,它的效率尤為突然,可以只啟動(dòng)一次瀏覽器執(zhí)行多個(gè)用例

pytest框架也有類似于setup和teardown的語(yǔ)法,并且還不止這四個(gè)

二、用例運(yùn)行級(jí)別

模塊級(jí)(setup_module / teardown_module)開(kāi)始于模塊始末,全局的

函數(shù)級(jí)(setup_function / teardown_function)只對(duì)函數(shù)用例生效(不在類中)

類級(jí)(setup_class / teardown_class)只在類中前后運(yùn)行一次(在類中)

方法級(jí)(setup_method / teardown_method)開(kāi)始于方法始末(在類中)

類里面的(setup / teardown)運(yùn)行在調(diào)用方法的前后

三、函數(shù)式

1、setup_function / teardown_function

1.pytest框架支持函數(shù)和類兩種用例方式
先看函數(shù)里面的前置與后置用法:
setup_function / teardown_function (每個(gè)用例開(kāi)始和結(jié)束調(diào)用一次)

# test_fixt.py

# coding:utf-8
import pytest
# 函數(shù)式

''' 程序員曦曦'''

def setup_function():
    print("setup_function:每個(gè)用例開(kāi)始前都會(huì)執(zhí)行")

def teardown_function():
    print("teardown_function:每個(gè)用例結(jié)束后都會(huì)執(zhí)行")

def test_one():
    print("正在執(zhí)行----test_one")
    x = "this"
    assert 'h' in x

def test_two():
    print("正在執(zhí)行----test_two")
    x = "hello"
    assert hasattr(x, 'check')

def test_three():
    print("正在執(zhí)行----test_three")
    a = "hello"
    b = "hello world"
    assert a in b

if __name__ == "__main__":
    pytest.main(["-s", "test_fixt.py"])

運(yùn)行結(jié)果:

============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
rootdir: E:\YOYO, inifile:
collected 3 items

test_fixt.py setup_function:每個(gè)用例開(kāi)始前都會(huì)執(zhí)行
正在執(zhí)行----test_one
.teardown_function:每個(gè)用例結(jié)束后都會(huì)執(zhí)行
setup_function:每個(gè)用例開(kāi)始前都會(huì)執(zhí)行
正在執(zhí)行----test_two
Fteardown_function:每個(gè)用例結(jié)束后都會(huì)執(zhí)行
setup_function:每個(gè)用例開(kāi)始前都會(huì)執(zhí)行
正在執(zhí)行----test_three
.teardown_function:每個(gè)用例結(jié)束后都會(huì)執(zhí)行

================================== FAILURES ===================================
__________________________________ test_two ___________________________________

    def test_two():
        print("正在執(zhí)行----test_two")
        x = "hello"
>       assert hasattr(x, 'check')
E       AssertionError: assert False
E        +  where False = hasattr('hello', 'check')

test_fixt.py:19: AssertionError
===================== 1 failed, 2 passed in 0.03 seconds ======================

2.從結(jié)果可以看出用例執(zhí)行順序:setup_function > 用例1 > teardown_function, setup_function > 用例2 > teardown_function, setup_function > 用例3 > teardown_function

備注:-s參數(shù)是為了顯示用例的打印信息。 -q參數(shù)只顯示結(jié)果,不顯示過(guò)程

2、setup_module / teardown_module

1.setup_module 是所有用例開(kāi)始前只執(zhí)行一次,teardown_module 是所有用例結(jié)束后只執(zhí)行一次

# test_fixt.py

# coding:utf-8
import pytest
# 函數(shù)式

''' 程序員曦曦'''

def setup_module():
    print("setup_module:整個(gè).py模塊只執(zhí)行一次")
    print("比如:所有用例開(kāi)始前只打開(kāi)一次瀏覽器")

def teardown_module():
    print("teardown_module:整個(gè).py模塊只執(zhí)行一次")
    print("比如:所有用例結(jié)束只最后關(guān)閉瀏覽器")

def setup_function():
    print("setup_function:每個(gè)用例開(kāi)始前都會(huì)執(zhí)行")

def teardown_function():
    print("teardown_function:每個(gè)用例結(jié)束前都會(huì)執(zhí)行")

def test_one():
    print("正在執(zhí)行----test_one")
    x = "this"
    assert 'h' in x

def test_two():
    print("正在執(zhí)行----test_two")
    x = "hello"
    assert hasattr(x, 'check')

def test_three():
    print("正在執(zhí)行----test_three")
    a = "hello"
    b = "hello world"
    assert a in b

if __name__ == "__main__":
    pytest.main(["-s", "test_fixt.py"])

2.從運(yùn)行結(jié)果可以看到 setup_module 和 teardown_module 只執(zhí)行了一次

test_fixt.py setup_module:整個(gè).py模塊只執(zhí)行一次
比如:所有用例開(kāi)始前只打開(kāi)一次瀏覽器
setup_function:每個(gè)用例開(kāi)始前都會(huì)執(zhí)行
正在執(zhí)行----test_one
.teardown_function:每個(gè)用例結(jié)束前都會(huì)執(zhí)行
setup_function:每個(gè)用例開(kāi)始前都會(huì)執(zhí)行
正在執(zhí)行----test_two
Fteardown_function:每個(gè)用例結(jié)束前都會(huì)執(zhí)行
setup_function:每個(gè)用例開(kāi)始前都會(huì)執(zhí)行
正在執(zhí)行----test_three
.teardown_function:每個(gè)用例結(jié)束前都會(huì)執(zhí)行
teardown_module:整個(gè).py模塊只執(zhí)行一次
比如:所有用例結(jié)束只最好關(guān)閉瀏覽器

備注:setup_function / teardown_function和setup_module / teardown_module這四種方法是可以任意組合的,用一個(gè)和多個(gè)都可以

四、類和方法

1.setup / teardown 和 unittest 里面的 setup / teardown 是一樣的功能,setup_class 和 teardown_class 等價(jià)于 unittest 里面的 setupClass 和 teardownClass

#test_fixtclass.py
# coding:utf-8

import pytest
# 類和方法

''' 程序員曦曦'''

class TestCase():

    def setup(self):
        print("setup: 每個(gè)用例開(kāi)始前執(zhí)行")

    def teardown(self):
        print("teardown: 每個(gè)用例結(jié)束后執(zhí)行")

    def setup_class(self):
        print("setup_class:所有用例執(zhí)行之前")

    def teardown_class(self):
        print("teardown_class:所有用例執(zhí)行之前")

    def setup_method(self):
        print("setup_method:  每個(gè)用例開(kāi)始前執(zhí)行")

    def teardown_method(self):
        print("teardown_method:  每個(gè)用例結(jié)束后執(zhí)行")

    def test_one(self):
        print("正在執(zhí)行----test_one")
        x = "this"
        assert 'h' in x

    def test_two(self):
        print("正在執(zhí)行----test_two")
        x = "hello"
        assert hasattr(x, 'check')

    def test_three(self):
        print("正在執(zhí)行----test_three")
        a = "hello"
        b = "hello world"
        assert a in b

if __name__ == "__main__":
    pytest.main(["-s", "test_fixtclass.py"])

運(yùn)行結(jié)果

test_fixtclass.py setup_class:所有用例執(zhí)行之前
setup_method:  每個(gè)用例開(kāi)始前執(zhí)行
setup: 每個(gè)用例開(kāi)始前執(zhí)行
正在執(zhí)行----test_one
.teardown: 每個(gè)用例結(jié)束后執(zhí)行
teardown_method:  每個(gè)用例結(jié)束后執(zhí)行
setup_method:  每個(gè)用例開(kāi)始前執(zhí)行
setup: 每個(gè)用例開(kāi)始前執(zhí)行
正在執(zhí)行----test_two
Fteardown: 每個(gè)用例結(jié)束后執(zhí)行
teardown_method:  每個(gè)用例結(jié)束后執(zhí)行
setup_method:  每個(gè)用例開(kāi)始前執(zhí)行
setup: 每個(gè)用例開(kāi)始前執(zhí)行
正在執(zhí)行----test_three
.teardown: 每個(gè)用例結(jié)束后執(zhí)行
teardown_method:  每個(gè)用例結(jié)束后執(zhí)行
teardown_class:所有用例執(zhí)行之前

2.從結(jié)果看出,運(yùn)行的優(yōu)先級(jí):setup_class > setup_method > setup > 用例 > teardown > teardown_method > teardown_class

備注:這里 setup_method 和 teardown_method 的功能和 setup / teardown功能是一樣的,一般二者用其中一個(gè)即可

五、函數(shù)和類混合

1.如果一個(gè).py的文件里面既有函數(shù)用例又有類和方法用例,運(yùn)行順序又是怎樣的呢?

# coding:utf-8
import pytest
# 類和方法

''' 程序員曦曦'''

def setup_module():
    print("setup_module:整個(gè).py模塊只執(zhí)行一次")
    print("比如:所有用例開(kāi)始前只打開(kāi)一次瀏覽器")

def teardown_module():
    print("teardown_module:整個(gè).py模塊只執(zhí)行一次")
    print("比如:所有用例結(jié)束只最后關(guān)閉瀏覽器")

def setup_function():
    print("setup_function:每個(gè)用例開(kāi)始前都會(huì)執(zhí)行")

def teardown_function():
    print("teardown_function:每個(gè)用例結(jié)束前都會(huì)執(zhí)行")

def test_one():
    print("正在執(zhí)行----test_one")
    x = "this"
    assert 'h' in x

def test_two():
    print("正在執(zhí)行----test_two")
    x = "hello"
    assert hasattr(x, 'check')

class TestCase():

    def setup_class(self):
        print("setup_class:所有用例執(zhí)行之前")

    def teardown_class(self):
        print("teardown_class:所有用例執(zhí)行之前")

    def test_three(self):
        print("正在執(zhí)行----test_three")
        x = "this"
        assert 'h' in x

    def test_four(self):
        print("正在執(zhí)行----test_four")
        x = "hello"
        assert hasattr(x, 'check')

if __name__ == "__main__":
    pytest.main(["-s", "test_fixtclass.py"])

運(yùn)行結(jié)果:

test_fixtclass.py setup_module:整個(gè).py模塊只執(zhí)行一次
比如:所有用例開(kāi)始前只打開(kāi)一次瀏覽器
setup_function:每個(gè)用例開(kāi)始前都會(huì)執(zhí)行
正在執(zhí)行----test_one
.teardown_function:每個(gè)用例結(jié)束前都會(huì)執(zhí)行
setup_function:每個(gè)用例開(kāi)始前都會(huì)執(zhí)行
正在執(zhí)行----test_two
Fteardown_function:每個(gè)用例結(jié)束前都會(huì)執(zhí)行
setup_class:所有用例執(zhí)行之前
正在執(zhí)行----test_three
.正在執(zhí)行----test_four
Fteardown_class:所有用例執(zhí)行之前
teardown_module:整個(gè).py模塊只執(zhí)行一次
比如:所有用例結(jié)束只最后關(guān)閉瀏覽器

2.從運(yùn)行結(jié)果看出,setup_module / teardown_module 的優(yōu)先級(jí)是最大的,然后函數(shù)里面用到的 setup_function / teardown_function 與類里面的 setup_class / teardown_class 互不干涉


? ? ? ? ? 【下面是我整理的2023年最全的軟件測(cè)試工程師學(xué)習(xí)知識(shí)架構(gòu)體系圖】


一、Python編程入門到精通

二、接口自動(dòng)化項(xiàng)目實(shí)戰(zhàn)??

從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,測(cè)試用例setup和teardown(三)

三、Web自動(dòng)化項(xiàng)目實(shí)戰(zhàn)

四、App自動(dòng)化項(xiàng)目實(shí)戰(zhàn)?

從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,測(cè)試用例setup和teardown(三)

五、一線大廠簡(jiǎn)歷

六、測(cè)試開(kāi)發(fā)DevOps體系?

從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,測(cè)試用例setup和teardown(三)

七、常用自動(dòng)化測(cè)試工具

八、JMeter性能測(cè)試?

從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,測(cè)試用例setup和teardown(三)

九、總結(jié)(尾部小驚喜)

生命不息,奮斗不止。每一份努力都不會(huì)被辜負(fù),只要堅(jiān)持不懈,終究會(huì)有回報(bào)。珍惜時(shí)間,追求夢(mèng)想。不忘初心,砥礪前行。你的未來(lái),由你掌握!

生命短暫,時(shí)間寶貴,我們無(wú)法預(yù)知未來(lái)會(huì)發(fā)生什么,但我們可以掌握當(dāng)下。珍惜每一天,努力奮斗,讓自己變得更加強(qiáng)大和優(yōu)秀。堅(jiān)定信念,執(zhí)著追求,成功終將屬于你!

只有不斷地挑戰(zhàn)自己,才能不斷地超越自己。堅(jiān)持追求夢(mèng)想,勇敢前行,你就會(huì)發(fā)現(xiàn)奮斗的過(guò)程是如此美好而值得。相信自己,你一定可以做到!

【軟件測(cè)試技術(shù)交流(資料分享)】:320231853(備注C)http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=eU1h9ykztGeBOGy_wSKn0v33ThZlM8Xh&authKey=3aLC55z%2F7ZglBlNu5uwQopOR2WZAlAuFDvJ6sqEnXLJP8y9fvuhBS0p%2FNOTaZyQG&noverify=0&group_code=320231853文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-493417.html

到了這里,關(guān)于從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,測(cè)試用例setup和teardown(三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,配置文件pytest.ini(十三)

    從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,配置文件pytest.ini(十三)

    pytest配置文件可以改變pytest的運(yùn)行方式,它是一個(gè)固定的文件pytest.ini文件,讀取配置信息,按指定的方式去運(yùn)行 pytest里面有些文件是非test文件 pytest.ini pytest的主配置文件,可以改變pytest的默認(rèn)行為 conftest.py 測(cè)試用例的一些fixture配置 _init_.py 識(shí)別該文件夾為python的package包

    2024年02月11日
    瀏覽(456)
  • 接口自動(dòng)化測(cè)試框架開(kāi)發(fā)(pytest+allure+aiohttp+ 用例自動(dòng)生成)

    接口自動(dòng)化測(cè)試框架開(kāi)發(fā)(pytest+allure+aiohttp+ 用例自動(dòng)生成)

    近期準(zhǔn)備優(yōu)先做接口測(cè)試的覆蓋,為此需要開(kāi)發(fā)一個(gè)測(cè)試框架,經(jīng)過(guò)思考,這次依然想做點(diǎn)兒不一樣的東西。 接口測(cè)試是比較講究效率的,測(cè)試人員會(huì)希望很快能得到結(jié)果反饋,然而接口的數(shù)量一般都很多,而且會(huì)越來(lái)越多,所以提高執(zhí)行效率很有必要 接口測(cè)試的用例其實(shí)

    2024年01月23日
    瀏覽(22)
  • 接口自動(dòng)化測(cè)試框架開(kāi)發(fā) (pytest+allure+aiohttp+ 用例自動(dòng)生成)

    目錄 前言: 第一部分(整個(gè)過(guò)程都要求是異步非阻塞的) 讀取 yaml 測(cè)試用例 http 請(qǐng)求測(cè)試接口 收集測(cè)試數(shù)據(jù) 第二部分 動(dòng)態(tài)生成 pytest 認(rèn)可的測(cè)試用例 后續(xù)(yml 測(cè)試文件自動(dòng)生成) 前言: 開(kāi)發(fā)一個(gè)接口自動(dòng)化測(cè)試框架是一個(gè)很好的方式,可以提高測(cè)試效率和準(zhǔn)確性。在這

    2024年02月16日
    瀏覽(49)
  • 火爆全網(wǎng),Pytest自動(dòng)化測(cè)試框架-測(cè)試用例執(zhí)行與失敗重跑(實(shí)戰(zhàn)詳細(xì))

    火爆全網(wǎng),Pytest自動(dòng)化測(cè)試框架-測(cè)試用例執(zhí)行與失敗重跑(實(shí)戰(zhàn)詳細(xì))

    用例執(zhí)行狀態(tài) 用例執(zhí)行完成后,每條用例都有自己的狀態(tài),常見(jiàn)的狀態(tài)有 passed:測(cè)試通過(guò) failed:斷言失敗 error:用例本身寫(xiě)的質(zhì)量不行,本身代碼報(bào)錯(cuò)(譬如:fixture不存在,fixture里面有報(bào)錯(cuò)) xfail:預(yù)期失敗,加了 @pytest.mark.xfail() error例子1:參數(shù)不存在 為啥是error pwd參數(shù)

    2024年02月11日
    瀏覽(18)
  • 從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,使用自定義標(biāo)記mark(十一)

    從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,使用自定義標(biāo)記mark(十一)

    pytest可以支持自定義標(biāo)記,自定義標(biāo)記可以把一個(gè)web項(xiàng)目劃分多個(gè)模塊,然后指定模塊名稱執(zhí)行 app自動(dòng)化的時(shí)候,如果想android和ios公用一套代碼時(shí),也可以使用標(biāo)記功能,標(biāo)明哪些是ios用例,哪些是android的,運(yùn)行代碼時(shí)候指定mark名稱運(yùn)行就可以 1.以下用例,標(biāo)記test_send_h

    2024年02月11日
    瀏覽(365)
  • 從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,fixture之a(chǎn)utouse=True(十二)

    從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,fixture之a(chǎn)utouse=True(十二)

    平常寫(xiě)自動(dòng)化用例會(huì)寫(xiě)一些前置的fixture操作,用例需要用到就直接傳該函數(shù)的參數(shù)名稱就行了。當(dāng)用例很多的時(shí)候,每次都傳這個(gè)參數(shù),會(huì)比較麻煩 fixture里面有個(gè)參數(shù)autouse,默認(rèn)是Fasle沒(méi)開(kāi)啟的,可以設(shè)置為True開(kāi)啟自動(dòng)使用fixture功能,這樣用例就不用每次都去傳參了 調(diào)用

    2024年02月11日
    瀏覽(122)
  • 從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,allure2生成html報(bào)告(史上最詳細(xì))(九)

    從0到1精通自動(dòng)化測(cè)試,pytest自動(dòng)化測(cè)試框架,allure2生成html報(bào)告(史上最詳細(xì))(九)

    allure是一個(gè)report框架,支持java的Junit/testng等框架,當(dāng)然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的報(bào)告界面。 環(huán)境準(zhǔn)備: python3.6 windows環(huán)境 pycharm pytest-allure-adaptor allure2.7.0 java1.8 pip安裝 pytest-allure-adaptor,github地址:https://github.com/allure-framework/allure-pytest 如

    2024年02月11日
    瀏覽(526)
  • 超詳細(xì)從入門到精通,pytest自動(dòng)化測(cè)試框架實(shí)戰(zhàn)-fixture多樣玩法(九)

    超詳細(xì)從入門到精通,pytest自動(dòng)化測(cè)試框架實(shí)戰(zhàn)-fixture多樣玩法(九)

    在編寫(xiě)測(cè)試用例,都會(huì)涉及到用例執(zhí)行之前的環(huán)境準(zhǔn)備工作,和用例執(zhí)行之后的環(huán)境清理工作。 代碼版的測(cè)試用例也不例外。 pytest自動(dòng)化測(cè)試框架:https://www.bilibili.com/video/BV18K411m7FH/ 在自動(dòng)化測(cè)試框架當(dāng)中,我們也需要編寫(xiě): 用例執(zhí)行之前的環(huán)境準(zhǔn)備工作代碼(前置工作代碼

    2023年04月11日
    瀏覽(94)
  • pytest自動(dòng)化測(cè)試指定執(zhí)行測(cè)試用例

    pytest自動(dòng)化測(cè)試指定執(zhí)行測(cè)試用例

    1、在控制臺(tái)執(zhí)行 打開(kāi)cmd,進(jìn)入項(xiàng)目目錄 指定執(zhí)行某個(gè)模塊 ?pytest testcasesLogisticsPlatformCarSourcetest_CarSourceList.py 指定執(zhí)行某個(gè)目錄及其子目錄的所有測(cè)試文件 ?pytest?testcasesLogisticsPlatformCarSource 指定執(zhí)行某個(gè)模塊的某個(gè)類的某個(gè)測(cè)試用例 ? pytest testcasesLogisticsPlatformHome_p

    2024年02月15日
    瀏覽(23)
  • python+pytest接口自動(dòng)化(12)-自動(dòng)化用例編寫(xiě)思路 (使用pytest編寫(xiě)一個(gè)測(cè)試腳本)

    python+pytest接口自動(dòng)化(12)-自動(dòng)化用例編寫(xiě)思路 (使用pytest編寫(xiě)一個(gè)測(cè)試腳本)

    經(jīng)過(guò)之前的學(xué)習(xí)鋪墊,我們嘗試著利用pytest框架編寫(xiě)一條接口自動(dòng)化測(cè)試用例,來(lái)厘清接口自動(dòng)化用例編寫(xiě)的思路。 我們?cè)诎俣人阉?天氣查詢 ,會(huì)出現(xiàn)如下圖所示結(jié)果: 接下來(lái),我們以該天氣查詢接口為例,編寫(xiě)接口測(cè)試用例腳本。 針對(duì)某個(gè)功能做接口測(cè)試,首先我們需

    2024年02月04日
    瀏覽(30)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包