2017-01-25 51 views
1

我有一個Web應用程序,我想使用Selenium進行測試,此應用程序使用REST API與後端進行通信。如何模擬REST API接口?

我的理解是,Selenium主要用於測試應用程序中的流程以及這些狀態中每個狀態的外觀/存在。這表明在編寫Selenium測試來模擬後端時,這很有意義。 Python是我選擇的語言,但我也熟悉node.js,javascript和JAVA。你會推薦什麼方法來模擬REST API。我正在考慮用Python編寫一個服務器。我可以在我的測試環境中創建此服務器,並配置它如何響應來自前端的按測試測試基礎的請求。有什麼工具,你可能會推薦我的圖書館?

我還應該補充說我使用raml來定義我的api。

所以我後端的模擬,測試會是這個樣子:

def test_no_table_for_one_user(): 
    # configure reply for api request 
    rest_sim.get_users_response = (200, [{name: "Foo Bar", address: "West side"}]) 
    navigate_to_users_page() 

    # test that this users details are presented without the use of a table 
    ... 

def test_table_for_multiple_users(): 
    # configure reply for api request 
    rest_sim.get_users_response = (200, [{name: "Foo Bar", address: "West side"}, {name: "Foo Baz", address: "East side"}]) 
    navigate_to_users_page() 

    # test that the two users are presented in the form of a table 
    ... 
+0

不知道,我明白了什麼你想這樣做,但你可以用http://swagger.io/創建簡單的'REST API',並使用http://docs.python-requests.org/en/master/發送'HTTP'-請求到' REST API' – Andersson

+0

不要理解問題。 SOAP UI如何 - https://www.soapui.org/? – Justas

+0

@Baz我已經更新了我的回覆,以解釋在Python中使用請求模塊可能會發生什麼。 (很簡單的方法來處理休息消息)。祝你今天愉快。 –

回答

0

對於嘲諷簡單的REST API,你可以嘗試的node.js基於json-server

它很容易設置,你只需要創建帶有一些數據的JSON文件來模擬數據庫,json-server會爲你創建所有常見的REST API路由。

+0

Nock https://github.com/node-nock/nock也不錯 –

+0

@SphDev在我上面的問題中,我舉了兩個測試的例子,其中對於同一端點的響應是不同的。這可以用json-server來完成,還是應該使用其他的東西? – Baz

+0

不確定它能否正常工作,但可以嘗試爲每個測試用例聲明必要的json對象,並將其保存到測試函數內的db.json文件中; json-server具有'--watch'選項,每次文件更改時都應該重新加載API。 – idmitme

0

我會選擇Python沒有任何問題。

請看看請求模塊: http://docs.python-requests.org/en/master/

,它的安裝和使用REST消息請求很容易。不管你需要做什麼,我都會繼續使用Python。 如何使用REST API從請求安裝後(PIP與爲例):

import requests 
class RESTIF(): 
    ''' 
    Class to handle a connection towards your server 
    ''' 

    def __init__(self): 
     '''Initialization of a single Session and header dictionary to be used for REST requests.'''  
     self.nSession = requests.Session() 
     # Default header values to get initial connection: 
     self.header = {"Content-Type":"application/json", 
         "KeepAlive":"true", 
         "Authorization":"Basic ", 
         "Cookie": None} 

     def action(self, URL, JSONdata): 
      myCreate = self.nSession.post(URL, headers=self.header, data=JSONdata) 

的標題是餅乾交換的情況下,非常有用。請求會照顧到這一點。

您可以處理登錄到休息api或輕鬆發送PUT/POST/DELETE/GET消息! 一切皆有可能,無需切換到Java或其他語言。 如果您有其他疑問或解決了您的問題,請讓我知道。有一個偉大的!

0

有許多庫和工具可以幫助你做到這一點。你在談論的是創建一個測試工具,或者模擬器/模擬器。在大多數情況下,通常建議構建和開發後端的人員爲您提供線束,因爲他們是API的所有者,並控制不同的版本和更改。相反,您可以向他們提供您的客戶,以便他們瞭解您如何使用API​​。

如果他們不能這樣做,那麼您將需要自己創建一個線束。最好的工具來幫助你的HTTP API的做,這是WireMock

http://wiremock.org/

在您的例子,你可能會想運行此爲獨立式:

http://wiremock.org/docs/running-standalone/

,然後使用JSON文件配置來定義行爲。

我的首選是將WireMock測試工具作爲Docker鏡像進行包裝和部署,併發布到Docker存儲庫,以便其他人可以使用它。在這種情況下,它只是具有以下和運行的泊塢窗容器創建Dockerfile的情況:

Dockerfile

FROM java:8 
WORKDIR /opt 
RUN apt-get install wget 
RUN wget http://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-standalone/2.5.0/wiremock-standalone-2.5.0.jar 
RUN mkdir mappings 
VOLUME /opt/mappings 
EXPOSE 8080 
CMD java -jar wiremock-standalone-2.5.0.jar 

命令行

docker build -t wiremock/apiname:[version] . 
docker run -d -p [exposedport]:8080 -v /directory/with/json:/opt/mappings --name apiname wiremock/apiname:[version]