- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
FitNesse 新手,我想使用 RestFixture 测试 Rest API,但不知道从哪里开始。
有人能给我一步一步的工作流程和 GET、POST 和 DELETE 请求的示例决策表吗?
我们使用 JSON 响应,发布时如何将它们输入到决策表中?
谢谢
最佳答案
此答案提供了安装 RestFixture 的说明书和介绍验收测试框架的部分。
安装
了解如何开始使用 RestFixture 的一种方法是查看 RestFixtureLiveDoc .该项目提供了 RestFixture 本身的文档,它由 Maven 管理。如果您更喜欢这种方式,请阅读以下内容。
假设
java -version
)mvn --version
)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
<dependency>
<groupId>smartrics.restfixture</groupId>
<artifactId>smartrics-RestFixture</artifactId>
<version>4.1</version>
</dependency>
<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
目录中检查它们)<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 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
MyTestSamples
页面中的某处,然后保存。 MyTestSamples[?]
因为页面不存在。 !define TEST_SYSTEM {slim}
!path target/dependencies/*.jar
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|
<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 流量。
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");
}
}
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<forkMode>always</forkMode>
</configuration>
</plugin>
mvn clean package
使用测试运行构建。
/target/fitnesse-junit/MyTestSamples.MySample1.html
中可用
| Table: Rest Fixture | <base uri> |
| setBody | <body> |
| setHeaders | <headers>
| VERB | /URI | <expected return status code> | <expected response headers | <expected response body> |
<expected ...>
单元格可能为空。如果为空,则不会检查任何期望。
setHeaders
和
setBody
仅与需要实体的动词相关(POST、PUT、...)
let
可以从 HTTP 响应的部分提取数据并与其他装置和测试共享它。
|Table: Rest Fixture Config | my_config |
| name1 | value1 |
| name2 | value2 |
|Table: Rest Fixture | http://host:8080/path | my_config |
| ... |
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'] |
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 | | |
| Table: Rest Fixture Config | imp |
| restfixture.javascript.imports.map | !- sampleJs=src/main/resources/FitNesseRoot/files/javascript/sample.js -|
| 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/
我一直在尝试通过健身套件设置页面为数据库连接参数设置环境变量属性。我已经通过在单个测试页面上设置环境变量来对此进行了测试,当我这样做时,它确实在我的 fixture API 中得到了解决。但是当我将它
以前在我的 Fitnesse 装置中,我使用以下命令指定了预期的 WCF 异常: exception[FaultException] 从那时起,我将 WCF 服务转换为返回强类型的 FaultCont
在fitnesse.NET代码中是否有获取当前测试名称的API?我的 fixture 类继承了 fitlibrary.SequenceFixture。 最佳答案 您可以使用变量 ${PAGE_NAME
通过命令行运行 Fitnesse 测试时,我收到 ClassNotFound 异常 由 Java.lang.ClassNotFoundException:fitnesse.runner.testRun
我正在使用 Fitnesse 来测试我们项目的 API,并且我为每个接口(interface)创建了场景表,因此我们可以通过调用场景将请求发送到任何地方。现在我们需要基于随机循环计数来循环执行场景。
我想在 FitNesse 变量中存储以下字符串: !*< comment {{{ 和 }}} *! 不幸的是,它们包含大括号“{}”的事实对于 FitNesse 中的变量声明是有问题的,因为我必须这样
我在根级别有一个设置页面,工作正常。但是,当我在 FitNesse 中添加子维基时,我想在子维基级别放置一个设置页面。这会被包含在内,但根级别的 SetUp 不会包含在内。 例如,具有以下结构: Fo
我想在 FitNesse 变量中存储以下字符串: !*< comment {{{ 和 }}} *! 不幸的是,它们包含大括号“{}”的事实对于 FitNesse 中的变量声明是有问题的,因为我必须这样
我有一个测试套件,测试顺序如下: Suite1---A B C 如何更改测试用例的顺序? 我尝试过重构,但没有帮助。 最佳答案 看起来这不可能... Remembe
我有一个返回业务对象列表的 Fitnesse RowFixture。该对象有一个字段,它是一个代表 0 和 1 之间百分比的浮点数。业务对象的使用者将是来自设计者的网页或报告,因此百分比的格式将取决于
我正在为 Web 应用程序编写 Fitnesse 测试。测试项目之一是下拉框,其值由当前日期决定,格式为DD/MM/YYYY。 我认为在 Fitnesse 套件中使用 !today 变量可能是一种设置
我已经使用 Eclipse 使用某些方法实现了 Web 服务。 然后我把它导出到一个WAR文件,这个文件是要和Tomcat一起使用的。 然后我使用 wsimport 为我的网络服务创建“ stub ”
我正在尝试使用即 !|Execute|select * from abc| 在 DBfit 中获取 sql 查询输出,但不知道它将如何在 DBfit 中显示。 最佳答案 我认为您正在寻找 Inspec
我尝试通过 FitNesse 测试代码后收到错误“无法调用构造函数”。我该怎么做才能解决这个问题? 我已按照“https://www.softwaretestinghelp.com/getting-s
我问是因为我在 Google 中找到的所有示例都与 Fitnesse 教程中的相同:对内存中的列表或数组的非常简单的查询,而不是真正的数据库。 是的,Fixtures 永远不必处理这个问题,但是如果我
我希望能够将预先格式化的文本(即包含换行符)放入FitNesse灯具表的单个单元格中。有没有一种方法可以操纵FitNesse Wiki标记来做到这一点? 最佳答案 用 !- -!获取多行表格单元格,使
我正在使用 FitNesse 来测试 Web 服务响应,并使用 check 来比较预期响应与实际响应。 在某些情况下,检查失败,我无法看出导致检查失败的预期与实际之间的差异。 这是它在特定实例(许多类
运行健身测试时,我看到它被忽略(未运行)。我不明白为什么。下面是代码: #!include .ActionDefinitions !path C:\Users\rdixit\Documents\Vis
我已经阅读了 fitnesse 用户指南。但我似乎很难理解,因为我想测试一个网络服务。 问题如下我有一个请求 xml 文件和响应 xml 文件。在请求文件中,我有 userid 和 logon id
我刚刚继承了一个旧的 Java 代码库(大约 10 - 15 岁)。它没有任何自动化测试范围,或者至少当代世界知道它。首先,我打算围绕它编写一些 Fitnesse 脚本。 我知道 Concordion
我是一名优秀的程序员,十分优秀!