1. 程式人生 > 其它 >介面測試-Postman VS SoapUI

介面測試-Postman VS SoapUI

原文:https://www.cnblogs.com/jessicaxia/p/8192336.html

其實市面上做介面測試的工具很多,為啥挑這兩個來講解了,重點是真心好用。好了,廢話不多說,直接上乾貨。

相信有一定了解的人都知道這兩個工具應用最廣泛的就是介面測試,既然提到介面測試那我們不得不先普及下什麼是介面,介面測試又是啥?

我們常說的介面一般指下面兩種:

  1. API:應用程式程式設計介面。程式間的介面

  2. GUI:圖形使用者介面。人與程式的介面

我們這裡說的介面測試主要指API介面測試,API介面分類一般有如下幾種:

  • HTTP 介面

  • Webservice 介面

  • RESTful 介面

HTTP,RESTful 介面走 HTTP 協議,通過路徑來區分呼叫的方法,請求報文入參有多種形式,返回報文一般為 json 串,最常見的是 get 和 post 方法。

WebService 介面是走 soap 協議,請求報文和返回報文都是 xml 格式。

而Postman和SopaUI支援的介面型別如下:

因此,我們需要先辨別專案前後端是用何種介面互動再來選取相應的介面測試工具。

介面測試又是啥?

介面測試就是模擬客戶端向伺服器傳送請求報文,伺服器接收請求報文後對相應的報文做處理並向客戶端返回應答,客戶端再接收應答然後對應答做一些校驗的過程。

下面我們分別介紹下如何用PostMan和SoapUI做介面自動化測試。

A: Postman + Newman + Jenkins 實現介面自動化測試

1.安裝Postman,編寫API介面測試用例

示例:豆瓣公開查詢書籍介面

2.匯出Collection(專案-介面用例),安裝NewMan,用NewMan Command執行Collection並輸出HTML報告。

C:\Users\Li.Shi\AppData\Roaming\npm\newman run C:\Users\Li.Shi\Desktop\PostMan\LiShiTest.postman_collection.json --reporters cli,json --reporters cli,html --reporter-html-export htmlOut.html

3.安裝部署Jenkins,其中Jenkins的配置如下:

至此,我們可完成基於postman和Jenkins的自動化介面測試。

B:SoapUI+UnitTest 實現介面自動化測試

1.安裝SoapUI,自行建立一個可執行的SoapUI的Project,得到專案XML檔案.eg:DeviceReportService-soapui-project.xml

2.用VS(Visual Studio)建立一個Unit Test Project.新增reference,CheckSystem,System.Configuration,System.Core,System.Data

3.新增app config檔案,指定soapUI TestRunner.exe所在路徑.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="SoapUIHome" value="C:\Program Files\SmartBear\SoapUI-5.3.0\bin"/>
  </appSettings>
</configuration>

4.新增SoapUIRunner公共類,通過新建Process去呼叫TestRunner.exe命令進而執行SoapUI的case.

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SoapUI
{
    public class SoapUIRunner
    {
        public void RunSoapUItest(string soapProject,string testSuiteName,string testName,string report,string set)
        {
            const string fileName = "cmd.exe";
            var soapProjectFileName = Path.GetFullPath(soapProject);

            var arguments = string.Format("/C testrunner.bat -s\"{0}\" -c\"{1}\" \"{2}\" -r -a -f\"{3}\" -t\"{4}\" ", testSuiteName, testName, soapProjectFileName, report, set);
            var soapHome = System.Configuration.ConfigurationManager.AppSettings["SoapUIHome"];
            //start a process and hook up the in/output
            var process = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = fileName,
                    Arguments = arguments,
                    WorkingDirectory = soapHome,
                    Verb = "runas",
                    CreateNoWindow = true,
                    ErrorDialog = false,
                    RedirectStandardError= true,
                    RedirectStandardOutput = true,
                    UseShellExecute = false

                },
                EnableRaisingEvents = true
            };

            //pipe the output to console.writeline
            process.OutputDataReceived += (sender, args) =>
              Console.WriteLine(args.Data);
            var errorBuilder = new StringBuilder();

            //store the errors in a stringbuilder
            process.ErrorDataReceived += (sender, args) =>
            {
                if (args != null && args.Data != null)
                {
                    errorBuilder.AppendLine(args.Data);
                }
            };

            process.Start();
            process.BeginOutputReadLine();
            process.BeginErrorReadLine();
            //wait for soapUI to finish
            process.WaitForExit();

            //fail the test if anything fails
            var errorMessage = errorBuilder.ToString();
            if(!string.IsNullOrEmpty(errorMessage))
            {
                Assert.Fail("Test with name '{0}' failed. {1} {2}", testName, Environment.NewLine, errorMessage);
            }
        }
    }
}

5.通過Unit Test呼叫SoapUI TestSuit, 進而可以運用bat命令整合執行TestCase. 做到介面的自動化測試。

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace SoapUI
{
    [TestClass]
    [DeploymentItem(@"soapUIFiles\DeviceReportService-soapui-project.xml", "TestData\\soapUIFiles")]
    public class DeviceReport:SoapUIRunner
    {
        private string testCaseSuiteName = "BasicHttpBinding_DeviceReport TestSuite";
        private string soapProjectFile= @"TestData\\soapUIFiles\\DeviceReportService-soapui-project.xml";
        private string reportFile = @"C:\Users\" + Environment.UserName + "\\Desktop\\TestReport";
        private String SoapUISettingsFile = @"TestData\\soapUIFiles\\soapui-settings.xml";
        private TestContext testContext;

        public TestContext TestContext
        {
            get { return this.testContext; }
            set { this.testContext = value; }
        }

        [TestMethod]
        [TestCategory("DeviceReport")]
        public void Device_Report()
        {
            RunSoapUItest(soapProjectFile, testCaseSuiteName, "DeviceReport TestCase", reportFile, SoapUISettingsFile);
        }
    }
}

接下來我們對比下用方式A和B做介面自動化的區別:

1.從上面的實現來看,SoapUI自動化需要測試人員有一定的編碼能力,想比如Postman會對測試人員要求高些。

2.從兩種工具用例組織方式來看:

SoapUI的組織方式如下圖,最上層是WorkSpace,所以每個WorkSpace中可以開啟多個Project,一個Project也可以在不同的WorkSpace中。

Project對應我們的測試專案,其中可新增WSDL、WADL資源、TestSuite以及MockService。

TestSuite對應我們的測試模組,比如商戶中心,其中可以新增TestCase,TestCase對應我們對某個模組的不同介面,比如訂單管理介面。而一個介面可以能需要多個Step完成,變數、資料來源、請求等都是一個Step。

Postman功能上更簡單,組織方式也更輕量級,它主要針對的就是單個的HTTP請求。Collection就相當於是Project,而Collection中可以建立不定層級的Folders,可以自己組織TestSuite。每個Request可以當做是一個TestCase或者Step:

3. 從長期的團隊協作來看:

SoapUI:本身一個project是一個xml檔案,但是可以通過配置變成一系列資料夾,每個Case、每個Suite均是獨立的檔案,這樣可通過svn/git/TFS進行團隊協作。支援性較好。

Postman:有團隊協作的功能,需要付費。

因此從專案支援的介面型別,不同整合測試需求和後期維護來考慮,我們可以根據上面幾點選擇適合自己專案的介面自動化工具。