最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

你知道嗎?webservice的接口做自動(dòng)化,其實(shí)很簡(jiǎn)單!

2020-11-25 16:24 作者:軟件測(cè)試檸檬班Pro  | 我要投稿

大家做接口自動(dòng)化的時(shí)候,測(cè)的大多數(shù)接口都是基于 http 類型協(xié)議的,在 python 中使用 requests 去請(qǐng)求接口還是非常簡(jiǎn)單的。


最近有部分小伙伴反映在工作中碰到了 webservice 的接口,表示不知道怎么用 python 去做自動(dòng)化。


其實(shí)不管什么類型的接口實(shí)現(xiàn)自動(dòng)化的思路都是一樣的,在接口請(qǐng)求上會(huì)有一些有區(qū)別。


webservice 是基于 SOAP 協(xié)議的,SOAP 協(xié)議其實(shí)就是在 http 協(xié)議的基礎(chǔ)上,基于 XML 來進(jìn)行數(shù)據(jù)傳輸?shù)囊环N簡(jiǎn)易協(xié)議(大家可以自行擴(kuò)展學(xué)習(xí)),在 python2 中有一個(gè)叫做 suds 的庫(kù),可以創(chuàng)建 SOAP 協(xié)議的客戶端,用來請(qǐng)求 webservice 的接口。


雖然 python3 中不再維護(hù) suds 這個(gè)庫(kù)了,但是 python 中依然維護(hù)了一些 suds 的分支,比如說 suds-jurko、suds-py3 等等。接下來就給大家詳細(xì)的介紹一下如何使用 suds-py3 來請(qǐng)求 webservice 的接口


suds-py3 安裝

