NUnit命令行运行测试时,如何指定项目根目录作为文件搜索路径?
问题详情
- 执行的测试运行命令:
C:\Users\user\NUnit.Console-3.17.0\bin\net6.0\nunit3-console.exe C:\Users\user\source\repos\mmfo_autotest\RegressionTestSuite\bin\Release\net6.0\Regression_Test_Suite.dll - 配置文件找不到的错误:
System.IO.FileNotFoundException : Could not find file 'C:\Users\user.nuget\packages\nunit.consolerunner\3.17.0\tools\agents\net6.0\appsettings.json'.
- appsettings.json实际位置:
C:\Users\user\source\repos\mmfo_autotest\RegressionTestSuite\bin\Release\net6.0\appsettings.json - 读取配置的代码片段:
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "appsettings.json"); string text = File.ReadAllText(path); _configuration ??= JsonConvert.DeserializeObject<ConfigurationData>(text); return _configuration; - Selenium Manager同样出现路径错误:
----> OpenQA.Selenium.WebDriverException : Unable to locate or obtain Selenium Manager binary at C:\Users\user.nuget\packages\nunit.consolerunner\3.17.0\tools\agents\net6.0\selenium-manager\windows\selenium-manager.exe
版本信息:NUnit 4.1.0,NUnit.ConsoleRunner 3.17.0
解决方法
方法1:切换工作目录后运行测试
执行nunit3-console.exe前,先切换到测试项目的输出目录,让程序在正确的基准路径下查找文件:
cd C:\Users\user\source\repos\mmfo_autotest\RegressionTestSuite\bin\Release\net6.0 C:\Users\user\NUnit.Console-3.17.0\bin\net6.0\nunit3-console.exe Regression_Test_Suite.dll
此方法会让AppDomain.CurrentDomain.BaseDirectory指向测试输出目录,同时Selenium Manager也会在当前目录下检索所需文件。
方法2:修改代码以程序集目录为基准定位文件
如果不想调整工作目录,可修改读取配置的代码,通过测试程序集的位置来确定配置文件路径,不受工作目录影响:
// 获取当前测试程序集所在目录 var assemblyDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string path = Path.Combine(assemblyDir, "appsettings.json"); string text = File.ReadAllText(path); _configuration ??= JsonConvert.DeserializeObject<ConfigurationData>(text); return _configuration;
方法3:指定Selenium Manager路径
通过环境变量直接指定Selenium Manager的位置,可在命令行中设置:
set SE_MANAGER_PATH=C:\Users\user\source\repos\mmfo_autotest\RegressionTestSuite\bin\Release\net6.0\selenium-manager\windows C:\Users\user\NUnit.Console-3.17.0\bin\net6.0\nunit3-console.exe C:\Users\user\source\repos\mmfo_autotest\RegressionTestSuite\bin\Release\net6.0\Regression_Test_Suite.dll
也可以在代码初始化WebDriver前设置:
Environment.SetEnvironmentVariable("SE_MANAGER_PATH", @"C:\Users\user\source\repos\mmfo_autotest\RegressionTestSuite\bin\Release\net6.0\selenium-manager\windows");
内容的提问来源于stack exchange,提问作者Norlerion

