日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

利用PowerShell进行数据库部署冒烟测试

發布時間:2025/3/19 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用PowerShell进行数据库部署冒烟测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PowerShell是一種命令行外殼程序和腳本環境,使命令行用戶和腳本編寫者可以利用 .NET Framework的強大功能,也可以調用Azure。在Win10里面附帶PowerShell V5,PowerShell也能夠容易地集成到Jenkins里面。

本文要解決的問題:

數據庫部署之后進行冒煙測試,確保相應的對象,比如表,存儲過程,視圖,具體數據等等已經部署到位,避免到了后續集成測試時與其它錯誤混雜在一起,減少Root Cause的時間。

解決方案:

  • 利用PowerShell里面的Pester測試框架,Pester提供了一個用來在PowerShell內部通過單元測試執行和驗證PowerShell命令的框架。Pester遵循一個文件命名規范:命名的測試可以在測試時被自動發現,和一套簡單的函數集,Pester相當于是PowerShell的xUnit。
  • 用戶只需專注在寫好SQL語句來校驗數據庫,注意2個要點:
    I. 以分號;作為一批次Sql語句的分隔
    II. Sql語句執行返回有記錄,為正確
  • 比如如下

    -- check newly deployed SELECT * from sys.all_objects where name = 'td_searchbyname' and create_date > dateadd(MI, -10, getdate()); -- check deployed and no current modification SELECT * from sys.all_objects where name = 'td_searchbyemail' and modify_date < dateadd(MI, -10, getdate()); SELECT * FROM TABLE123 WHERE FIELDA = 'EXPECTEDVALUE' AND FIELDB = 'FFFF';-- check output of query procedure is the expected value, with several lines create table #TempTable1(name VARCHAR(50) PRIMARY KEY, quantity INTEGER) insert into #TempTable1 EXEC po_searchbyname 'Mike' SELECT * from #TempTable1 where quantity = 234;

    把文件的后綴名設為.sqlt, 余下的執行、報告等等交給PowerShell.

    $FileList = Get-ChildItem -Path $SqltPath -Include "*.sqlt" -Recurse

    $SqlPath是.sqlt文件的根目錄,也可能就是其它Sql文件的根目錄,上述語句把全部.sqlt文件找到,放入FileList當中。然后,遍歷FileList當中。 然后,遍歷FileListFileList,根據每個.sqlt文件生成一個Pester的Test Context,如下

    foreach ($SqltFile in $FileList) {$SqlList = Get-ZmSqlTestCaseList($SqltFile)Context "File:$($SqltFile.Name)" {It "SQL:" -TestCases $SqlList {$sqlcmd = $sqlConn.CreateCommand()$sqlcmd.CommandText = $Sql$result = $sqlcmd.ExecuteScalar()$result | Should -Not -BeNullOrEmpty}}}

    以上核心函數是Get-ZmSqlTestCaseList($SqltFile)

    function Get-ZmSqlTestCaseList($SqltFile) {$RawSqlList = Get-Content $SqltFile -Delimiter ";"$SqlList = [System.Collections.ArrayList]::new()foreach ($RawSql in $RawSqlList) {$Sql = ConvertTo-ZmValidSql $RawSqlif ($Sql) {[void]$SqlList.Add(@{Sql = $Sql })}}return $SqlList }

    $RawSqlList = Get-Content $SqltFile -Delimiter “;”

    根據“;”得到了初步的Sql語句列表,然后進行逐條檢查并轉換到有效的Sql語句,關鍵函數是ConvertTo-ZmValidSql

    function ConvertTo-ZmValidSql([string]$RawSql) {if ($null -eq $RawSql) {return $null}$Sql = $RawSql.Trim()if ($Sql.Length -lt 8) {return $null}$BatchLineList = $Sql.Split("`n")$NotCommentLineCount = 0foreach ($item in $BatchLineList) {$item = $item.Trim()if ($item.Length -ge 2) {$NotCommentLineCount = $NotCommentLineCount - $item.SubString(0, 2).IndexOf("--")}}if ($NotCommentLineCount -eq 0) {return $null}return $Sql }

    以上語句是判斷以分號;分割的Sql語句是否有效,略作轉換。

    $FileList = Get-ChildItem -Path $SqltPath -Include "*.sqlt" -Recurse Describe "DB-Smoke-Testing" {BeforeAll {$SqlConn.Open()}AfterAll {$SqlConn.Close()}foreach ($SqltFile in $FileList) {$SqlList = Get-ZmSqlTestCaseList($SqltFile)Context "File:$($SqltFile.Name)" {It "SQL:" -TestCases $SqlList {$Sqlcmd = $SqlConn.CreateCommand()$Sqlcmd.CommandText = $Sql$result = $Sqlcmd.ExecuteScalar()$result | Should -Not -BeNullOrEmpty}}} }

    其中$SqlConn是 System.Data.SqlClient.SqlConnection,在前面初始化。

    以上測試運行結果與其它Junit結果一樣,可以被Jenkins記錄,方便查詢。

    因此,對于DBO,只需在.sqlt文件當中寫好sql查詢語句。


    小結:

    本文闡述了一個數據庫冒煙測試具體問題,與博客過去文章有點不一樣,對于絕大多數老讀者而言,用不到。因此,最后要傳遞的信息是值得設法提升測試的便利性,加強持續集成和持續測試。

    總結

    以上是生活随笔為你收集整理的利用PowerShell进行数据库部署冒烟测试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。