欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

分享我的第一次java Selenium自動化測試框架開發(fā)過程

 更新時間:2021年03月05日 09:33:29   作者:smooth-z  
這篇文章主要介紹了分享我的第一次java Selenium自動化測試框架開發(fā)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

由于公司的開發(fā)團(tuán)隊偏向于使用Java技術(shù),而且公司倡導(dǎo)學(xué)習(xí)開源技術(shù),所以我選擇用Java語言來進(jìn)行Selenium WebDriver的自動化框架開發(fā)。由于本人沒有Java開發(fā)經(jīng)驗,以前雖然學(xué)過QTP但從沒有接觸過Selenium,正好通過這個機會能學(xué)習(xí)一下自動化測試,同時也學(xué)習(xí)一下基本的Java開發(fā)過程。

一、首先是搭建框架開發(fā)環(huán)境

按照網(wǎng)上的方法部署eclipse,建立TestAction工程,并Import引用JDK和Selenium-2.44完整包

二、繼續(xù)引用和安裝相關(guān)jar包

1、首先是要滿足數(shù)據(jù)驅(qū)動(場景用例和動作用例、數(shù)據(jù)用例都需要放到excel表上),就需要引用jxl.rar包(實現(xiàn)調(diào)用和操作excel);

2、需要實現(xiàn)自動化框架(有測試套件、測試層)就需要通過eclipse安裝TestNg(網(wǎng)上有相關(guān)教程);

三、構(gòu)建框架的樣例代碼

1、實現(xiàn)能夠?qū)xcel用例數(shù)據(jù)的調(diào)用(通過jxl的引用),創(chuàng)建ExcelData.java類文件(專門用于對excel的調(diào)用),以下截取部分代碼樣例:

   /**
   * @param fileName  excel文件名
   * @param caseName  sheet名
   */
  public ExcelData(String fileName, String caseName) {
    super();
    this.fileName = fileName;
    this.caseName = caseName;
  }
   /**
   * 獲得excel表中的數(shù)據(jù)
   */
  public Object[][] getExcelData() throws BiffException, IOException {
 
    workbook = Workbook.getWorkbook(new File(getPath()));
    sheet = workbook.getSheet(caseName);
    rows = sheet.getRows();
    columns = sheet.getColumns();
    // 為了返回值是Object[][],定義一個多行單列的二維數(shù)組
    @SuppressWarnings("unchecked")
		HashMap<String, String>[][] arrmap = new HashMap[rows - 1][1];
    // 對數(shù)組中所有元素hashmap進(jìn)行初始化
    if (rows > 1) {
      for (int i = 0; i < rows - 1; i++) {
        arrmap[i][0] = new HashMap<String, String>();
      }
    } else {
      System.out.println("excel中沒有數(shù)據(jù)");
    }
 
    // 獲得首行的列名,作為hashmap的key值
    for (int c = 0; c < columns; c++) {
      String cellvalue = sheet.getCell(c, 0).getContents();
      arrkey.add(cellvalue);
    }
    // 遍歷所有的單元格的值添加到hashmap中
    for (int r = 1; r < rows; r++) {
      for (int c = 0; c < columns; c++) {
        String cellvalue = sheet.getCell(c, r).getContents();
        arrmap[r - 1][0].put(arrkey.get(c), cellvalue);
      }
    }
    return arrmap;
  }
 
  /**
   * 獲得excel文件的路徑
   * @return
   * @throws IOException
   */
  public String getPath() throws IOException {
    File directory = new File(".");
    sourceFile = directory.getCanonicalPath() + "\\src\\source\\"
        + fileName + ".xls";
    return sourceFile;
  }

2、實現(xiàn)對瀏覽器的調(diào)用,考慮到兼容性,需要同時滿足對Chrome、FireFox、IE三大瀏覽器的調(diào)用,我們需要準(zhǔn)備相關(guān)驅(qū)動chromedriver.exe、IEDriverServer.exe,這兩驅(qū)動都是谷歌和IE官方提供的,可以從網(wǎng)上下載到;而FireFox不需要下載驅(qū)動,只要安裝瀏覽器就可調(diào)用(Selenium和FireFox屬于一個團(tuán)隊開發(fā)出來的,待遇就是不一樣)。

有了瀏覽器驅(qū)動后(我們把驅(qū)動放到工程目錄的WebDriver文件夾下,方便按相對路徑統(tǒng)一調(diào)用),我們就需要一個能調(diào)用瀏覽器的類,以下提供核心代碼樣例:

	public static WebDriver getChromeDriver(String url) {
    //加載Google驅(qū)動
	  //System.setProperty("webdriver.chrome.driver","D:\\java\\chromedriver.exe");
	  System.setProperty("webdriver.chrome.driver",System.getProperties().getProperty("user.dir")+"\\WebDriver\\chromedriver.exe");
	  ChromeOptions options = new ChromeOptions();
	  //通過配置參數(shù)禁止data;的出現(xiàn)
	  options.addArguments("--user-data-dir="+System.getProperties().getProperty("user.home")+"/AppData/Local/Google/Chrome/User Data/Default");
	   //通過配置參數(shù)刪除“您使用的是不受支持的命令行標(biāo)記:--ignore-certificate-errors。穩(wěn)定性和安全性會有所下降。”提示
	  options.addArguments("--start-maximized","allow-running-insecure-content", "--test-type");
	  WebDriver driver = new ChromeDriver(options);
	  driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
	  driver.navigate().to(url);
	  return driver;
	}
	public static WebDriver getFireFoxDriver(String url){
		System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe");
		// TODO Auto-generated method stub
		WebDriver driver = new FirefoxDriver();
	  //Puts a Implicit wait, Will wait for 10 seconds before throwing exception
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
	  //Launch website
		driver.navigate().to(url);
		return driver;
	}
	public static WebDriver getIEDriver(String url){
		//System.setProperty("webdriver.ie.driver", "D:\\java\\IE64\\IEDriverServer.exe");
		System.setProperty("webdriver.ie.driver", System.getProperties().getProperty("user.dir")+"\\WebDriver\\IE32\\IEDriverServer.exe");
		DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
    capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
    capabilities.setPlatform(Platform.WINDOWS);
    capabilities.setCapability("silent", true);
		// TODO Auto-generated method stub
		WebDriver driver = new InternetExplorerDriver(capabilities);
	  //Puts a Implicit wait, Will wait for 10 seconds before throwing exception
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
	  //Launch website
		driver.navigate().to(url);
		return driver;
	}

3、寫一個以數(shù)據(jù)驅(qū)動的場景類,來進(jìn)行單個事務(wù)的用例跑測

(1)首行我們需要用TesgNg提供的數(shù)據(jù)驅(qū)動方法(@DataProvider),來獲取一個場景的用例表數(shù)據(jù),這個場景從excel的第一個附表獲取

通過action名,調(diào)取用例表(用例表是以action名命名的附表),用例表如下所示(ExpectedObject表示用例校驗對象的頁面Element標(biāo)簽,用;分隔,分號前面的表示ID,分號后面的表示xpath):

以下為用例表數(shù)據(jù)獲取的代碼:

@DataProvider(name="action")
  public Object[][] Numbers() throws BiffException, IOException{
		getActionString = actionData.getActionStr(1);//獲取第一個場景的broswer、url、action名
		ExcelData e=new ExcelData("testdata", getActionString.get(2));
    return e.getExcelData();
  }

然后通過Java的反射機制,實現(xiàn)動態(tài)的獲取具體事務(wù)類和執(zhí)行相關(guān)操作(每個事務(wù)的類名和方法名都與action場景名一致),以下截選相關(guān)場景的部分調(diào)用代碼:

  @Test(dataProvider="action")
  public void testAction(HashMap<String, String> data) throws BiffException, IOException {
    try {
    	Class<?> MyClass = Class.forName(packageName+"."+getActionString.get(2));
    	Method method = MyClass.getMethod(getActionString.get(2),WebDriver.class);
    	@SuppressWarnings("unused")
					String [] results = (String []) method.invoke(null,driver);
  			String ExpObject=data.get("ExpectedObject");
    	String ExpObject_by=ExpObject.split(";")[0].toString();
    	String ExpObject_Desc=ExpObject.split(";")[1].toString();
    	if(ExpObject_by.length()>0){
    		Assert.assertEquals(driver.findElement(By.id(ExpObject_by)).getText(),data.get("ExpectedData"), getActionString.get(2)+data.get("ID")+"驗證結(jié)果:");
    	}
    	else if(ExpObject_Desc.length()>0){
    		Assert.assertEquals(driver.findElement(By.xpath(ExpObject_Desc)).getText(),data.get("ExpectedData"), getActionString.get(2)+data.get("ID")+"驗證結(jié)果:");
    	}
    	
  		WebDriverDemo.WebSleep(500);	
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
  }

另外說明的是,調(diào)用瀏覽器的方法,需要明確是放在@BeforeMethod中,還是在@BeforeClass中,如果是登錄校驗測試,就要保證每次執(zhí)行測試方法都要打開一次瀏覽器和關(guān)閉一次瀏覽器,那么我們就要把調(diào)用瀏覽器,和關(guān)閉瀏覽器的方法放到@BeforeMethod中和@AfterMethod中。其他業(yè)務(wù)測試,只要在一個套件類中打開一次瀏覽器和關(guān)閉一次瀏覽器就可以,所以用到的是@BeforeClass和@AfterClass。

4、我們需要再寫一個以動作(關(guān)鍵詞)驅(qū)動的場景類

同樣,調(diào)用第二個場景的用例表,樣例代碼如下:

	@DataProvider(name="action")
  public Object[][] Numbers() throws BiffException, IOException{	
		getActionString = actionData.getActionStr(2);//獲取第二個場景的broswer、url、action名
		ExcelData e=new ExcelData("testdata", getActionString.get(2));
    return e.getExcelData();
  }

然后在測試方法中,動態(tài)的調(diào)用具體操作動作,獲取WebElement標(biāo)簽的方法,包括通過By ID或者By xpath,操作動作以最常見的兩個為例(sendKeys、click),以下為樣例代碼節(jié)選:

  @Test(dataProvider="action")
  public void testAction(HashMap<String, String> data) throws BiffException, IOException { 
  	//driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);//找不到element就再給5秒查找
    try {
    	WebElement TestWebElement = null;
    	String SetObject=data.get("SetObject").trim();
    	String SetObject_by=SetObject.split(";")[0].toString();
    	String SetObject_Desc=SetObject.split(";")[1].toString();
    	if(SetObject_by.length()>0){
    		TestWebElement=driver.findElement(By.id(SetObject_by));
    	}
    	else if(SetObject_Desc.length()>0){
    		TestWebElement=driver.findElement(By.xpath(SetObject_Desc));
    	}
    	if(data.get("SetOperate").equals("sendKeys")){
    		TestWebElement.clear(); 
    		TestWebElement.sendKeys(data.get("SetValue"));
    	}else if(data.get("SetOperate").equals("click")){
    		TestWebElement.click();
    	}
  		String ExpObject=data.get("ExpectedObject").trim();
    	if(ExpObject.length()>0){
    		String ExpObject_by=ExpObject.split(";")[0].toString();
      	String ExpObject_Desc=ExpObject.split(";")[1].toString();
    		if(ExpObject_by.length()>0){
      		Assert.assertEquals(driver.findElement(By.id(ExpObject_by)).getText(),data.get("ExpectedData"), getActionString.get(2)+data.get("ID")+"驗證結(jié)果:");
      	}
      	else if(ExpObject_Desc.length()>0){
      		Assert.assertEquals(driver.findElement(By.xpath(ExpObject_Desc)).getText(),data.get("ExpectedData"), getActionString.get(2)+data.get("ID")+"驗證結(jié)果:");
      	}
    	}
    	
  		WebDriverDemo.WebSleep(500);	
			} catch (Exception e) {
			// TODO Auto-generated catch block
				e.printStackTrace();
			}
  }

這段方法所調(diào)用的用例表如下所示(以登錄為例):


5、剩下就是業(yè)務(wù)擴(kuò)展類了,所有復(fù)雜的事務(wù)都可以單獨建立測試類和方法(方便擴(kuò)展維護(hù),只需要在excel場景表中定義后就能調(diào)用,利用的是Java反射機制),在這里就不舉例了。

四、實現(xiàn)測試套件調(diào)用和報告輸出

有了以上步驟,一個可擴(kuò)展的自動化框架已經(jīng)基本形成,但是還達(dá)不到大規(guī)模應(yīng)用測試和腳本方便可移植,這時候我們引入Ant(可以在Eclipse中安裝插件,可以直接上網(wǎng)下載后引用),為了能輸出漂亮一點的報告格式,我們還引入一個saxon-8.7.jar。

有了Ant后,我們就可以建議build.xml文件,就能一鍵bulid我們以上的自動化代碼,并將執(zhí)行測試后的結(jié)果輸出成報告。

1、首先我們需要編輯好測試套件調(diào)用的testng.xml,簡單舉例如下:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="Suite" parallel="false"> 
 <test verbose="2" name="Test_Action"> 
 	<!--<groups> 
   <run> 
   	<include name="aaa" />
     <include name="bbb" /> 
     <include name="ccc" /> 
    </run> 
  </groups>-->
  <classes> 
   <class name="TestBrowser.ExcActions"/>
   <class name="TestBrowser.ExcActions2"/> 
  </classes> 
 </test> <!-- Default test --> 
</suite> <!-- Default suite -->

2、然后我們需要編輯好一個能引用基礎(chǔ)jar包、build測試代碼、調(diào)用testng、輸出漂亮報告的build.xml文件

<?xml version="1.0" encoding="UTF-8"?>
 
<project name= "TestAction" basedir= "." default="testoutput"><!--default設(shè)置為run表示只執(zhí)行腳本,設(shè)為testoutput表示執(zhí)行完腳本并輸出視圖報告-->
<echo message="import libs" />
<property name= "lib.dir" value= "lib" /> <!--<property name="libdir" location="${basedir}/lib" />-->
<!--<property name="testng.output.dir" location="${basedir}/test-output" />-->
<path id= "test.classpath" >
 
<!-- adding the saxon jar to your classpath -->
 
<fileset dir= "${lib.dir}" includes= "*.jar" />
 <fileset dir="${basedir}/selenium-2.44.0">
  <include name="selenium-java-2.44.0.jar" />
  <include name="libs/*.jar" />
 </fileset>
 
</path>
<taskdef name="testng" classname="org.testng.TestNGAntTask" classpathref="test.classpath" rel="external nofollow" />
<target name="clean">
	<delete dir="build"/>
</target>
<target name="compile" depends="clean">
<echo message="mkdir"/>
 <mkdir dir="build/classes"/>
 <javac srcdir="src" destdir="build/classes" debug="on" encoding="UTF-8" includeAntRuntime="false">
	<classpath refid="test.classpath"/>
	</javac>
</target>
<path id="runpath"> 
	<path refid="test.classpath"/> 
	<pathelement location="build/classes"/> 
	</path> 
<target name="run" depends="compile">
	<testng classpathref="runpath" rel="external nofollow"  outputDir="test-output">
		<xmlfileset dir="${basedir}" includes="testng.xml"/>
		<jvmarg value="-ea" />
	</testng>
</target>
<target name= "testoutput" depends="run">
<xslt in= "test-output/testng-results.xml" style= "test-output/testng-results.xsl"
out= "test-output/index1.html" >
<!-- you need to specify the directory here again -->
<param name= "testNgXslt.outputDir" expression= "${basedir}/test-output/" />
	<param name="testNgXslt.showRuntimeTotals" expression="true" />
<classpath refid= "test.classpath" />
</xslt>
</target>
 
</project>

3、完成這些后,我們就可以通過Eclipse直接Run As Ant Build我們的自動化腳本了,輸出一份還算漂亮的報告:

同時,需要在事務(wù)操作類中,對實際結(jié)果和預(yù)期結(jié)果進(jìn)行比較,并將測試結(jié)果寫入excel的用例表中,如下:

		String[] result=new String [2];
		result[0] = driver.findElement(By.xpath(pars.get(3).split(";")[1].toString())).getText();
		result[1] = pars.get(4);
		if(result[0].equals(result[1])){//pars.size()-1
			ActionsDemo.modifyExcel(Thread.currentThread().getStackTrace()[1].getMethodName(),k,5,"通過");
		} else {
			ActionsDemo.modifyExcel(Thread.currentThread().getStackTrace()[1].getMethodName(),k,5,"失敗");
		}

五、實現(xiàn)自動化框架腳本的遷移調(diào)用

以上的腳本始終是在Eclipse下編譯和調(diào)用的,如果要實現(xiàn)靈活遷移,隨便換任何一臺只裝了JDK的電腦都能運行,那么我們就要來點改造

1、首行是保證我們寫的代碼中,所以需要引用文件的地方,都用相對路徑的方式,避免代碼包遷移后需要改路徑。

2、通過批處理調(diào)用build文件及用例文件,調(diào)用時也是通過批處理自動找到相關(guān)路徑,避免用絕對路徑。

3、需要用環(huán)境變量的地方,盡量用批處理的方式實現(xiàn),甚至最好是不用配置環(huán)境變量,直接調(diào)用相引用相對命令文件的路徑調(diào)用

以下舉個通過bat批處理調(diào)用Ant來執(zhí)行整個框架代碼的build:

@echo off
::先將測試用例文件拷到用戶目錄下
copy src\source\testdata.xls %UserProfile%\src\source
%cd%\org.apache.ant_1.9.6\bin\ant.bat -buildfile build.xml
echo 在%cd%\test-output下查看測試報告
pause

六、進(jìn)一步實現(xiàn)自動化的持續(xù)集成

在以上基礎(chǔ)上,我們還可以通過jenkins實現(xiàn)對自動化腳本的調(diào)用,以及達(dá)到每日構(gòu)建,持續(xù)集成開發(fā)的要求。

1、首先部署jenkins(網(wǎng)上有相關(guān)方法),由于本人公司一直在用jenkins,我就省了搭建部署這一步,直接將以上的自動化框架腳本上傳

2、自動化腳本完整目錄(包括代碼、用例、lib、引用的jar、build.xml文件等)上傳到SVN(再自動從SVN下到j(luò)enkins所在服務(wù)器)

3、在jenkins中新建一個測試項目TestAction,主要配置如下:

4、配置完后,就可以立即構(gòu)建(如果碰到相關(guān)報錯問題,就按輸出的提示進(jìn)行處理),構(gòu)建成功后,就可以在HTML_Report中看到測試結(jié)果:

七、后續(xù)處理

到此為止,一個完整的Selenium自動化框架就出來了,要說好用不,不好說,還得經(jīng)過實踐的檢驗,但是以上這個思考過程和框架的演進(jìn)過程,應(yīng)該也是值得借鑒的,畢竟這是我這幾天摸索和學(xué)習(xí)的過程,對于一個沒有從事過自動化測試,而且沒有做過Java開發(fā)的測試人員來說,這只是個開始。

目前來看,這個框架在架構(gòu)分層上,還是不夠清晰,有很多要改進(jìn)的東西,從技術(shù)上來說,我已經(jīng)實現(xiàn)了我的目標(biāo)(學(xué)習(xí)自動化測試),但是在整體架構(gòu)和代碼重構(gòu)上,還有很多工作沒做,以下貼出一份Selenium自動化框架的分層結(jié)構(gòu),以便后期按照這個標(biāo)準(zhǔn)進(jìn)行改進(jìn):

測試數(shù)據(jù)層:獨立封裝數(shù)據(jù);
頁面對象層:封裝頁面對象,共頁面任務(wù)層做調(diào)用;
頁面任務(wù)層:實現(xiàn)各個獨立頁面的操作;
測試層:實現(xiàn)頁面測試;
測試套件層:實現(xiàn)測試層的管理調(diào)用;

到此這篇關(guān)于分享我的第一次java Selenium自動化測試框架開發(fā)過程的文章就介紹到這了,更多相關(guān)java  Selenium自動化測試 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解SpringBoot緩存的實例代碼(EhCache 2.x 篇)

    詳解SpringBoot緩存的實例代碼(EhCache 2.x 篇)

    這篇文章主要介紹了詳解SpringBoot緩存的實例代碼(EhCache 2.x 篇),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java一個簡單的紅包生成算法

    Java一個簡單的紅包生成算法

    今天小編就為大家分享一篇關(guān)于Java一個簡單的紅包生成算法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • myeclipse開發(fā)servlet_動力節(jié)點Java學(xué)院整理

    myeclipse開發(fā)servlet_動力節(jié)點Java學(xué)院整理

    MyEclipse,是在eclipse基礎(chǔ)上加上自己的插件開發(fā)而成的功能強大的企業(yè)級集成開發(fā)環(huán)境,主要用于Java、Java EE以及移動應(yīng)用的開發(fā)。下面這篇文章主要給大家介紹了關(guān)于myeclipse開發(fā)servlet的相關(guān)資料,需要的朋友可以參考下。
    2017-07-07
  • Java實現(xiàn)簡單訂餐系統(tǒng)

    Java實現(xiàn)簡單訂餐系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)簡單訂餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java 高精度的大數(shù)字運算方式

    Java 高精度的大數(shù)字運算方式

    這篇文章主要介紹了Java 高精度的大數(shù)字運算方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Mybatis延遲加載和緩存深入講解

    Mybatis延遲加載和緩存深入講解

    這篇文章主要給大家介紹了關(guān)于Mybatis延遲加載和緩存的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • 聊聊SpringBoot使用Nacos進(jìn)行服務(wù)注冊發(fā)現(xiàn)與配置管理問題

    聊聊SpringBoot使用Nacos進(jìn)行服務(wù)注冊發(fā)現(xiàn)與配置管理問題

    Nacos支持基于DNS和基于RPC的服務(wù)發(fā)現(xiàn)(可以作為springcloud的注冊中心)、動態(tài)配置服務(wù)(可以做配置中心)、動態(tài)?DNS?服務(wù)。本文重點給大家介紹SpringBoot使用Nacos進(jìn)行服務(wù)注冊發(fā)現(xiàn)與配置管理,感興趣的朋友一起看看吧
    2022-01-01
  • java抓包后對pcap文件解析示例

    java抓包后對pcap文件解析示例

    這篇文章主要介紹了java抓包后對pcap文件解析示例,需要的朋友可以參考下
    2014-03-03
  • java異步寫日志到文件中實現(xiàn)代碼

    java異步寫日志到文件中實現(xiàn)代碼

    這篇文章主要介紹了java異步寫日志到文件中實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • springboot整合SSE技術(shù)開發(fā)小結(jié)

    springboot整合SSE技術(shù)開發(fā)小結(jié)

    本文主要介紹了springboot整合SSE技術(shù)開發(fā)小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11

最新評論