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

異步http接口調(diào)用庫:httpx

這篇具有很好參考價(jià)值的文章主要介紹了異步http接口調(diào)用庫:httpx。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

談到http接口調(diào)用,Requests大家并不陌生,例如,robotframework-requests、HttpRunner等HTTP接口測試庫/框架都是基于它開發(fā)。這里將介紹另一款http接口測試框架:httpx。

它的API和Requests高度一致。

github: GitHub - encode/httpx: A next generation HTTP client for Python. ??

安裝:

> pip install httpx

httpx 簡單使用

當(dāng)然,它是不支持python2.x的。

  • 簡單的get調(diào)用
import httpx
 
r = httpx.get("http://httpbin.org/get")
print(r.status_code)
print(r.json())

執(zhí)行結(jié)果:

200
{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-httpx/0.12.1', 'X-Amzn-Trace-Id': 'Root=1-5ea5b58c-e446c44392ea090809e8a4bc'}, 'origin': '113.97.33.224', 'url': 'http://httpbin.org/get'}
  • 帶參數(shù)的post調(diào)用
import httpx
 
payload = {'key1': 'value1', 'key2': 'value2'}
r = httpx.post("http://httpbin.org/post", data=payload)
print(r.json())

執(zhí)行結(jié)果:

{'args': {}, 'data': '', 'files': {}, 'form': {'key1': 'value1', 'key2': 'value2'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '23', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'python-httpx/0.12.1', 'X-Amzn-Trace-Id': 'Root=1-5ea5b61d-1871d10e80b8324e48ea475e'}, 'json': None, 'origin': '113.97.33.224', 'url': 'http://httpbin.org/post'}

你會(huì)發(fā)現(xiàn)這幾乎和requests一模一樣,只不過把requests 換成了httpx。

httpx?異步調(diào)用

接下來認(rèn)識(shí)httpx的異步調(diào)用:

import httpx
import asyncio
 
 
async def main():
    async with httpx.AsyncClient() as client:
        resp = await client.get('http://httpbin.org/get')
        result = resp.json()
        print(result)
 
 
asyncio.run(main())

這里用到了async 、await, asyncio等,等參考我關(guān)于python異步I/O的基礎(chǔ)介紹:https://www.cnblogs.com/fnng/p/12757395.html

異步的調(diào)用的優(yōu)勢
我們發(fā)現(xiàn),采用異步會(huì)讓接口的調(diào)用更加復(fù)雜,那為什么還要使用異步呢?當(dāng)你要調(diào)用1000次接口時(shí),那么異步調(diào)用可以讓你的調(diào)用更快。接下來我們通過簡單讓例子進(jìn)行對(duì)比。

以我flask開發(fā)的簡單接口為例子:

GitHub - defnngj/learning-API-test: learning API test

為了測試的更加準(zhǔn)確性,我將flask服務(wù)部署在了另一臺(tái)電腦,測試機(jī)與被測服務(wù)分離。

  • httpx 同步調(diào)用
# 同步調(diào)用
import time
import httpx
 
 
def make_request(client):
    resp = client.get('http://192.168.0.7:5000')
    result = resp.json()
    # print(result)
    assert result["code"] == 10200
 
def main():
    session = httpx.Client()
 
    # 1000 次調(diào)用
    for _ in range(1000):
        make_request(session)
 
 
if __name__ == '__main__':
    # 開始
    start = time.time()
    main()
    # 結(jié)束
    end = time.time()
    print(f'同步:發(fā)送1000次請(qǐng)求,耗時(shí):{end - start}')

結(jié)果:

...
同步:發(fā)送1000次請(qǐng)求,耗時(shí):52.948561906814575
  • httpx 異步調(diào)用
# 異步調(diào)用
import httpx
import asyncio
import time
 
async def request(client):
    resp = await client.get('http://192.168.0.7:5000')
    result = resp.json()
    # print(result)
    assert result["code"] == 10200
 
 
async def main():
    async with httpx.AsyncClient() as client:
        # # 開始
        # start = time.time()
 
        # 1000 次調(diào)用
        task_list = []
        for _ in range(1000):
            req = request(client)
            task = asyncio.create_task(req)
            task_list.append(task)
        await asyncio.gather(*task_list)
 
 
if __name__ == "__main__":
    #開始
    start = time.time()
    asyncio.run(main())
    # 結(jié)束
    end = time.time()
    print(f'異步:發(fā)送1000次請(qǐng)求,耗時(shí):{end - start}')

結(jié)果:

...
異步:發(fā)送1000次請(qǐng)求,耗時(shí):3.903275728225708

將httpx用于請(qǐng)求端,同步與異步請(qǐng)求差距非常明顯。

以上的例子已經(jīng)放到 learning-API-test github項(xiàng)目

總結(jié)
* 這里只是拿 flask 非異步框架做為接口服務(wù)端進(jìn)行對(duì)比,如果如果將接口服務(wù)同樣換作前面介紹的 snaic 異步框架,上面的兩組測試對(duì)比并不明顯(snaic的異步接口服務(wù)處理同步請(qǐng)求更快),在安裝 snaic的時(shí)候會(huì)發(fā)現(xiàn),他同樣也集成了 httpx 庫。

* 為什么要學(xué)習(xí)異步,因?yàn)槲覀児居泻芏嘟涌谑钱惒秸{(diào)用的,所以,我想真正搞懂這個(gè)概念,就這么簡單!保持在工作中對(duì)技術(shù)的好奇心。

異步與多線程的區(qū)別?這是我在學(xué)習(xí) 異步時(shí)候的一個(gè)疑問,我找到了一個(gè)比較形象的例子。

以火車站購票場景為例:一個(gè)火車站為一個(gè)進(jìn)程,一個(gè)窗口和售票員的組合為一個(gè)線程:

多線程:火車站開了N個(gè)窗口售票員,我們?nèi)ベI票,會(huì)有工作人員(CPU)指定我們?nèi)ツ硞€(gè)窗口買票,你被安排到某個(gè)窗口后,告訴售票員你的請(qǐng)求(咨詢或買票),售票員執(zhí)行操作,如果這個(gè)過程中發(fā)送的阻塞,也是窗口售票員的阻塞(比如查票的過程),但是因?yàn)槟汩_了很多個(gè)窗口,其他買票的人可以被安排去另外的空閑窗口,如果所有窗口都滿了,工作人員就不會(huì)給你安排了,直到有空的窗口出來;
多進(jìn)程(并行):建多個(gè)火車站售票,火車站與火車站間互不影響,看買票的自己想去哪里(這里不討論負(fù)載均衡);
異步:火車站只有一個(gè)窗口售票員,但是窗口前有一個(gè)登記臺(tái)(事件循環(huán)),你把你想買的票告訴給登記臺(tái),并留下你的手機(jī)(回調(diào)函數(shù)),然后你就可以走了,由于登記臺(tái)只是登記了你的請(qǐng)求,并沒有做任何其他操作,所以這個(gè)耗時(shí)基本忽略不計(jì)的。之后售票員處理完了上一個(gè)任務(wù)了,就會(huì)自己去登記臺(tái)取剩下的未完成的任務(wù),直到取到你的任務(wù),操作完后,有票沒票都會(huì)通過手機(jī)通知你,如果有票還會(huì)往你的手機(jī)發(fā)車票的二維碼;

