gpt4 book ai didi

FitNesse:使用 RestFixture 创建测试的工作流程

转载 作者:行者123 更新时间:2023-12-04 13:18:53 25 4
gpt4 key购买 nike

FitNesse 新手,我想使用 RestFixture 测试 Rest API,但不知道从哪里开始。

有人能给我一步一步的工作流程和 GET、POST 和 DELETE 请求的示例决策表吗?

我们使用 JSON 响应,发布时如何将它们输入到决策表中?

谢谢

最佳答案

此答案提供了安装 RestFixture 的说明书和介绍验收测试框架的部分。

安装

了解如何开始使用 RestFixture 的一种方法是查看 RestFixtureLiveDoc .该项目提供了 RestFixture 本身的文档,它由 Maven 管理。如果您更喜欢这种方式,请阅读以下内容。

假设

  • 你安装了一个有效的 JDK(尝试从命令提示符 java -version )
  • 你已经安装了 maven(尝试 mvn --version)
  • 您安装了版本控制软件。虽然,我不会在这个答案的上下文中讨论如何使用它。

  • 食谱
  • 创建一个空的 Maven 项目(如 here 所述)。简而言之:
    mvn archetype:generate -DgroupId=smartrics.restfixture.sample -DartifactId=scratch -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  • 相应地更改组和工件的名称,以适应您
  • 删除文件 src/test/java/smartrics/restfixture/sample/*.java src/main/java/smartrics/restfixture/sample/*.java
  • cd scratch (或您选择的任何名称)并编辑 pom.xml
  • 添加 RestFixture 依赖项(RestFixture 的最新版本是 here )。例如:

  • <dependency>
    <groupId>smartrics.restfixture</groupId>
    <artifactId>smartrics-RestFixture</artifactId>
    <version>4.1</version>
    </dependency>
  • 添加 Maven 依赖插件以在本地复制依赖(这不是必需的,但我觉得很方便)

  • <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
    <execution>
    <configuration>
    <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
    </configuration>
    <goals>
    <goal>copy-dependencies</goal>
    </goals>
    </execution>
    </executions>
    </plugin>
  • 现在,您应该可以 mvn package并构建/复制依赖项(在 target/dependencies 目录中检查它们)
  • 您可能希望通过添加
  • 更新到最新的 FitNesse 版本(检查可用的最新版本 here)

    <dependency>
    <groupId>org.fitnesse</groupId>
    <artifactId>fitnesse</artifactId>
    <version>20151230</version>
    </dependency>
  • 然后做mvn clean package
  • 创建文件 start.bat使用此内容,为 Fitnesse 创建启动命令(在 Linux 上,您应该能够创建等效的 start.sh):

  • setLocal EnableDelayedExpansion
    set CLASSPATH="
    for /R target\dependencies %%a in (*.jar) do (
    set CLASSPATH=!CLASSPATH!;%%a
    )
    set CLASSPATH=!CLASSPATH!"
    java -cp !CLASSPATH! fitnesseMain.FitNesseMain -p 9090 -d src\main\resources -e 0
  • 使用 start.bat 启动 FitNesse (FitNesse 创建所有相关资源需要一些时间)
  • 从您的浏览器转到 http://localhost:9090检查它是否有效
  • 您可以通过 CTRL-C 停止 FitNesse
  • 此时您应该考虑提交到版本控制。如果你使用 git,这些项目可能会被添加到忽略列表中:

  • target/
    src/main/resources/FitNesseRoot/files/testResults
    src/main/resources/FitNesseRoot/ErrorLogs
    src/main/resources/FitNesseRoot/RecentChanges
    src/main/resources/FitNesseRoot/properties
    src/main/resources/FitNesseRoot/updateDoNotCopyOverList
    src/main/resources/FitNesseRoot/updateList
    src/main/resources/FitNesseRoot/Fitnesse/UserGuide
    src/main/resources/FitNesseRoot/PageFooter
    src/main/resources/FitNesseRoot/PageHeader
    src/main/resources/FitNesseRoot/TemplateLibrary
  • 随着 FitNesse 的运行,进入主页并进行编辑。
  • 添加此维基词 MyTestSamples页面中的某处,然后保存。
  • 你应该看到 MyTestSamples[?]因为页面不存在。
  • 点击问号编辑页面
  • 追加以下几行
  • !define TEST_SYSTEM {slim}
    !path target/dependencies/*.jar

    添加对 RestFixture 类和依赖项的引用并使用 Slim Test system
  • 保存页面。
  • MyTestSamples page 从添加菜单添加新的测试页面。
  • 调用页面MySample1 , 保存
  • 转至 MySample1 ,编辑页面并输入以下内容。然后保存

  • | Import |
    | smartrics.rest.fitnesse.fixture |

    |Table: Rest Fixture | http://jsonplaceholder.typicode.com/ |
    | GET |/users | 200 | Content-Type : application/json; charset=utf-8 | jsonbody.length == 10|
  • 如果一切顺利,点击页面上的测试,测试应该运行并通过。

  • 您可以通过下载并解压缩带有依赖项的 RestFixture(从链接 bin.zip here 下载)手动构建项目来实现相同的设置。但我发现从长远来看,Maven 方法更简单。

    日志记录

    RestFixture 使用 slf4j 但不附带记录器桥接器。要完成日志系统的配置,请添加以下依赖项:

    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.20</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.20</version>
    </dependency>

    然后在 src\main\resources\log4j.xml 创建配置文件有以下内容

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender name="FILE" class="org.apache.log4j.FileAppender">
    <param name="file" value="restfixture.log" />
    <param name="append" value="false" />
    <param name="threshold" value="debug" />
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{ISO8601} %-5p [%c{1}] - %m%n" />
    </layout>
    </appender>
    <category name="smartrics.rest.client" additivity="false">
    <priority value="INFO" />
    <appender-ref ref="FILE" />
    </category>
    <category name="smartrics.rest.fitnesse.fixture" additivity="false">
    <priority value="DEBUG" />
    <appender-ref ref="FILE" />
    </category>
    <category name="httpclient.wire" additivity="false">
    <priority value="ERROR" />
    <appender-ref ref="FILE" />
    </category>
    <root>
    <priority value="ERROR" />
    <appender-ref ref="FILE" />
    </root>
    </log4j:configuration>
    httpclient.wire logger 可以设置为 DEBUG 以观察线路上的 HTTP 流量。

    用于登录 FitNesse 服务器(本教程范围之外) check here

    JUnit 运行器 :

    FitNesse 测试可以通过 JUnit as well 运行,使用 Maven Surefire plugin .

    src/test/java/smartrics/restfixture/sample/RunnerTest.java 中创建一个测试类运行器

    package smartrics.restfixture.sample;

    import java.io.File;
    import org.junit.Before;
    import org.junit.Test;
    import fitnesse.junit.JUnitHelper;

    public class RunnerTest {

    private JUnitHelper helper;

    @Before
    public void prepare() {
    helper = new JUnitHelper("src/main/resources", new File("target", "fitnesse-junit").getAbsolutePath());
    helper.setPort(9090);
    }

    @Test
    public void restFixtureTests() throws Exception {
    helper.assertSuitePasses("MyTestSamples.MySample1");
    }
    }

    然后在pom文件中安装surefire插件:

    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.17</version>
    <configuration>
    <forkMode>always</forkMode>
    </configuration>
    </plugin>

    保存 pom.xml 文件并运行 mvn clean package使用测试运行构建。
    构建将通过,报告将在 /target/fitnesse-junit/MyTestSamples.MySample1.html 中可用

    引用文献
  • pom.xml 是 here
  • start.bat 是 here

  • 验收测试

    RestFixture 旨在专注于被测服务公开的 REST API。将 Wiki 内容与结构化装置混合和匹配确实为提供实时文档提供了两全其美的优势。

    RestFixture 也可以扩展以提供额外的功能。

    在编写专注于 API 的验收测试时,重要的是突出 HTTP 请求/响应交互的部分:VERB、URI、请求/响应主体、请求/响应 HEADER 和 RETURN 状态代码。

    RestFixture 通过以 FitNesse 表格形式表达这些部分中的每一个来实现:

    | Table: Rest Fixture | <base uri> |
    | setBody | <body> |
    | setHeaders | <headers>
    | VERB | /URI | <expected return status code> | <expected response headers | <expected response body> |
    <expected ...>单元格可能为空。如果为空,则不会检查任何期望。
    setHeaderssetBody仅与需要实体的动词相关(POST、PUT、...)

    此外,通过使用 let可以从 HTTP 响应的部分提取数据并与其他装置和测试共享它。

    (RestFixtureLiveDoc) 1有一组由 RestFixture 实现的各种功能的综合示例,但这里遵循 - 供引用 - 主要功能的摘录。

    RestFixtureConfig

    (RestFixtureConfig) 11是一个设置 RestFixture 配置参数的简单夹具。配置参数可以在命名的配置装置中被覆盖并传递给 RestFixture 实例。例如
    |Table: Rest Fixture Config | my_config |
    | name1 | value1 |
    | name2 | value2 |

    |Table: Rest Fixture | http://host:8080/path | my_config |
    | ... |

    RestFixture 操作

    支持的 HTTP 操作是: GET , POST , PUT , DELETE , HEAD , OPTION , TRACE .例如:
    | Table: Rest Fixture |http://host:8080 |
    |GET | /resources/0 | 200 | Content-Type: application/json | jsonbody.name === 'Ted' |

    或者
    | Table: Rest Fixture |http://host:8080/path |
    |GET | /resources/0 | 200 | Content-Type: application/xml | //name[text()='Ted'] |

    根据作者可能想要传达的信息,可以提供期望单元格(每行的第 3、4 和第 5 个单元格)进行验证。

    可以提供类似上面示例的简单装置来测试和记录服务公开的 REST api。

    共享数据

    使用 let 共享数据从响应中提取。
    | Table: Rest Fixture |http://host:8080/path |
    |GET | /resources/0 | 200 | Content-Type: application/json | jsonbody.name === 'Ted' |
    | let | name | js | response.jsonbody.name | |

    在这里,符号 name设置为 json 表达式的值 response.jsonbody.name . response是一个包含最后一个 HTTP 响应的 json 对象, jsonbody是一个响应对象,在响应正文中包含 JSON 对象。

    该符号可以进一步用于其他灯具:
    | setBody | { 'some_name' : '%name%' } |

    或者
    | script | another fixture | 
    | check | not null | $name |

    交易

    该系统还可以针对提供应用程序事务的多个操作进行测试和记录(此处无意义)。
    | Table: Rest Fixture  |  http://host:port | 
    | comment | an order is created ... |
    | POST | /orders | | | |
    | let | orderIdUri | header | Location: (.+) | |
    | GET | %orderIdUri | | | |
    | let | email | js | response.jsonbody.address.email |
    | setBody |!- {
    'payload' : {
    'message' : 'order sent',
    'email' : '%email%
    }
    -!|
    | comment | and a confirmation can be sent |
    | POST | /notifications | 201 | | |

    上面的示例记录了一种将 API 用作应用程序事务的方法。

    延长休息夹具

    RestFixture 可以扩展以提供额外的功能。提供了两种方法:
  • 通过 Java:扩展 RestFixture java 以添加/更改行为。例如,检查 (RestFixtureExtensions) 12项目。
  • 通过 Javascript:如下所述

  • 简单的 Javascript 代码可以通过配置嵌入到 RestFixture 中。
    | Table: Rest Fixture Config |  imp |
    | restfixture.javascript.imports.map | !- sampleJs=src/main/resources/FitNesseRoot/files/javascript/sample.js -|

    上面的配置 - 使用时 - 将在作为路径提供的文件中加载 Javascript 并使其在期望处理程序的上下文中可用:
    | Table: Rest Fixture |http://host:port | imp |
    | GET | /resources/1.json | 200 | | |
    | let | sum | js | var sum = sampleAdd(1, 2); sum;| |

    关于FitNesse:使用 RestFixture 创建测试的工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35753103/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com