能否在RunSettings文件中配置多组TestRunParameters?
问题解答
1. 关于TestRunParameters命名分组与TestContext支持情况
默认的.runsettings文件规范里,<TestRunParameters>节点不支持添加name属性,官方定义只允许单个该节点,内部包含多个<Parameter>子节点。你设想的<TestRunParameters name="CardUser">这种写法不符合规范,TestContext也无法直接识别这种分组结构,自然不支持TestContext["CardUser"].Parameters["username"]这种调用方式。
如果想在runsettings里实现多权限组的参数管理,有两种可行的替代方案:
- 参数名前缀区分:给不同组的参数加前缀,比如:
调用时通过前缀拼接的键名获取:<TestRunParameters> <Parameter name="CardUser_ClientNumber" value="ABC_CARD" /> <Parameter name="CardUser_Username" value="card@test.com" /> <Parameter name="AccountsUser_ClientNumber" value="ABC_ACCOUNT" /> <Parameter name="AccountsUser_Username" value="account@test.com" /> </TestRunParameters>string cardUsername = TestContext.Properties["CardUser_Username"].ToString(); - 自定义runsettings节点:在runsettings里添加自定义的分组节点(runsettings允许自定义非官方节点),比如:
这种情况下,TestContext不会自动解析自定义节点,你需要自己编写代码读取runsettings文件,用XmlDocument或XmlSerializer等工具解析自定义的<RunSettings> <TestRunParameters> <!-- 通用参数 --> </TestRunParameters> <UserPermissions> <CardUser> <Parameter name="ClientNumber" value="ABC_CARD" /> <Parameter name="Username" value="card@test.com" /> </CardUser> <AccountsUser> <Parameter name="ClientNumber" value="ABC_ACCOUNT" /> <Parameter name="Username" value="account@test.com" /> </AccountsUser> </UserPermissions> </RunSettings><UserPermissions>节点内容。
2. runsettings方案是否合适,还是改用通用XML配置?
要根据项目需求判断:
- 继续用runsettings的场景:
- 项目已基于runsettings搭建测试框架,改动成本低
- 仅需简单的多组参数区分,不需要复杂的配置嵌套或跨环境复用
- 参数仅用于测试代码,无需在业务逻辑中读取
- 改用通用XML配置的场景:
- 需要复杂的配置结构(比如嵌套层级、数组型配置)
- 配置需要在测试代码和业务代码中共享
- 需要支持多环境切换(测试/预生产/生产)或动态加载配置
- 希望用强类型实体类管理配置
如果选择通用XML配置,可以创建自定义配置文件(比如testPermissions.config),用ConfigurationManager或Microsoft.Extensions.Configuration等工具读取解析,灵活性更高。
内容的提问来源于stack exchange,提问作者Donald Dunlop
相关产品推荐
相关产品推荐

