原創(chuàng)|使用教程|編輯:鄭恭琳|2020-06-05 10:48:39.160|閱讀 1278 次
概述:GraphQL端點(diǎn)需要與任何端點(diǎn)一樣多的測(cè)試,并且自動(dòng)化測(cè)試在這里也很有幫助。在下面了解有關(guān)如何使用測(cè)試自動(dòng)化來(lái)測(cè)試GraphQL的更多信息!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
相關(guān)鏈接:
GraphQL端點(diǎn)需要與任何端點(diǎn)一樣多的測(cè)試,并且自動(dòng)化測(cè)試在這里也很有幫助。在下面了解有關(guān)如何使用測(cè)試自動(dòng)化來(lái)測(cè)試GraphQL的更多信息!
GraphQL是一種API的查詢(xún)語(yǔ)言,始于Facebook,但自2016年開(kāi)始開(kāi)源。GraphQL提供的查詢(xún)和響應(yīng)的簡(jiǎn)化源自移動(dòng)應(yīng)用程序的使用,但它在簡(jiǎn)化復(fù)雜API的使用同時(shí)減少返回的數(shù)據(jù)量通用性方面具有普遍用途。
最初創(chuàng)建GraphQL時(shí),它是為解決特定問(wèn)題而構(gòu)建的。2011年,由于大多數(shù)用戶(hù)都通過(guò)瀏覽器與應(yīng)用程序進(jìn)行交互,因此我們開(kāi)始看到從Web到移動(dòng)設(shè)備的大量遷移。特別是在Facebook的情況下,這需要從應(yīng)用程序中多個(gè)不同位置調(diào)用多個(gè)API。根據(jù)方案要實(shí)現(xiàn)的目標(biāo),這些API傳遞的信息太多或太少。因此,為解決這一挑戰(zhàn),F(xiàn)acebook尋求創(chuàng)建一種簡(jiǎn)化信息傳遞并減少完成其方案所需的總流量的方法。
這催生了GraphQL。該技術(shù)最初由Facebook的iOS移動(dòng)團(tuán)隊(duì)使用,然后擴(kuò)展到其他移動(dòng)界面。很快,所有移動(dòng)交互中的絕大多數(shù)都利用了他們的GraphQL API。在2015年,F(xiàn)acebook宣布實(shí)施該技術(shù),全世界看到了使用該技術(shù)的優(yōu)勢(shì),并迅速采用了該技術(shù)。
GraphQL是存在于前端系統(tǒng)和后端API之間的抽象層。該抽象層允許您構(gòu)造查詢(xún),以訪問(wèn)后端中的多個(gè)資源,并將該數(shù)據(jù)匯總到一個(gè)有意義的響應(yīng)中。
后端API通常是細(xì)粒度的,因?yàn)槲覀兿霝槲覀兊膽?yīng)用程序創(chuàng)建可重用的構(gòu)建塊。但是,這并不能直接轉(zhuǎn)化為我們的用戶(hù)故事,也不能轉(zhuǎn)化為我們希望能夠從前端完成的操作。GraphQL是一種使用界面描述其系統(tǒng)行為的接口來(lái)簡(jiǎn)化與后端數(shù)據(jù)交互的方法,因此您可以從API中獲得有效的數(shù)據(jù)。
每個(gè)GraphQL模式的映射都對(duì)應(yīng)于函數(shù)。然后,這些功能將根據(jù)您的業(yè)務(wù)邏輯,針對(duì)您的REST API、數(shù)據(jù)庫(kù)以及收集請(qǐng)求的數(shù)據(jù)所需的任何其他資源,對(duì)后端進(jìn)行后續(xù)調(diào)用。
然后,這些函數(shù)會(huì)將必要的數(shù)據(jù)組合成一個(gè)響應(yīng),該響應(yīng)將保持與請(qǐng)求相同的形狀,從而很容易理解哪些數(shù)據(jù)與請(qǐng)求中的哪些元素相關(guān)聯(lián)。
Ask for what you need,
get exactly that - graphql.org
另外,可以設(shè)置GraphQL在組合查詢(xún)響應(yīng)時(shí)調(diào)用多個(gè)后端服務(wù)。這減少了消費(fèi)者花在瀏覽API文檔上以了解可從呼叫中獲得哪些信息的總時(shí)間。
與傳統(tǒng)的REST API接口相比,GraphQL具有許多優(yōu)點(diǎn)。與大多數(shù)技術(shù)實(shí)施一樣,沒(méi)有靈丹妙藥或一種技術(shù)堆棧比另一種更好。但是GraphQL獲得關(guān)注的原因之一是因?yàn)樗跈z索信息方面的靈活性。
使用傳統(tǒng)的REST API時(shí),通常您要進(jìn)行的檢索信息并不是您對(duì)系統(tǒng)的唯一調(diào)用。例如,如果要檢索我的帳戶(hù)余額,我要做的第一件事是檢索我的客戶(hù)編號(hào),然后使用該客戶(hù)編號(hào)檢索我的帳戶(hù)編號(hào)。有了帳號(hào)后,就可以查詢(xún)?cè)?帳號(hào)的余額了:
REST API沒(méi)有錯(cuò)。這就是它們的工作原理,它們使我們能夠創(chuàng)建離散的動(dòng)作,并可以以許多不同的方式加以利用。但是在這種特殊情況下,為了檢索我想要的信息,我必須使用鏈接在一起的三個(gè)API序列進(jìn)行調(diào)用。此外,如果我們考慮在每個(gè)API調(diào)用的交互過(guò)程中交換的數(shù)據(jù)量,我們必須發(fā)送適當(dāng)?shù)恼?qǐng)求并接收該模式定義的整個(gè)響應(yīng)。在我們的案例中,我實(shí)際上只需要處理客戶(hù)ID、帳戶(hù)ID和余額的三個(gè)值。
因此,讓我們看看在GraphQL世界中該交易如何進(jìn)行:
query { Customer(name:”Chris Colosimo”) { accountId{ Balance } } }
如果您是GraphQL的資深用戶(hù),請(qǐng)持懷疑態(tài)度接受該請(qǐng)求。我用它來(lái)說(shuō)明傳統(tǒng)上可以用三個(gè)API調(diào)用完成的事情可以用一個(gè)使用GraphQL來(lái)完成。最好的部分是,它不需要重新實(shí)現(xiàn)現(xiàn)有功能。
REST和GraphQL之間還有許多其他優(yōu)點(diǎn)和缺點(diǎn),但是需要特別注意的是GraphQL和REST API并不互斥,并且采用其中一種并不排除另一種。實(shí)際上,兩者是很和諧地合作的。
因此,問(wèn)題不是使用GraphQL還是REST API,而是何時(shí)應(yīng)該將GraphQL引入前端資源?從理論上講,答案實(shí)際上非常簡(jiǎn)單:當(dāng)您要為想要利用API的使用者創(chuàng)建簡(jiǎn)單有效的接口時(shí),應(yīng)該使用GraphQL。此外,當(dāng)您想減少前端與后端之間交換的總流量時(shí),您可能要考慮利用GraphQL,就像Facebook在移動(dòng)流量方面所做的那樣。
GraphQL是一項(xiàng)非常強(qiáng)大的技術(shù),可以使您的API使用者以更有效的方式訪問(wèn)其信息,但是為了確保體驗(yàn)以您期望的方式運(yùn)行,您需要驗(yàn)證GraphQL API。這是自動(dòng)化測(cè)試的地方。
有很多測(cè)試自動(dòng)化工具可以幫助您測(cè)試GraphQL API。我將為您提供使用Parasoft SOAtest的示例,Parasoft SOAtest是一種廣泛使用的API測(cè)試解決方案,它簡(jiǎn)化了跨多種技術(shù)驗(yàn)證關(guān)鍵API的艱巨挑戰(zhàn)。它支持各種消息格式和協(xié)議,并且已經(jīng)有一段時(shí)間支持GraphQL。
GraphQL端點(diǎn)接受查詢(xún)(作為字符串)并返回帶有查詢(xún)結(jié)果的JSON響應(yīng)。這非常適合SOAtest,因?yàn)镽EST客戶(hù)端可以進(jìn)行查詢(xún)以發(fā)送查詢(xún),而現(xiàn)有的JSON驗(yàn)證工具可以完成驗(yàn)證。
考慮下面的簡(jiǎn)單示例GraphQL查詢(xún):
query { users{ firstname lastname } }
預(yù)期的回報(bào)將類(lèi)似于:
{ “data” : { “users” : [ { “firstname” : “John”, “l(fā)astname” : “Doe” }, { “firstname” : “Alicia”, “l(fā)astname” : “Smith” } ] } }
可以在Parasoft SOAtest中將同一查詢(xún)作為REST客戶(hù)端創(chuàng)建:
在SOAtest中,GraphQL查詢(xún)作為名為“query”的字符串發(fā)送。響應(yīng)以JSON返回,SOAtest可以輕松地在其流量查看器中解釋和表示:
預(yù)期返回的值。顯然,我們需要一種自動(dòng)的方法來(lái)驗(yàn)證這些結(jié)果,并且SOAtest JSON斷言器在這里很方便。
SOAtest使用通過(guò)其JSON聲明器工具配置的聲明來(lái)驗(yàn)證JSON響應(yīng)。這是一個(gè)示例檢查,以查看返回的名字是否為字符串“Luis”(我們知道這不是有效值)。
再次運(yùn)行測(cè)試,測(cè)試失敗:
如您所見(jiàn),使用現(xiàn)有功能在SOAtest中直接測(cè)試GraphQL端點(diǎn)。
認(rèn)證呢?這已經(jīng)由SOAtest處理,并且現(xiàn)有的客戶(hù)端身份驗(yàn)證工具也可以與GraphQL端點(diǎn)一起使用:
對(duì)于GraphQL,SOAtest帶給REST、SOAP和其他API測(cè)試的好處仍然相同。專(zhuān)為適應(yīng)現(xiàn)有測(cè)試基礎(chǔ)架構(gòu)而設(shè)計(jì),Parasoft SOAtest通過(guò)幫助測(cè)試人員更智能地工作來(lái)加速測(cè)試,從而實(shí)現(xiàn)敏捷開(kāi)發(fā),而無(wú)腳本測(cè)試則可促進(jìn)跨開(kāi)發(fā)、測(cè)試、性能和安全團(tuán)隊(duì)的協(xié)作。
Parasoft SOAtest使測(cè)試易于創(chuàng)建、易于管理和協(xié)調(diào)以及易于運(yùn)行和分析。除了GraphQL之外,SOAtest對(duì)120多種消息格式/協(xié)議的支持以及AI和機(jī)器學(xué)習(xí)的輔助下的測(cè)試生成使API測(cè)試變得更加容易。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn