如何在Java环境下为FitNesse创建XML配置文件并在测试套件中调用?
解决FitNesse测试套件中重复URL的配置化问题
场景说明
我有多个包含重复URL链接的FitNesse测试套件,希望将这些重复URL迁移至配置文件中,在测试套件中直接调用以减少冗余。
示例FitNesse测试代码
|request payload |${post}| |keyTab url| 'home/data/file'| |url|https://google.com|
重复出现的URL片段
|keyTab url| 'home/data/file'| |url|https://google.com|
问题解答
1. 如何创建用于存储URL的XML配置文件?
创建结构清晰的XML文件,将重复的URL相关参数按节点存储,示例如下:
<?xml version="1.0" encoding="UTF-8"?> <config> <url-settings> <key-tab-path>home/data/file</key-tab-path> <base-url>https://google.com</base-url> </url-settings> <!-- 可添加多组URL配置,比如新增<url-settings>节点 --> </config>
将该文件保存到FitNesse可访问的目录,比如FitNesseRoot/files/config/url-config.xml(路径可根据实际部署调整)。
2. 如何在FitNesse测试套件中调用该XML文件?
FitNesse需要通过Fixture读取XML配置,以下是两种常用实现方式:
方式一:自定义Java Fixture读取XML
- 编写简单的Fixture类,负责加载XML并提供获取参数的方法:
import org.w3c.dom.Document; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; import java.io.IOException; public class UrlConfigLoader { private Document configDoc; public void loadConfig(String filePath) throws IOException, SAXException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); configDoc = builder.parse(new File(filePath)); configDoc.getDocumentElement().normalize(); } public String getKeyTabPath() { return configDoc.getElementsByTagName("key-tab-path").item(0).getTextContent(); } public String getBaseUrl() { return configDoc.getElementsByTagName("base-url").item(0).getTextContent(); } }
- 在FitNesse测试页面中导入Fixture,加载配置并引用参数:
!define TEST_SYSTEM {slim} !path /your/fixture/class/path <!-- 替换为Fixture类的编译路径 --> |import| |com.your.package.UrlConfigLoader| |UrlConfigLoader| |loadConfig|FitNesseRoot/files/config/url-config.xml| |request payload |${post}| |keyTab url|'${UrlConfigLoader.getKeyTabPath()}'| |url|${UrlConfigLoader.getBaseUrl()}|
方式二:在Suite Setup中全局复用配置
如果希望整个测试套件共享配置,可在Suite Setup页面添加以下内容,将配置参数定义为全局变量:
!define TEST_SYSTEM {slim} !path /your/fixture/class/path |import| |com.your.package.UrlConfigLoader| |UrlConfigLoader| |loadConfig|FitNesseRoot/files/config/url-config.xml| !define KEYTAB_PATH {${UrlConfigLoader.getKeyTabPath()}} !define BASE_URL {${UrlConfigLoader.getBaseUrl()}}
之后套件内的所有测试用例可直接引用全局变量:
|request payload |${post}| |keyTab url|'${KEYTAB_PATH}'| |url|${BASE_URL}|
内容的提问来源于stack exchange,提问作者Tina
相关产品推荐
相关产品推荐

