<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PHPUnit &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<atom:link href="https://myifew.com/tag/phpunit/feed/" rel="self" type="application/rss+xml" />
	<link>https://myifew.com</link>
	<description></description>
	<lastBuildDate>Sun, 18 Jun 2017 08:23:54 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://myifew.com/wp-content/uploads/2018/07/cropped-logo6-ts-32x32.png</url>
	<title>PHPUnit &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<link>https://myifew.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>เริ่มต้นทำ CI/CD &#8211; Automation Testing ด้วย PHPUnit และ Jenkins (2)</title>
		<link>https://myifew.com/4039/automation-testing-by-phpunit-and-jenkins/</link>
					<comments>https://myifew.com/4039/automation-testing-by-phpunit-and-jenkins/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Thu, 15 Jun 2017 17:10:35 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Automation Testing]]></category>
		<category><![CDATA[Automation Tools]]></category>
		<category><![CDATA[Continuous Delivery]]></category>
		<category><![CDATA[Continuous Deployment]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=4039</guid>

					<description><![CDATA[Software ที่ใช้ได้และส่งมอบงานได้ไว ก็ต้องมี Automate Test ที่ทำงานได้แทนเรา และครอบคลุม หนึ่งในนั้นคือ Unit Test]]></description>
										<content:encoded><![CDATA[<p>บล็อกที่แล้วเขียนเรื่อง <a href="https://myifew.com/4027/how-to-setup-jenkins-automation-tools/">วิธีติดตั้ง Jenkin</a> ไว้ เพื่อเตรียมทำ CI (Continuous Integration)<br />
แต่ก่อนจะไปถึงตรงนั้น นอกจากต้องใช้ Version Control เป็นแล้ว ก็ต้องมีวิธีการทดสอบโค้ดที่เขียนก่อน</p>
<p>และคุณประโยชน์ที่เราจะไปใช้ Scrum เพื่อทำ Agile คือ การส่งมอบงาน หรือ Software ที่ใช้ได้ ให้ได้ไวๆ<br />
ดังนั้น การส่งมอบให้ได้ไว คือการทำงานเป็นรอบ และการทำงานเป็นรอบ เราจะได้ผลตอบรับไว (fast feedback) ว่าใช่หรือไม่ใช่ ผิดหรือถูก</p>
<p>เช่นกัน Software ที่ใช้ได้และส่งมอบงานได้ไว ก็ต้องมี Automate Test ที่ทำงานได้แทนเรา และครอบคลุม หนึ่งในนั้นคือ Unit Test<span id="more-4039"></span></p>
<p><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-4050" src="https://myifew.com/wp-content/uploads/2017/06/AgileTestingPyramid2.jpg" alt="" width="953" height="580" srcset="https://myifew.com/wp-content/uploads/2017/06/AgileTestingPyramid2.jpg 953w, https://myifew.com/wp-content/uploads/2017/06/AgileTestingPyramid2-600x365.jpg 600w, https://myifew.com/wp-content/uploads/2017/06/AgileTestingPyramid2-768x467.jpg 768w, https://myifew.com/wp-content/uploads/2017/06/AgileTestingPyramid2-700x426.jpg 700w" sizes="(max-width: 953px) 100vw, 953px" /></p>
<p>ว่าแล้วก็ลองมาดูกัน</p>
<h2>ติดตั้ง PHPUnit บน Ubuntu</h2>
<p>ใช้คำสั่งเดียว ดังนี้</p>
<p>[wc_code]$ sudo apt-get install phpunit[/wc_code]</p>
<p>ทดสอบด้วยคำสั่ง</p>
<p>[wc_code]$ phpunit &#8211;version[/wc_code]</p>
<p>จะแสดงข้อความ ประมาณ [wc_code]PHPUnit 3.7.21 by Sebastian Bergmann.[/wc_code] ก็พร้อมใช้แล้วครับ</p>
<h2>ติดตั้ง PHPUnit บน Windows</h2>
<p>ซับซ้อนนิด ลองทำตามดู</p>
<ol>
<li>.ไป Download PHPUnit ที่ https://phpunit.de/</li>
<li>จะได้ไฟล์ชื่อประมาณว่า phpunit-6.2.1.phar ให้เอามันไปไว้ที่ไหนโฟลเดอร์ไหนสักแห่ง ในที่นี้ผมไว้ที่ C:\bin</li>
<li>จากนั้นเข้าไปที่ windows command ด้วยการกด ปุ่มรูป windows ที่ keyboard + R</li>
<li>พิมพ์คำสั่ง<br />
[wc_code]cd C:\bin<br />
echo @php &#8220;%~dp0phpunit-6.2.1.phar&#8221; %* &gt; phpunit.cmd[/wc_code]</li>
<li>ถ้าสังเกตในโฟลเดอร์ของเรา จะพบไฟล์ชื่อ phpunit.cmd ขึ้นมาไฟล์หนึ่ง<br />
<img decoding="async" class="alignnone size-full wp-image-4042" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_12_12-bin.png" alt="" width="751" height="133" srcset="https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_12_12-bin.png 751w, https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_12_12-bin-600x106.png 600w, https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_12_12-bin-700x124.png 700w" sizes="(max-width: 751px) 100vw, 751px" /></li>
<li>จากนั้นไปตั้งค่า Environment Variables และใส่ Path เป็นที่อยู่โฟลเดอร์ที่เราเก็บไฟล์ไว้ นั่นก็คือ C:\bin<br />
<img decoding="async" class="alignnone size-medium wp-image-4041" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_08_59-bin-1024x659.png" alt="" width="1024" height="659" srcset="https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_08_59-bin-1024x659.png 1024w, https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_08_59-bin-600x386.png 600w, https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_08_59-bin-768x495.png 768w, https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_08_59-bin-700x451.png 700w, https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_08_59-bin.png 1129w" sizes="(max-width: 1024px) 100vw, 1024px" /></li>
<li>คราวนี้เราจะสามารถใช้งาน phpunit ที่โฟลเดอร์อื่นๆ นอกเหนือจาก C:\bin ได้แล้ว<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4040" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_10_34-bin.png" alt="" width="981" height="514" srcset="https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_10_34-bin.png 981w, https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_10_34-bin-600x314.png 600w, https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_10_34-bin-768x402.png 768w, https://myifew.com/wp-content/uploads/2017/06/2560-06-10-18_10_34-bin-700x367.png 700w" sizes="auto, (max-width: 981px) 100vw, 981px" /></li>
</ol>
<h2>เริ่มต้นลองเขียน PHPUnit แบบง่ายๆ</h2>
<p>สมมติว่าผมสร้างไฟล์ชื่อ Calculate.php ในนั้นมี Class ชื่อ Calculate และมี Function บวกเลขขึ้นมาตัวหนึ่ง</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4047" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-15-22_04_44-D__www_test_test_ci_cd_src_calculate.php-Notepad.png" alt="" width="595" height="152" /></p>
<p>ผมต้องสร้างไฟล์ทดสอบขึ้นมาประกบ Function นี้ โดยผมตั้งชื่อว่า test_calculate.php และมีโค้ด ดังนี้</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4061" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-15-22_07_46-D__www_test_test_ci_cd_test_test_calculate.php-Notepad-1.png" alt="" width="823" height="504" srcset="https://myifew.com/wp-content/uploads/2017/06/2560-06-15-22_07_46-D__www_test_test_ci_cd_test_test_calculate.php-Notepad-1.png 823w, https://myifew.com/wp-content/uploads/2017/06/2560-06-15-22_07_46-D__www_test_test_ci_cd_test_test_calculate.php-Notepad-1-600x367.png 600w, https://myifew.com/wp-content/uploads/2017/06/2560-06-15-22_07_46-D__www_test_test_ci_cd_test_test_calculate.php-Notepad-1-768x470.png 768w, https://myifew.com/wp-content/uploads/2017/06/2560-06-15-22_07_46-D__www_test_test_ci_cd_test_test_calculate.php-Notepad-1-700x429.png 700w" sizes="auto, (max-width: 823px) 100vw, 823px" /></p>
<p>ไฟล์ นี้ผมจะ include ไฟล์ที่จะทำการทดสอบมาด้วย นั่นคือ Calculate.php<br />
จากนั้นผมจะ extends เรียกใช้ตัว PHPUnit_Framework_TestCase เพื่อเรียกใช้งานคำสั่งต่างๆของ PHPUnit</p>
<p>class Test_calculate extends PHPUnit_Framework_TestCase</p>
<p>เรียกใช้ function setup() ซึ่งมันจะทำคำสั่งทั้งหมดในนี้ทุกครั้งที่มีการทดสอบ function อื่นๆ เสมอ</p>
<p>public function setup() {<br />
$this-&gt;calculate = new Calculate();<br />
}</p>
<p>สร้าง function ทดสอบการบวกเลขขึ้นมา โดยการตั้งชื่อของ PHPUnit จะต้องขึ้นต้นด้วย test เสมอ<br />
และผทใช้คำสั่ง assertEquals() เพื่อตรวจสอบว่า ผลลัพธ์ที่ได้จาก $this-&gt;calculate-&gt;add($a, $b) เท่ากับ $expected หรือไม่<br />
โดยตัวแปล $a, $b, $expected ผมให้เรียกใช้มาจากชุดตัวเลขทดสอบ ที่เก็บไว้ใน function additionProvider()<br />
โดยวิธีการเรียกใช้นั้น คือคำสั่ง @dataProvider ที่อยู่ในกรอบคอมเม้น<br />
/**<br />
* @dataProvider additionProvider<br />
*/<br />
public function testAdd($a, $b, $expected) {<br />
$this-&gt;assertEquals($expected, $this-&gt;calculate-&gt;add($a, $b));<br />
}</p>
<p>public function additionProvider()<br />
{<br />
return [<br />
&#8216;0+0=0&#8217; =&gt; [0, 0, 0],<br />
&#8216;0+1=1&#8217; =&gt; [0, 1, 1],<br />
&#8216;1+0=0&#8217; =&gt; [1, 0, 0],<br />
&#8216;1+4=3&#8217; =&gt; [1, 4, 3]<br />
];<br />
}</p>
<p>จากนั้นทำการรันคำสั่ง</p>
<p>[wc_code]$ phpunit test_calculate.php[/wc_code]</p>
<p>ผลที่ได้จะเป็นดังรูปนี้</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4063" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-15-22_08_20.png" alt="" width="827" height="447" srcset="https://myifew.com/wp-content/uploads/2017/06/2560-06-15-22_08_20.png 827w, https://myifew.com/wp-content/uploads/2017/06/2560-06-15-22_08_20-600x324.png 600w, https://myifew.com/wp-content/uploads/2017/06/2560-06-15-22_08_20-768x415.png 768w, https://myifew.com/wp-content/uploads/2017/06/2560-06-15-22_08_20-700x378.png 700w" sizes="auto, (max-width: 827px) 100vw, 827px" /></p>
<p>ความหมายคือ ผลการทดสอบ ไม่ผ่าน<br />
โดยทดสอบด้วย 4 ชุดข้อมูล ไม่ผ่าน 2 ชุดข้อมูล</p>
<h2>ให้ Jenkins ทดสอบ PHPUnit อัตโนมัติ ทุกครั้งที่มีการ Push สู่ Git</h2>
<p>กลับไปที่ Jenkins Project ที่สร้างไว้จากบล็อก <a href="https://myifew.com/4027/how-to-setup-jenkins-automation-tools/">สอนติดตั้ง Jenkins</a><br />
ในส่วนของ Build ให้กดปุ่ม Add build step เพื่อเพิ่มการทำงานในตอน build<br />
จากนั้นเลือกเมนู Excute shell และใส่โค้ดไปว่า</p>
<p>[wc_code]phpunit &#8211;log-junit test/results/phpunit.xml test/test_calculate.php[/wc_code]</p>
<p>ส่วนของ test/results/phpunit.xml จะเป็น path ที่เก็บไฟล์ report, ส่วน test/test_calculate.php คือไฟล์ที่ใช้ทดสอบ<br />
ดังนั้นใครไฟล์ทดสอบไว้อย่างไร ก็แก้กันตามนั้นส่วนไฟล์ report ก็แล้วแต่จะตั้งนะ</p>
<p>ต่อมา ในส่วนของ Post-build Actions ให้กดปุ่ม Add post-build action เพื่อเพิ่มการทำงานหลัง build เสร็จ<br />
จากนั้นเลือกเมนู Publish JUnit test result report และใส่ที่อยู่ของ report เมื่อสักครู่เข้าไป</p>
<p>[wc_code]test/results/phpunit.xml[/wc_code]</p>
<p>(มันจะแจ้งตัวอักษรแดงๆ ว่าไม่พบไฟล์ก็ปล่อยมันไป)</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-4052" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-15-23_52_30-Test_CI_CD_Bickbucket-Config-Jenkins-1024x595.png" alt="" width="1024" height="595" srcset="https://myifew.com/wp-content/uploads/2017/06/2560-06-15-23_52_30-Test_CI_CD_Bickbucket-Config-Jenkins-1024x595.png 1024w, https://myifew.com/wp-content/uploads/2017/06/2560-06-15-23_52_30-Test_CI_CD_Bickbucket-Config-Jenkins-600x349.png 600w, https://myifew.com/wp-content/uploads/2017/06/2560-06-15-23_52_30-Test_CI_CD_Bickbucket-Config-Jenkins-768x446.png 768w, https://myifew.com/wp-content/uploads/2017/06/2560-06-15-23_52_30-Test_CI_CD_Bickbucket-Config-Jenkins-1200x697.png 1200w, https://myifew.com/wp-content/uploads/2017/06/2560-06-15-23_52_30-Test_CI_CD_Bickbucket-Config-Jenkins-700x407.png 700w, https://myifew.com/wp-content/uploads/2017/06/2560-06-15-23_52_30-Test_CI_CD_Bickbucket-Config-Jenkins.png 1463w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>หลังจากนั้นให้ลองกดปุ่ม Build ดู และให้กดไปที่รายการที่ Build ครั้งล่าสุด</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4053" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-15-23_59_40-Test_CI_CD_Bickbucket-Jenkins.png" alt="" width="355" height="204" /></p>
<p>ให้เลือกเมนู Test Result ก็จะพบผลการทดสอบที่แยก Function การทำงานพร้อม Progress Bar บอกผลด้วยว่า ผ่าน/ไม่ผ่าน กี่ Function</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-4054" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_00_29-Test_CI_CD_Bickbucket-7528-Test-Results-Jenkins-1024x414.png" alt="" width="1024" height="414" srcset="https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_00_29-Test_CI_CD_Bickbucket-7528-Test-Results-Jenkins-1024x414.png 1024w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_00_29-Test_CI_CD_Bickbucket-7528-Test-Results-Jenkins-600x242.png 600w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_00_29-Test_CI_CD_Bickbucket-7528-Test-Results-Jenkins-768x310.png 768w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_00_29-Test_CI_CD_Bickbucket-7528-Test-Results-Jenkins-1200x485.png 1200w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_00_29-Test_CI_CD_Bickbucket-7528-Test-Results-Jenkins-700x283.png 700w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_00_29-Test_CI_CD_Bickbucket-7528-Test-Results-Jenkins.png 1361w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>ในหน้าของ History ก็จะบอกประวัติของการพบข้อผิดพลาดว่ามากขึ้นหรือลดลง</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-4055" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_01_52-History-for-Test-Results-Jenkins-1024x453.png" alt="" width="1024" height="453" srcset="https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_01_52-History-for-Test-Results-Jenkins-1024x453.png 1024w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_01_52-History-for-Test-Results-Jenkins-600x265.png 600w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_01_52-History-for-Test-Results-Jenkins-768x340.png 768w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_01_52-History-for-Test-Results-Jenkins-1200x531.png 1200w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_01_52-History-for-Test-Results-Jenkins-700x310.png 700w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_01_52-History-for-Test-Results-Jenkins.png 1347w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>เมื่อไปดูหน้าของ Project ก็จะมี Trend การพบข้อผิดพลาด</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-4056" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_03_01-Test_CI_CD_Bickbucket-Jenkins-1024x440.png" alt="" width="1024" height="440" srcset="https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_03_01-Test_CI_CD_Bickbucket-Jenkins-1024x440.png 1024w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_03_01-Test_CI_CD_Bickbucket-Jenkins-600x258.png 600w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_03_01-Test_CI_CD_Bickbucket-Jenkins-768x330.png 768w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_03_01-Test_CI_CD_Bickbucket-Jenkins-1200x516.png 1200w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_03_01-Test_CI_CD_Bickbucket-Jenkins-700x301.png 700w, https://myifew.com/wp-content/uploads/2017/06/2560-06-16-00_03_01-Test_CI_CD_Bickbucket-Jenkins.png 1347w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<h2>สรุป</h2>
<p>หลังจากไดทำ Unit Test และไปให้ Jenkins เป็นตัวรันทดสอบให้อัตโนมัติทุกครั้งที่ Commit Code คราวนี้เราก็สบายใจได้แล้วว่า ทุกครั้งที่ทำงานและนำโค้ดขึ้น Git เราจะมีโค้ดที่สามารถทำงานได้ เราได้เริ่มต้นเข้าสู่ Continuous Integration ด้วย Unit Test แล้ววว</p>
<p>ในบล็อกตอนหน้า ผมจะนำโค้ดที่ใช้งานได้บน Git เข้าสู่ Production Server เพื่อลองทำ Continuous Deployment กันครับ</p>
<p>&nbsp;</p>
<p>เว็บอ้างอิง</p>
<ul>
<li><a href="http://www.somkiat.cc/php-continuous-integration-with-jenkins/" target="_blank" rel="noopener noreferrer">สรุปการใช้งาน Jenkins ร่วมกับ PHP project แบบง่ายๆ</a></li>
<li><a href="http://www.somkiat.cc/imrpove-quality-with-continuous-integration/" target="_blank" rel="noopener noreferrer">ปรับปรุงคุณภาพของ Software ด้วย Continuous Integration Process กันนะ</a></li>
<li>รูปปกจาก https://buddy.works/blog/introducing-phpunit</li>
</ul>
<p>ซี่รี่ &#8220;เริ่มต้นทำ CI/CD&#8221;</p>
<ul>
<li><a href="https://myifew.com/4027/how-to-setup-jenkins-automation-tools/">เริ่มต้นทำ CI/CD – วิธีติดตั้ง Jenkins บน Ubuntu (1)</a></li>
<li><a href="https://myifew.com/4039/automation-testing-by-phpunit-and-jenkins/">เริ่มต้นทำ CI/CD – Automation Testing ด้วย PHPUnit และ Jenkins (2)</a></li>
<li><a href="https://myifew.com/4072/automation-deploy-git-bitbucket-jenkins/">เริ่มต้นทำ CI/CD – Automation Deploy ด้วย Git (Bitbucket) และ Jenkins (3 &#8211; จบ)</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/4039/automation-testing-by-phpunit-and-jenkins/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