關(guān)于 suds-py 的安裝,安裝好 python 之后,直接在命令行使用 pip 進(jìn)行安裝就可以了。

  • 安裝命令

    pip install suds-py3

  • suds-py3 的官方文檔:

    ?https://suds-py3.readthedocs.io/en/latest/

    WSDL 文檔的介紹

    WebService 的接口是基于 SOAP 協(xié)議,每個(gè)服務(wù)地址都有一個(gè)對(duì)應(yīng) WSDL 文件,WSDL 是一個(gè)遵循 WSDL-XML 模式的 XML文檔,是用來精確描述 Web 服務(wù)的文檔。


    一個(gè) WSDL 文檔通常包含 8 個(gè)重要的元素,即 definitions、types、import、message、portType、operation、binding、service 元素。這些元素嵌套在 definitions 元素中,如下案例所示:

    WSDL 文檔中我們可以看到這個(gè) webservice 的地址中提供了那些服務(wù)(接口),每個(gè)服務(wù)需要一些什么樣的參數(shù)等等。


    和 HTTP 不同的是一個(gè) webservice 地址中提供了多個(gè)服務(wù)(接口),我們要去使用那個(gè)服務(wù)(接口),調(diào)用對(duì)應(yīng)的方法進(jìn)行訪問即可,關(guān)于 WSDL 文檔如何去看大家也可以自行擴(kuò)展學(xué)習(xí)這邊不做過多的擴(kuò)展,重點(diǎn)給大家介紹在 python 中如何去請(qǐng)求 webservice 接口。


    suds 請(qǐng)求 webservice

    1、案例接口


    為了方便大家學(xué)習(xí),我從網(wǎng)上找了 2 個(gè) webservice 接口的 url 地址來給大家做案例演示:

    • QQ 在線狀態(tài)查詢接口:

      http://ws.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl

      • 參數(shù):QQ 號(hào)碼

      • 返回:Y、N、E(Y 代表在線、N 代表離線、E 代碼參數(shù)有誤?。?/p>

    • 天氣預(yù)報(bào)查詢接口:

      http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

    2、案例一


    這邊我們以 QQ 登錄狀態(tài)查詢這個(gè)服務(wù)地址為例,給大家來講解;要知道一個(gè) webservice 的地址中有多少個(gè)接口,我們可以直接瀏覽訪問 url 地址看 wsdl 的描述文檔,我們也可以借助于 soapUI 這個(gè)工具,當(dāng)然我們也可以通過 suds 庫(kù)創(chuàng)建一個(gè)客戶端對(duì)象,訪問該地址去看:

    • 代碼如下:

    from?suds?import?client

    url="http://ws.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"

    # 訪問url地址返回一個(gè)client對(duì)象

    web_s = client.Client(url)

    # 打印客戶端對(duì)象,就可以看到該地址下所有的服務(wù)(接口)

    print(web_s)

    • 詳細(xì)信息如下:

    • 請(qǐng)求具體的某個(gè)接口

      知道接口名和參數(shù)之后,我們就可以請(qǐng)求對(duì)應(yīng)的接口

    from?suds?import?client

    url="http://ws.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"

    # 訪問url地址返回一個(gè)client對(duì)象

    web_s = client.Client(url)

    # 準(zhǔn)備參數(shù),請(qǐng)求接口

    res = web_s.service.qqCheckOnline(qqCode='121278987')

    # 獲取返回的結(jié)果:

    print(res)


    3、案例二


    上面的 QQ 狀態(tài)查詢是一個(gè)比較簡(jiǎn)單的案例,接口的請(qǐng)求參數(shù)和返回參數(shù)都比較簡(jiǎn)單,那么接下來看一個(gè)稍微復(fù)雜一點(diǎn)的接口,天氣預(yù)報(bào)查詢:

    • 第一次請(qǐng)求

      用上一個(gè)案例的代碼,修改地址直接請(qǐng)求這個(gè)時(shí)候會(huì)出現(xiàn)報(bào)錯(cuò):


      from?suds?import?client

      url="http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl"

      # 訪問url地址返回一個(gè)client對(duì)象

      web_s = client.Client(url)

      # 打印客戶端對(duì)象,就可以看到該地址下所有的服務(wù)(接口)

      print(web_s)

    • 運(yùn)行錯(cuò)誤:

    上述代碼報(bào)錯(cuò)的原因是因?yàn)?,suds 在解析返回來的 WSDL 的時(shí)候,發(fā)現(xiàn)返回的 XML 中的有些類型,不在標(biāo)準(zhǔn)的 XML 架構(gòu)命名空間中,因此解析的時(shí)候報(bào)錯(cuò)了,這個(gè)時(shí)候我們需要加上如下幾行代碼,導(dǎo)入當(dāng)前服務(wù)的命名空間

    • 再次請(qǐng)求

    from?suds?import?client

    url="http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl"

    from?suds.xsd.doctor?import?Import, ImportDoctor

    imp=Import('http://www.w3.org/2001/XMLSchema',location='http://www.w3.org/2001/XMLSchema.xsd')

    imp.filter.add('http://WebXml.com.cn/')

    doctor=ImportDoctor(imp)

    web_s = client.Client(url,doctor=doctor)

    print(web_s)

    • 響應(yīng)結(jié)果

    打印連接的客戶端可以看到,應(yīng)該服務(wù)地址中有 6 個(gè)服務(wù)(接口),然后下面還有一些類型的介紹。如果要調(diào)用某個(gè)方法,就用客戶端對(duì)象調(diào)用對(duì)應(yīng)的方法即可。


    4、自定義類型的請(qǐng)求參數(shù)

    • 基本的字符串類型:

    上面 2 個(gè)案例,接口的請(qǐng)求參數(shù)都是比較標(biāo)準(zhǔn)的字符串類型,調(diào)用的時(shí)候直接傳入即可,有些服務(wù)的參數(shù)可能是服務(wù)命名空間中自定義的參數(shù)類型,那么調(diào)用相關(guān)服務(wù)之前就需要處理參數(shù)了。

    • 命名空間內(nèi)自定義的參數(shù)類型

    命名空間內(nèi)自定義的參數(shù)類型,在調(diào)用相關(guān)方法之前,我們需要去獲取參數(shù)類型的結(jié)構(gòu),然后按照結(jié)構(gòu)構(gòu)造參數(shù)

    • 參數(shù)類型的獲取

      • 案例

      上面是一個(gè)內(nèi)部 webservice 地址(不對(duì)外開放),可以看到該服務(wù)下面有三個(gè)方法,每個(gè)方法中的請(qǐng)求參數(shù)都是命名空間內(nèi)自定義的類型,如果說沒有接口文檔可以參考,我們?nèi)绾沃肋@三個(gè)類型的參數(shù)應(yīng)該傳入什么呢?


      我們以 sendMCode 這個(gè)方法為例,這個(gè)方法需要一個(gè) SendCodeParams 類型的參數(shù),我們要獲取該類型參數(shù)的結(jié)構(gòu),我們可以直接創(chuàng)建一個(gè)該類型的對(duì)象,打印即可看到該參數(shù)的結(jié)構(gòu)


      from?suds?import?client

    • # 內(nèi)部地址url =?'http://127.0.0.1:8080/sms-service-war-1.0/ws/smsFacade.ws?wsdl'cli = client.Client(url)# 創(chuàng)建參數(shù)類型params = cli.factory.create("ns0:sendCodeParams")# 打印參數(shù)

    • print
    • (params)

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

    運(yùn)行上述代碼,就可以看到 sendCodeParams 這個(gè)參數(shù)的結(jié)構(gòu),那么在請(qǐng)求該接口時(shí),按照該格式去組織參數(shù)即可(其中有些是非必填參數(shù),這邊是看不出來的,需要參考接口文檔)。


    好了,關(guān)于 webservice 的接口請(qǐng)求就給大家介紹到這里,關(guān)于 suds 更多的使用方法,大家可以參考官方文檔

    聲明:本文為檸檬班木森老師原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處!

    你知道嗎?webservice的接口做自動(dòng)化,其實(shí)很簡(jiǎn)單!的評(píng)論 (共 條)

    分享到微博請(qǐng)遵守國(guó)家法律
    广南县| 尖扎县| 儋州市| 浪卡子县| 永年县| 民乐县| 中山市| 马尔康县| 德清县| 临邑县| 荣昌县| 遵化市| 宜城市| 平邑县| 翁牛特旗| 海阳市| 阿坝县| 古交市| 扎兰屯市| 灌云县| 诏安县| 习水县| 吉木乃县| 崇信县| 伊宁市| 洪雅县| 深泽县| 康保县| 安岳县| 师宗县| 札达县| 庆阳市| 建瓯市| 镇远县| 彝良县| 东丽区| 靖江市| 哈巴河县| 乐安县| 卢龙县| 松溪县|