【问题标题】:How do you simulate a REST API interface?如何模拟 REST API 接口?
【发布时间】:2017-01-25 18:51:56
【问题描述】:

我有一个网络应用程序,我想使用 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
    ...

【问题讨论】:

  • 不确定我是否理解您想要做什么,但您可以使用swagger.io 创建简单的REST API 并使用docs.python-requests.org/en/masterHTTP-requests 发送到REST API
  • 不懂问题。 SOAP UI - soapui.org 怎么样?
  • @Baz 我更新了我的回复,以解释 Python 中使用 requests 模块的可能性。 (处理休息消息的非常简单的方法)。祝你有美好的一天。

标签: java python node.js rest selenium


【解决方案1】:

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

很容易设置,你只需要创建带有一些数据的 JSON 文件来模拟 db,json-server 会为你创建所有常见的 REST API 路由。

【讨论】:

  • @SphDev 在我上面的问题中,我举了一个包含两个测试的示例,其中同一端点的响应不同。这可以用 json-server 完成还是我应该使用其他东西?
  • 不确定它是否能正常工作,但您可以尝试为每个测试用例声明必要的 json 对象并将其保存到测试函数内的 db.json 文件中; json-server 有--watch 选项,每次文件更改时都应该重新加载API。
【解决方案2】:

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

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

http://wiremock.org/

在您的示例中,您可能希望将其作为独立运行:

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]

【讨论】:

    【解决方案3】:

    我会毫无问题地选择 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 或其他语言。 如果您有其他疑问或解决了您的问题,请告诉我。祝你好运!

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多