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