首页 > 解决方案 > 从 Fitnesse 版本 Fitnesse_20070619 升级到最新版本开始出现“无法找到夹具”错误

问题描述

我是 Fitnesse 工具的用户,并在上面编写了许多自动化测试。最近,我收到了一个远程机器(Windows 10 机器,我安装了 Fitnesse)的安全漏洞,它需要我更新我的 Web 服务器。由于该系统上没有安装其他 Web 服务器,我怀疑作为 Fitnesse jar 一部分的嵌入式 Web 服务器需要升级。

因此,我开始寻求升级 Fitnesse 项目以使用最新版本。在我的探索中,我发现我使用的是一个非常旧的 Fitnesse 版本(版本 20070619)。所以,我下载了最新的 Fitnesse-standalone jar(版本 20200501)。所以,我用这个新的替换了现有的 Fitnesse.jar,并重新启动了 Fitnesse 服务器(请注意,我使用的是 Open JDK 8,并且我的路径变量中定义了 jre 8 bin)。这是我用来启动它的命令(就像正在使用的旧 Fitnesse jar 一样):

java -cp fixtures/FitX.jar;fitnesse.jar fitnesse.FitNesse -p 801 -l DailyLogs %1 %2 %3 %4 %5

这里 FitX.jar 是我们为自动化框架编写的一些固定装置,因此我们将其添加到类路径中。这适用于旧版本的 Fitnesse

启动时,它抛出了一个错误,所以我知道我需要使用新的 Main 类定义,所以我再次使用:

java -cp fixtures/FitSabre.jar;fitnesse.jar fitnesseMain.FitNesseMain -p 801 -l DailyLogs %1 %2 %3 %4 %5

请注意,我将 Fitnesse-standalone.jar 重命名为 Fitnesse.jar。这成功地使用新的 Fitnesse jar 启动了服务器,并且我能够使用新的漂亮的 Fitnesse Wiki 页面重新加载我的测试。但是,当我执行测试时,它抛出了这个错误:

set
Could not find fixture: set.    %lniata%    to  %RESPONSE%  using row   1   and column  5

这就是我的原始文本的样子:

!!|set|%objSession%|to|%Logincreditial%|使用行|3|和列|2|

整个页面都充满了其他灯具的相同错误。我相信这些是我们在 fitX.jar 中编写的自定义装置。

于是,我开始搜索这个问题,发现我需要在测试的开头添加以下几行:

!define TEST_SYSTEM {slim}

!path C:\FitNesse

其中 C:\FitNesse 是我所有固定装置所在的位置。这是我的 Fitnesse 测试的目录结构:

- C:\FitNesse
    - DailyLogs
        - fitnesse20200621155541.log
        ...
    - FitNesseRoot
        - All my fitnesse tests as folders
        - content.txt
        - properties.xml
    - fixtures
        - commons-lang-2.1.jar
        - FitX.jar
        - log4j.jar
        - xml-config.jar
    - fitlibrary.jar (seems to be pretty old - just 279 KB file)
    - fitnesse.jar (the latest standalone jar version renamed as this)

以下是 FitNesseRoot 中的 content.txt 内容:

!contents

!path classes
!path fitnesse.jar
!path fitlibrary.jar
!path fixtures/FitX.jar
!path fixtures/log4j.jar
!path fixtures/commons-lang-2.1.jar
!path fixtures/xml-config.jar

将更改 (!define TEST_SYSTEM {slim} & !path C:\FitNesse) 添加到我的测试后,这是我在重新执行测试时开始遇到的新错误:

set Could not invoke constructor for set[3] %strTestsessionname2% The instance decisionTable_0. does not exist  to The instance decisionTable_0. does not exist Not Provided The instance decisionTable_0. does not exist

所以,我决定在 Fitnesse 的 2007 年到 2020 年之间不进行如此巨大的飞跃,我开始慢慢进步,看看我的 Fitnesse 可以达到的最大版本是多少。在我的研究中,我能够成功地从20070619版本升级到20101101版本,并且我的测试执行得很好。但是,当我发布20110104时,我开始看到上面提到的“无法找到夹具”。因此,我假设自2011 年发布的 Fitnesse 以来,我的测试将面临这个问题,因此我无法使用最新版本的 Fitnesse。

我该如何解决这个问题,以便我可以使用最新版本的功能?

标签: javajarfitnesse

解决方案


找到了我的问题的解决方案。这是编辑模式下的部分fitnesse脚本,它在旧版本而不是新版本中工作:

!!|set|

当切换到新版本的 Fitnesse 时,由于额外的 ! (感叹号)。因此,我将脚本编辑为:

!|set|

在此之后,该页面在最新的 Fitnesse 版本中呈现良好,并且我不再收到“Could Not Find Fixture”错误。

我现在可以使用最新版本的 Fitnesse。


推荐阅读