您如何模拟REST API接口?

时间:2017-01-25 08:45:04

标签: java python node.js rest selenium

我有一个网络应用程序,我想使用Selenium进行测试,此应用程序使用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
    ...

3 个答案:

答案 0 :(得分:0)

对于模拟简单的REST API,您可以尝试基于node.js的json-server

设置起来很简单,你只需创建带有一些数据的JSON文件来模拟db,json-server将为你创建所有常见的REST API路径。

答案 1 :(得分: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)

在Cookie交换的情况下,标头非常有用。请求将处理此事。

您可以轻松登录到休息api或发送PUT / POST / DELETE / GET消息! 一切皆有可能,无需切换到Java或其他语言。 如果您有其他疑问或解决了您的问题,请与我们联系。有一个伟大的!

答案 2 :(得分:0)

有许多库和工具可以帮助您解决此问题。你在谈论的是创建测试工具或模拟器/模拟器。在大多数情况下,通常建议构建和开发后端的人员为您提供线束,因为他们是API的所有者并控制不同的版本和更改。相反,您可以向他们提供您的客户,以便他们了解您如何使用API​​。

如果他们不能这样做,那么你需要自己创建一个安全带。帮助您为HTTP API执行此操作的最佳工具是WireMock

http://wiremock.org/

在您的示例中,您可能希望将其作为Stand Alone:

运行

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

然后使用JSON文件配置来定义行为。

我的首选是将WireMock测试工具包装和部署为Docker镜像并发布到Docker存储库,以便其他人可以使用它。在这种情况下,它只是一个用以下内容创建Dockerfile并运行docker容器的情况:

<强> 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]