其实市面上作接口测试的工具不少,为啥挑这两个来说解了,重点是真心好用。好了,废话很少说,直接上干货。html
相信有必定了解的人都知道这两个工具应用最普遍的就是接口测试,既然提到接口测试那咱们不得不先普及下什么是接口,接口测试又是啥?git
咱们常说的接口通常指下面两种:npm
API:应用程序编程接口。程序间的接口编程
GUI:图形用户界面。人与程序的接口json
咱们这里说的接口测试主要指API接口测试,API接口分类通常有以下几种:后端
HTTP 接口服务器
Webservice 接口app
RESTful 接口ide
HTTP,RESTful 接口走 HTTP 协议,经过路径来区分调用的方法,请求报文入参有多种形式,返回报文通常为 json 串,最多见的是 get 和 post 方法。svn
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,Check System, 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:有团队协做的功能,须要付费。
所以从项目支持的接口类型,不一样集成测试需求和后期维护来考虑,咱们能够根据上面几点选择适合本身项目的接口自动化工具。