[英]How do environment variables know what environment I am running on and how do I set them in C#?
我正在閱讀 c# 的 selenium 指南,他們展示了這一點:
class BaseTest
{
private static string VendorDirectory = System.IO.Directory.GetParent(
System.AppContext.BaseDirectory).
Parent.Parent.Parent.FullName
+ @"/vendor";
protected IWebDriver Driver;
public static string BaseUrl;
[SetUp]
protected void SetUp()
{
BaseUrl = System.Environment.GetEnvironmentVariable("BASE_URL") ??
"http://the-internet.herokuapp.com";
但這並沒有顯示他們實際上是如何設置環境變量的。 BASE_URL 是否來自 appsettings.json? 我不確定他們從哪里得到它。 現在,我有一個 class ,其中包含我在整個測試中使用的所有網址,如下所示:
public static class Urls
{
public static readonly string baseUrl = "https://localhost:5001/";
public static readonly string aboutUrl = $"{baseUrl}about";
public static readonly string citiesUrl = $"{baseUrl}cities";
public static readonly string countriesUrl = $"{baseUrl}countries";
}
我認為這不是最好的方法,我想嘗試使用環境變量,但我不知道該怎么做。 當我從 localhost 更改為生產環境時,我現在擁有的方式顯然會中斷。 如何設置 baseUrl 以便它知道我所處的環境?
已編輯我的測試解決方案與我的項目解決方案位於單獨的存儲庫中。 我的測試解決方案是 c# xunit 測試項目。 我在我的解決方案中添加了一個 appsettings.json 文件。 看起來像這樣
{
"Base_Url": "https://testurl/",
"AllowedHosts": "*"
}
在我使用 url 的一項測試中,我正在這樣做
public static IConfiguration InitConfiguration()
{
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
return config;
}
[Fact]
public void LoadFaqs()
{
using IWebDriver driver = new ChromeDriver();
var config = InitConfiguration();
var faqurl = config["Base_Url"] + "faqs";
driver.Navigate().GoToUrl(faqurl);
}
當我運行我的測試時,它失敗了,因為它找不到我的 appsettings.json 文件。 我也嘗試將它放在我的測試文件夾中,但它仍然找不到它。 我不確定我做錯了什么。
環境變量由 Windows 系統使用預定義值設置,最常見的 ENV 變量是 PATH,您可以在 cmd 上顯示環境變量: echo %ENV_NAME% 例如echo %PATH%
為您提供:
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;
環境變量是一種在父進程之間將參數傳遞給子進程的方法(在命令行上的參數有問題的情況下)然后環境上下文只有子進程知道並且一旦進程被殺死就會消失。 您的 selenium 啟動器可能會使用 win api 設置其他變量,例如:
public static void SetEnvironmentVariable (string variable, string? value);
在您的示例中,我會說:不要關心 selenium 如何設置此環境變量,只需獲取 BASE_URL 的內容(希望它不為空....)
在本地,他們必須使用項目配置(這是用於 Visual Studio)來設置它們:
Project properties -> Debug tab -> Environment variables
或者通過在構建事件上運行一些 MSBuild 腳本/任務來確保添加環境變量。 ( 快速搜索SO )。 或者在以某種方式構建測試主機時在代碼中手動添加它們(我猜這是用於某些功能或集成測試)
在 CI/CD 管道中,它們的設置取決於您使用的平台(Github、Gitlab、Azure DevOps 等)
使用硬編碼類進行配置的缺點是,每當配置更改時(例如,當您更改環境而不是指向本地 api 時,您需要指向生產環境),您需要更改/重新編譯您的代碼,像你說的。
所以,是的,我會說看看並探索這些選項。 配置可以使用多個配置提供程序。 在 asp.net 內核上,默認情況下,他們使用一個名為ChainedConfigurationSource的內核,其中包括從 appsettings.json 文件、環境變量等讀取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.