總結(jié):

感謝每一個(gè)認(rèn)真閱讀我文章的人?。?!

作為一位過來人也是希望大家少走一些彎路,如果你不想再體驗(yàn)一次學(xué)習(xí)時(shí)找不到資料,沒人解答問題,堅(jiān)持幾天便放棄的感受的話,在這里我給大家分享一些自動(dòng)化測試的學(xué)習(xí)資源,希望能給你前進(jìn)的路上帶來幫助。

異步http接口調(diào)用庫:httpx,技術(shù)分享,httpx

?

文檔獲取方式:

加入我的軟件測試交流群:1007119548免費(fèi)獲取~(同行大佬一起學(xué)術(shù)交流,每晚都有大佬直播分享技術(shù)知識(shí)點(diǎn))

這份文檔,對(duì)于想從事【軟件測試】的朋友來說應(yīng)該是最全面最完整的備戰(zhàn)倉庫,這個(gè)倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!

以上均可以分享,只需要你搜索vx公眾號(hào):程序員雨果,即可免費(fèi)領(lǐng)取文章來源地址http://www.zghlxwxcb.cn/news/detail-791589.html

到了這里,關(guān)于異步http接口調(diào)用庫:httpx的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(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)文章

  • QNetworkAccessManager實(shí)現(xiàn)可手動(dòng)中斷和超時(shí)機(jī)制的異步Http網(wǎng)絡(luò)接口

    Qt中的網(wǎng)絡(luò)訪問 API 是圍繞 QNetworkAccessManager 對(duì)象構(gòu)建的,該對(duì)象保存它發(fā)送的請(qǐng)求的通用配置和設(shè)置。因此實(shí)現(xiàn)Http請(qǐng)求必然需要使用QNetworkAccessManager 來開發(fā)。 需要注意的是:QNetworkAccessManager 是基于 QObject 的,所以只能在它所屬的線程中使用。 1.超時(shí)機(jī)制:利用QTimer定時(shí),在

    2024年03月19日
    瀏覽(18)
  • 【并發(fā)編程】線程池多線程異步去分頁調(diào)用其他服務(wù)接口獲取海量數(shù)據(jù)

    前段時(shí)間在做一個(gè)數(shù)據(jù)同步工具,其中一個(gè)服務(wù)的任務(wù)是調(diào)用A服務(wù)的接口,將數(shù)據(jù)庫中指定數(shù)據(jù)請(qǐng)求過來,交給kafka去判斷哪些數(shù)據(jù)是需要新增,哪些數(shù)據(jù)是需要修改的。 剛開始的設(shè)計(jì)思路是,,我創(chuàng)建多個(gè)服務(wù)同時(shí)去請(qǐng)求A服務(wù)的接口,每個(gè)服務(wù)都請(qǐng)求到全量數(shù)據(jù),由于這些

    2024年02月13日
    瀏覽(32)
  • 探索高效的HTTP異步接口測試方法:從輪詢等待到自動(dòng)化方案

    探索高效的HTTP異步接口測試方法:從輪詢等待到自動(dòng)化方案

    本文將深入探討HTTP異步接口測試的多個(gè)方面,包括輪詢等待、性能測試以及自動(dòng)化方案。通過詳細(xì)的解釋和實(shí)際案例,幫助您了解如何有效地測試異步接口,確保系統(tǒng)的穩(wěn)定性和性能。 ? 在現(xiàn)代軟件開發(fā)中,HTTP異步接口扮演著至關(guān)重要的角色,它們?cè)试S應(yīng)用程序在進(jìn)行任務(wù)

    2024年02月11日
    瀏覽(28)
  • HTTP接口調(diào)用和RESTful調(diào)用的區(qū)別

    概述 HTTP接口調(diào)用是一種基于HTTP協(xié)議的遠(yuǎn)程調(diào)用方式,可以通過URL進(jìn)行調(diào)用,適用于不同編程語言之間的調(diào)用。而RESTful調(diào)用是一種基于REST架構(gòu)風(fēng)格的遠(yuǎn)程調(diào)用方式,是HTTP接口調(diào)用的一種特殊實(shí)現(xiàn),只是HTTP接口調(diào)用不一定要遵循RESTful的設(shè)計(jì)原則。 區(qū)別 URL表達(dá)形式不同: ○

    2024年02月09日
    瀏覽(14)
  • Java調(diào)用HTTP接口

    說明 Java調(diào)用HTTP接口可以使用Java的HttpURLConnection或HttpClient等工具 HttpURLConnection HttpClient

    2024年02月08日
    瀏覽(19)
  • python調(diào)用http接口

    在Python中,你可以使用內(nèi)置的 urllib 庫來調(diào)用HTTP接口。下面是一個(gè)簡單的示例,展示如何使用 urllib.request 模塊來發(fā)送GET請(qǐng)求: 在這個(gè)示例中,我們首先定義了要請(qǐng)求的URL。然后,我們使用 urlopen() 函數(shù)發(fā)送GET請(qǐng)求,并將響應(yīng)對(duì)象存儲(chǔ)在變量 response 中。最后,我們使用 read()

    2024年01月25日
    瀏覽(16)
  • ABAP:調(diào)用HTTP接口詳解

    ABAP:調(diào)用HTTP接口詳解

    DATA:pv_http_client TYPE REF TO if_http_client, pv_url TYPE string. 1.可以通過URL連接或者IP:端口連接,根據(jù)實(shí)際情況而定, 建議使用URL,省去地址服務(wù)器域名轉(zhuǎn)換 \\\"URL接連 CALL METHOD cl_http_client=create_by_url EXPORTING url = pv_url IMPORTING client = pv_http_client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2

    2023年04月12日
    瀏覽(19)
  • 使用Java調(diào)用http接口

    使用Java調(diào)用HTTP接口的步驟如下: 創(chuàng)建一個(gè)URL對(duì)象,指定HTTP接口的地址。 打開URL連接,獲取URLConnection對(duì)象。 設(shè)置URLConnection對(duì)象的請(qǐng)求方式、超時(shí)時(shí)間等參數(shù)。 發(fā)送請(qǐng)求,并獲取服務(wù)器返回的響應(yīng)結(jié)果。 處理響應(yīng)結(jié)果,可以將響應(yīng)結(jié)果轉(zhuǎn)換成字符串或其他格式。 下面是一

    2024年02月15日
    瀏覽(20)
  • jmeter篇之http接口調(diào)用

    jmeter篇之http接口調(diào)用

    使用Jmeter實(shí)現(xiàn)簡單的接口調(diào)用 安裝 Jmeter已安裝并配置完成,安裝方法及配置請(qǐng)參考: https://blog.csdn.net/lw1558533893/article/details/123649439安裝及配置 使用 1、找打安裝目錄下的bin文件夾(apache-jmeter-5.1bin),我的是在E盤,如下圖所示: 2、在 bin文件夾中找到對(duì)應(yīng)的jmeter.bat文件,

    2024年02月05日
    瀏覽(34)
  • http接口調(diào)用成功卻返回404

    記錄調(diào)用http接口成功卻返回404的問題 問題表現(xiàn)如下: 1、前端調(diào)用http接口,接口返回404 2、通過debug確認(rèn),接口調(diào)用是成功的 3、接口會(huì)返回JSON數(shù)據(jù) 使用案例來表現(xiàn)該問題 1、后端接口代碼 2、前端調(diào)用返回的碼為: 404 ,但實(shí)際上調(diào)用是正常的,這里就不截圖了 ? 原因:后

    2024年02月10日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包