簡體   English   中英

在多個環境中測試相同的測試用例

[英]Testing same test cases across multiple environments

目前我們已經在一個環境(Dev)中設置了我們的 UI 測試自動化。 我們正在使用 C#、.Net、Visual Studio、specflow 和 MSTest

配置

我們讀取了一個app.config文件以獲取特定於環境的變量。 我們使用 Azure 管道進行 CI 並在每晚構建中運行這些測試。

<configuration>
    <appSettings>
        <add key="DevApp" value="https://dev.websitename.com />
    </appSettings>
    <connectionStrings>
        <add name="DevDatabase" connectionString="http://dev.url/" />
    </connectionStrings>
</configuration>

現在我們也想在我們的 UAT 環境中運行這些測試。 設置將是相同的,我們希望使用相同的數據運行相同的測試。 唯一的區別是對於 UAT,我們將指向不同的 URL 和不同的數據庫。

例如

Dev env = https://dev.websitename.com
UAT env = https://uat.websitename.com

server name="DevDatabase" connectionString="http://dev.url/"
server name="UATDatabase" connectionString="http://uat.url/"

密碼

在密碼方面,out 應用程序是一個內部應用程序,我們使用 windows auth。 因此,在我們的 dev 和 uat 環境中,我們為所有用戶設置了相同的密碼。 所以在 Dev = devpassword 和 UAT = uatpassword

對於開發和測試,我們使用相同的用戶,密碼是唯一的區別。在測試時,我們使用模擬啟動瀏覽器,並以該用戶的“運行身份”啟動瀏覽器

var service = ChromeDriverService.CreateDefaultService(driverpath)

如果用戶不是 null 那么我們這樣做

var pwd = new SecureString()

service.StartDomain = Configurationhelper.Domain
service.StartupUserName = username
service.StartupPassword= = pwd
service.StartupLoadUserProfile = true

我們將域和密碼以及其他環境變量作為常量存儲在單獨的配置文件中。

**主要問題:** 這現在不起作用,所以我認為最好將密碼作為機密存儲在 AZURE 管道變量中? 如果是這樣,我將如何更改此代碼? 例如

服務器團隊、數據庫團隊和 devops 團隊負責服務器、數據庫設置和 url 等

所以對我來說,它只是用我對配置的更改來配置測試自動化回購

有什么優雅的方法可以做到這一點?

AZURE 管道

我們如何同時為這兩個環境運行測試? 並行我的意思是讓兩者都在夜間運行。 我們的 Azure 管道有 2 個獨立的客戶端 UAT 和 DEV 指向同一個工件。 兩種環境的任務和變量是相同的,但顯然具有不同的值

目前他們都將孤立運行

此問題的解決方案歸結為上下文(在您的情況下是環境及其所有關聯的連接字符串和 URL)如何到達將要使用它們的測試。 在您的問題中,您陳述了幾個正交問題:

  • 使用相同的數據
  • 在不同的環境中運行
  • 並行運行

未提及是另一個問題

  • 如何處理機密(例如連接字符串中的密碼)

我將解釋一個解決這些問題的解決方案(實際上是一種策略),以及為什么它看起來是一個可維護和可擴展的解決方案。

使用相同的數據

這可以非常簡單或非常復雜。 簡單的解決方案是創建一個包含規范和代表性測試數據的數據庫,然后將該數據庫交換到您的環境中。 這可以通過數據庫的備份/恢復或以編程方式創建數據來完成。 無論測試成功還是失敗,您都需要有一種機制來恢復或擦除數據。

“按原樣”使用環境的數據庫很少會導致可靠的測試; 測試經常修改state,數據庫是state的終極形式; state 的突變將影響未來的測試。

正是在最后一句話中,每次測試之前/之后發生的完全交換可能a)更快(發生在具有更快交換功能的批量/宏級別),b)更易於維護(可以在之前查看/創建數據時間)和c)不那么脆。

在不同的環境中運行

就像您討論的問題的核心一樣,這就是您歸結為使用多個文件還是單個文件的地方。 使用多個文件意味着您可以利用一些允許您指定環境的內置 .NET 配置機制。 這意味着復制文件並更改值以反映環境。

您提到的另一種方法是將所有這些信息存儲到一個配置文件中。 如果這樣做,則需要某種鑒別器來消除條目的歧義,並且您的測試需要能夠將環境名稱傳遞給某些 API 以提取值。 我個人更喜歡這種機制,因為當您添加新功能/測試時,您可以將所有配置添加到一個地方。

所以這兩種機制在工作方面大致相同,除了后者在添加新配置時導致更緊湊的編輯 session,並且從可讀性/可維護性場景來看,您可以查看的地方更少。

秘密

如果您遵循單一來源的配置方法,您只需將其擴展到您的秘密,但您 select 適當的秘密存儲(例如秘密文件或 Azure 密鑰庫,或一些這樣的......再次使用基於環境的鑒別器) . 這是一個例子:

{
   "DEV.Some.Key" : "http://devhost/some/path",
   "UAT.Some.Key" : "https://uathost/some/other/path"
   ...
}

使用鑒別器意味着對 DevOps 管道的更改要少得多,也就是說,從開發人員/編輯經驗來看,這很可能比編輯文件或密鑰保管庫更慢、更麻煩。

並行運行

雖然您可以輪換上下文並設計您的解決方案以使用 MSTest 機制並行運行,但將其分配給您的管道本身會更優雅,並有足夠的資源通過足夠的構建來並行運行這些管道代理等。

結論

它歸結為解決方案的哪些部分應該由哪些資源來解決。 上面的解決方案將環境選擇和測試執行分配給管道本身。 諸如連接字符串和秘密之類的粒度值被分配給單個源,以減少在必須編輯這些值時發生的摩擦。

遵循此策略也可能更好地利用您團隊的技能。 具有 DevOps 思維方式的人很可能比開發人員思維方式更容易啟動新環境並進行並行化,開發人員思維方式更清楚需要設置哪些數據以及如何制作測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM