Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
·ÖÏíÎҵĵÚÒ»´ÎSelenium×Ô¶¯»¯²âÊÔ¿ò¼Ü¿ª·¢¹ý³Ì
 
  2194  次浏览      27
 2019-6-4
 
±à¼­ÍƼö:

±¾ÎÄÀ´×Ôcsdn£¬±¾ÎÄÖ÷Òª¼òµ¥½éÉÜÁËÒ»¸öÍêÕûµÄSelenium×Ô¶¯»¯¿ò¼ÜµÄ˼¿¼¹ý³ÌºÍ¿ò¼ÜµÄÑݽø¹ý³Ì£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£

ÓÉÓÚ¹«Ë¾µÄ¿ª·¢ÍŶӯ«ÏòÓÚʹÓÃJava¼¼Êõ£¬¶øÇÒ¹«Ë¾³«µ¼Ñ§Ï°¿ªÔ´¼¼Êõ£¬ËùÒÔÎÒÑ¡ÔñÓÃJavaÓïÑÔÀ´½øÐÐSelenium WebDriverµÄ×Ô¶¯»¯¿ò¼Ü¿ª·¢¡£ÓÉÓÚ±¾ÈËûÓÐJava¿ª·¢¾­Ñ飬ÒÔǰËäȻѧ¹ýQTPµ«´ÓûÓнӴ¥¹ýSelenium£¬ÕýºÃͨ¹ýÕâ¸ö»ú»áÄÜѧϰһÏÂ×Ô¶¯»¯²âÊÔ£¬Í¬Ê±Ò²Ñ§Ï°Ò»Ï»ù±¾µÄJava¿ª·¢¹ý³Ì¡£

Ò»¡¢Ê×ÏÈÊǴ¿ò¼Ü¿ª·¢»·¾³

°´ÕÕÍøÉϵķ½·¨²¿Êðeclipse£¬½¨Á¢TestAction¹¤³Ì£¬²¢ImportÒýÓÃJDKºÍSelenium-2.44ÍêÕû°ü

¶þ¡¢¼ÌÐøÒýÓúͰ²×°Ïà¹Øjar°ü

1¡¢Ê×ÏÈÊÇÒªÂú×ãÊý¾ÝÇý¶¯£¨³¡¾°ÓÃÀýºÍ¶¯×÷ÓÃÀý¡¢Êý¾ÝÓÃÀý¶¼ÐèÒª·Åµ½excel±íÉÏ£©£¬¾ÍÐèÒªÒýÓÃjxl.rar°ü£¨ÊµÏÖµ÷ÓúͲÙ×÷excel£©£»

2¡¢ÐèҪʵÏÖ×Ô¶¯»¯¿ò¼Ü£¨ÓвâÊÔÌ×¼þ¡¢²âÊԲ㣩¾ÍÐèҪͨ¹ýeclipse°²×°TestNg£¨ÍøÉÏÓÐÏà¹Ø½Ì³Ì£©£»

Èý¡¢¹¹½¨¿ò¼ÜµÄÑùÀý´úÂë

1¡¢ÊµÏÖÄܹ»¶ÔexcelÓÃÀýÊý¾ÝµÄµ÷Óã¨Í¨¹ýjxlµÄÒýÓã©£¬´´½¨ExcelData.javaÀàÎļþ£¨×¨ÃÅÓÃÓÚ¶ÔexcelµÄµ÷Óã©£¬ÒÔϽØÈ¡²¿·Ö´úÂëÑùÀý£º

/**
* @param fileName excelÎļþÃû
* @param caseName sheetÃû
*/
public ExcelData(String fileName, String caseName) {
super();
this.fileName = fileName;
this.caseName = caseName;
}
/**
* »ñµÃexcel±íÖеÄÊý¾Ý
*/
public Object[][] getExcelData() throws BiffException, IOException {

workbook = Workbook.getWorkbook(new File(getPath()));
sheet = workbook.getSheet(caseName);
rows = sheet.getRows();
columns = sheet.getColumns();
// ΪÁË·µ»ØÖµÊÇObject[][],¶¨ÒåÒ»¸ö¶àÐе¥ÁеĶþάÊý×é
@SuppressWarnings("unchecked")
HashMap<String, String>[][] arrmap = new HashMap[rows - 1][1];
// ¶ÔÊý×éÖÐËùÓÐÔªËØhashmap½øÐгõʼ»¯
if (rows > 1) {
for (int i = 0; i < rows - 1; i++) {
arrmap[i][0] = new HashMap<String, String>();
}
} else {
System.out.println("excelÖÐûÓÐÊý¾Ý");
}

// »ñµÃÊ×ÐеÄÁÐÃû£¬×÷Ϊ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¡¢ÊµÏÖ¶Ôä¯ÀÀÆ÷µÄµ÷Ó㬿¼Âǵ½¼æÈÝÐÔ£¬ÐèҪͬʱÂú×ã¶ÔChrome¡¢FireFox¡¢IEÈý´óä¯ÀÀÆ÷µÄµ÷Óã¬ÎÒÃÇÐèҪ׼±¸Ïà¹ØÇý¶¯chromedriver.exe¡¢IEDriverServer.exe£¬ÕâÁ½Çý¶¯¶¼ÊǹȸèºÍIE¹Ù·½ÌṩµÄ£¬¿ÉÒÔ´ÓÍøÉÏÏÂÔØµ½£»¶øFireFox²»ÐèÒªÏÂÔØÇý¶¯£¬Ö»Òª°²×°ä¯ÀÀÆ÷¾Í¿Éµ÷Óã¨SeleniumºÍFireFoxÊôÓÚÒ»¸öÍŶӿª·¢³öÀ´µÄ£¬´ýÓö¾ÍÊDz»Ò»Ñù£©¡£

ÓÐÁËä¯ÀÀÆ÷Çý¶¯ºó£¨ÎÒÃǰÑÇý¶¯·Åµ½¹¤³ÌĿ¼µÄWebDriverÎļþ¼ÐÏ£¬·½±ã°´Ïà¶Ô·¾¶Í³Ò»µ÷Óã©£¬ÎÒÃǾÍÐèÒªÒ»¸öÄܵ÷ÓÃä¯ÀÀÆ÷µÄÀ࣬ÒÔÏÂÌṩºËÐÄ´úÂëÑùÀý£º

3¡¢Ð´Ò»¸öÒÔÊý¾ÝÇý¶¯µÄ³¡¾°À࣬À´½øÐе¥¸öÊÂÎñµÄÓÃÀýÅܲâ

£¨1£©Ê×ÐÐÎÒÃÇÐèÒªÓÃTesgNgÌṩµÄÊý¾ÝÇý¶¯·½·¨£¨@DataProvider£©£¬À´»ñȡһ¸ö³¡¾°µÄÓÃÀý±íÊý¾Ý£¬Õâ¸ö³¡¾°´ÓexcelµÄµÚÒ»¸ö¸½±í»ñÈ¡

ͨ¹ýactionÃû£¬µ÷È¡ÓÃÀý±í£¨ÓÃÀý±íÊÇÒÔactionÃûÃüÃûµÄ¸½±í£©£¬ÓÃÀý±íÈçÏÂËùʾ£¨ExpectedObject±íʾÓÃÀýУÑé¶ÔÏóµÄÒ³ÃæElement±êÇ©£¬Óã»·Ö¸ô£¬·ÖºÅÇ°ÃæµÄ±íʾID£¬·ÖºÅºóÃæµÄ±íʾxpath£©£º

ÒÔÏÂΪÓÃÀý±íÊý¾Ý»ñÈ¡µÄ´úÂ룺

ÒÔÏÂΪÓÃÀý±íÊý¾Ý»ñÈ¡µÄ´úÂ룺

È»ºóͨ¹ýJavaµÄ·´Éä»úÖÆ£¬ÊµÏÖ¶¯Ì¬µÄ»ñÈ¡¾ßÌåÊÂÎñÀàºÍÖ´ÐÐÏà¹Ø²Ù×÷£¨Ã¿¸öÊÂÎñµÄÀàÃûºÍ·½·¨Ãû¶¼Óëaction³¡¾°ÃûÒ»Ö£©£¬ÒÔϽØÑ¡Ïà¹Ø³¡¾°µÄ²¿·Öµ÷ÓôúÂ룺

ÁíÍâ˵Ã÷µÄÊÇ£¬µ÷ÓÃä¯ÀÀÆ÷µÄ·½·¨£¬ÐèÒªÃ÷È·ÊÇ·ÅÔÚ@BeforeMethodÖУ¬»¹ÊÇÔÚ@BeforeClassÖУ¬Èç¹ûÊǵǼУÑé²âÊÔ£¬¾ÍÒª±£Ö¤Ã¿´ÎÖ´ÐвâÊÔ·½·¨¶¼Òª´ò¿ªÒ»´Îä¯ÀÀÆ÷ºÍ¹Ø±ÕÒ»´Îä¯ÀÀÆ÷£¬ÄÇôÎÒÃǾÍÒª°Ñµ÷ÓÃä¯ÀÀÆ÷£¬ºÍ¹Ø±Õä¯ÀÀÆ÷µÄ·½·¨·Åµ½@BeforeMethodÖкÍ@AfterMethodÖС£ÆäËûÒµÎñ²âÊÔ£¬Ö»ÒªÔÚÒ»¸öÌ×¼þÀàÖдò¿ªÒ»´Îä¯ÀÀÆ÷ºÍ¹Ø±ÕÒ»´Îä¯ÀÀÆ÷¾Í¿ÉÒÔ£¬ËùÒÔÓõ½µÄÊÇ@BeforeClassºÍ@AfterClass¡£

4¡¢ÎÒÃÇÐèÒªÔÙдһ¸öÒÔ¶¯×÷£¨¹Ø¼ü´Ê£©Çý¶¯µÄ³¡¾°Àà

ͬÑù£¬µ÷Óõڶþ¸ö³¡¾°µÄÓÃÀý±í£¬ÑùÀý´úÂëÈçÏ£º

È»ºóÔÚ²âÊÔ·½·¨ÖУ¬¶¯Ì¬µÄµ÷ÓþßÌå²Ù×÷¶¯×÷£¬»ñÈ¡WebElement±êÇ©µÄ·½·¨£¬°üÀ¨Í¨¹ýBy ID»òÕßBy?xpath£¬²Ù×÷¶¯×÷ÒÔ×î³£¼ûµÄÁ½¸öΪÀý£¨sendKeys¡¢click£©£¬ÒÔÏÂΪÑùÀý´úÂë½ÚÑ¡£º

Õâ¶Î·½·¨Ëùµ÷ÓõÄÓÃÀý±íÈçÏÂËùʾ£¨ÒԵǼΪÀý£©£º

5¡¢Ê£Ï¾ÍÊÇÒµÎñÀ©Õ¹ÀàÁË£¬ËùÓи´ÔÓµÄÊÂÎñ¶¼¿ÉÒÔµ¥¶À½¨Á¢²âÊÔÀàºÍ·½·¨£¨·½±ãÀ©Õ¹Î¬»¤£¬Ö»ÐèÒªÔÚexcel³¡¾°±íÖж¨Òåºó¾ÍÄܵ÷Óã¬ÀûÓõÄÊÇJava·´Éä»úÖÆ£©£¬ÔÚÕâÀï¾Í²»¾ÙÀýÁË¡£

ËÄ¡¢ÊµÏÖ²âÊÔÌ×¼þµ÷Óúͱ¨¸æÊä³ö

ÓÐÁËÒÔÉϲ½Ö裬һ¸ö¿ÉÀ©Õ¹µÄ×Ô¶¯»¯¿ò¼ÜÒѾ­»ù±¾Ðγɣ¬µ«ÊÇ»¹´ï²»µ½´ó¹æÄ£Ó¦ÓòâÊԺͽű¾·½±ã¿ÉÒÆÖ²£¬ÕâʱºòÎÒÃÇÒýÈëAnt£¨¿ÉÒÔÔÚEclipseÖа²×°²å¼þ£¬¿ÉÒÔÖ±½ÓÉÏÍøÏÂÔØºóÒýÓã©£¬ÎªÁËÄÜÊä³öƯÁÁÒ»µãµÄ±¨¸æ¸ñʽ£¬ÎÒÃÇ»¹ÒýÈëÒ»¸ösaxon-8.7.jar¡£

ÓÐÁËAntºó£¬ÎÒÃǾͿÉÒÔ½¨Òébuild.xmlÎļþ£¬¾ÍÄÜÒ»¼übulidÎÒÃÇÒÔÉϵÄ×Ô¶¯»¯´úÂ룬²¢½«Ö´ÐвâÊÔºóµÄ½á¹ûÊä³ö³É±¨¸æ¡£

1¡¢Ê×ÏÈÎÒÃÇÐèÒª±à¼­ºÃ²âÊÔÌ×¼þµ÷ÓõÄtestng.xml£¬¼òµ¥¾ÙÀýÈçÏ£º

2¡¢È»ºóÎÒÃÇÐèÒª±à¼­ºÃÒ»¸öÄÜÒýÓûù´¡jar°ü¡¢build²âÊÔ´úÂë¡¢µ÷ÓÃtestng¡¢Êä³öƯÁÁ±¨¸æµÄbuild.xmlÎļþ


<?xml version="1.0" encoding="UTF-8"?>

<project name= "TestAction" basedir= "." default="testoutput"><!--defaultÉèÖÃΪrun±íʾִֻÐнű¾£¬ÉèΪtestoutput±íʾִÐÐÍê½Å±¾²¢Êä³öÊÓͼ±¨¸æ-->
<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" />
<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" 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ÎÒÃǵÄ×Ô¶¯»¯½Å±¾ÁË£¬Êä³öÒ»·Ý»¹ËãÆ¯ÁÁµÄ±¨¸æ£º

ͬʱ£¬ÐèÒªÔÚÊÂÎñ²Ù×÷ÀàÖУ¬¶Ôʵ¼Ê½á¹ûºÍÔ¤ÆÚ½á¹û½øÐбȽϣ¬²¢½«²âÊÔ½á¹ûдÈëexcelµÄÓÃÀý±íÖУ¬ÈçÏ£º

Î塢ʵÏÖ×Ô¶¯»¯¿ò¼Ü½Å±¾µÄÇ¨ÒÆµ÷ÓÃ

ÒÔÉϵĽű¾Ê¼ÖÕÊÇÔÚEclipseϱàÒëºÍµ÷Óõģ¬Èç¹ûҪʵÏÖÁé»îÇ¨ÒÆ£¬Ëæ±ã»»ÈκÎһֻ̨װÁËJDKµÄµçÄÔ¶¼ÄÜÔËÐУ¬ÄÇôÎÒÃǾÍÒªÀ´µã¸ÄÔì

1¡¢Ê×ÐÐÊDZ£Ö¤ÎÒÃÇдµÄ´úÂëÖУ¬ËùÒÔÐèÒªÒýÓÃÎļþµÄµØ·½£¬¶¼ÓÃÏà¶Ô·¾¶µÄ·½Ê½£¬±ÜÃâ´úÂë°üÇ¨ÒÆºóÐèÒª¸Ä·¾¶¡£

2¡¢Í¨¹ýÅú´¦Àíµ÷ÓÃbuildÎļþ¼°ÓÃÀýÎļþ£¬µ÷ÓÃʱҲÊÇͨ¹ýÅú´¦Àí×Ô¶¯ÕÒµ½Ïà¹ØÂ·¾¶£¬±ÜÃâÓþø¶Ô·¾¶¡£

3¡¢ÐèÒªÓû·¾³±äÁ¿µÄµØ·½£¬¾¡Á¿ÓÃÅú´¦ÀíµÄ·½Ê½ÊµÏÖ£¬ÉõÖÁ×îºÃÊDz»ÓÃÅäÖû·¾³±äÁ¿£¬Ö±½Óµ÷ÓÃÏàÒýÓÃÏà¶ÔÃüÁîÎļþµÄ·¾¶µ÷ÓÃ

ÒÔϾٸöͨ¹ýbatÅú´¦Àíµ÷ÓÃAntÀ´Ö´ÐÐÕû¸ö¿ò¼Ü´úÂëµÄbuild£º

Áù¡¢½øÒ»²½ÊµÏÖ×Ô¶¯»¯µÄ³ÖÐø¼¯³É

ÔÚÒÔÉÏ»ù´¡ÉÏ£¬ÎÒÃÇ»¹¿ÉÒÔͨ¹ýjenkinsʵÏÖ¶Ô×Ô¶¯»¯½Å±¾µÄµ÷Óã¬ÒÔ¼°´ïµ½Ã¿ÈÕ¹¹½¨£¬³ÖÐø¼¯³É¿ª·¢µÄÒªÇó¡£

1¡¢Ê×ÏȲ¿Êðjenkins£¨ÍøÉÏÓÐÏà¹Ø·½·¨£©£¬ÓÉÓÚ±¾È˹«Ë¾Ò»Ö±ÔÚÓÃjenkins£¬ÎÒ¾ÍÊ¡Á˴²¿ÊðÕâÒ»²½£¬Ö±½Ó½«ÒÔÉϵÄ×Ô¶¯»¯¿ò¼Ü½Å±¾ÉÏ´«

2¡¢×Ô¶¯»¯½Å±¾ÍêÕûĿ¼£¨°üÀ¨´úÂë¡¢ÓÃÀý¡¢lib¡¢ÒýÓõÄjar¡¢build.xmlÎļþµÈ£©ÉÏ´«µ½SVN£¨ÔÙ×Ô¶¯´ÓSVNϵ½jenkinsËùÔÚ·þÎñÆ÷£©

3¡¢ÔÚjenkinsÖÐн¨Ò»¸ö²âÊÔÏîÄ¿TestAction£¬Ö÷ÒªÅäÖÃÈçÏ£º

4¡¢ÅäÖÃÍêºó£¬¾Í¿ÉÒÔÁ¢¼´¹¹½¨£¨Èç¹ûÅöµ½Ïà¹Ø±¨´íÎÊÌ⣬¾Í°´Êä³öµÄÌáʾ½øÐд¦Àí£©£¬¹¹½¨³É¹¦ºó£¬¾Í¿ÉÒÔÔÚHTML_ReportÖп´µ½²âÊÔ½á¹û£º

Æß¡¢ºóÐø´¦Àí

µ½´ËΪֹ£¬Ò»¸öÍêÕûµÄSelenium×Ô¶¯»¯¿ò¼Ü¾Í³öÀ´ÁË£¬ÒªËµºÃÓò»£¬²»ºÃ˵£¬»¹µÃ¾­¹ýʵ¼ùµÄ¼ìÑ飬µ«ÊÇÒÔÉÏÕâ¸ö˼¿¼¹ý³ÌºÍ¿ò¼ÜµÄÑݽø¹ý³Ì£¬Ó¦¸ÃÒ²ÊÇÖµµÃ½è¼øµÄ£¬±Ï¾¹ÕâÊÇÎÒÕ⼸ÌìÃþË÷ºÍѧϰµÄ¹ý³Ì£¬¶ÔÓÚÒ»¸öûÓдÓʹý×Ô¶¯»¯²âÊÔ£¬¶øÇÒûÓÐ×ö¹ýJava¿ª·¢µÄ²âÊÔÈËÔ±À´Ëµ£¬ÕâÖ»ÊǸö¿ªÊ¼¡£

ĿǰÀ´¿´£¬Õâ¸ö¿ò¼ÜÔڼܹ¹·Ö²ãÉÏ£¬»¹ÊDz»¹»ÇåÎú£¬ÓкܶàÒª¸Ä½øµÄ¶«Î÷£¬´Ó¼¼ÊõÉÏÀ´Ëµ£¬ÎÒÒѾ­ÊµÏÖÁËÎÒµÄÄ¿±ê£¨Ñ§Ï°×Ô¶¯»¯²âÊÔ£©£¬µ«ÊÇÔÚÕûÌå¼Ü¹¹ºÍ´úÂëÖØ¹¹ÉÏ£¬»¹Óкܶ๤×÷û×ö£¬ÒÔÏÂÌù³öÒ»·ÝSelenium×Ô¶¯»¯¿ò¼ÜµÄ·Ö²ã½á¹¹£¬ÒÔ±ãºóÆÚ°´ÕÕÕâ¸ö±ê×¼½øÐиĽø£º

²âÊÔÊý¾Ý²ã£º¶ÀÁ¢·â×°Êý¾Ý£»

Ò³Ãæ¶ÔÏó²ã£º·â×°Ò³Ãæ¶ÔÏ󣬹²Ò³ÃæÈÎÎñ²ã×öµ÷Óã»

Ò³ÃæÈÎÎñ²ã£ºÊµÏÖ¸÷¸ö¶ÀÁ¢Ò³ÃæµÄ²Ù×÷£»

²âÊԲ㣺ʵÏÖÒ³Ãæ²âÊÔ£»

²âÊÔÌ×¼þ²ã£ºÊµÏÖ²âÊÔ²ãµÄ¹ÜÀíµ÷Óã»

 

 

   
2194 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

΢·þÎñ²âÊÔÖ®µ¥Ôª²âÊÔ
һƪͼÎÄ´øÄãÁ˽â°×ºÐ²âÊÔÓÃÀýÉè¼Æ·½·¨
È«ÃæµÄÖÊÁ¿±£ÕÏÌåϵ֮»Ø¹é²âÊÔ²ßÂÔ
È˹¤ÖÇÄÜ×Ô¶¯»¯²âÊÔ̽Ë÷
Ïà¹ØÎĵµ

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
jenkins³ÖÐø¼¯³É²âÊÔ
ÐÔÄܲâÊÔÕï¶Ï·ÖÎöÓëÓÅ»¯
ÐÔÄܲâÊÔʵÀý
Ïà¹Ø¿Î³Ì

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù