Slide 1

Slide 1 text

CodeceptionΛར༻ͨ͠
 WordPressϓϥάΠϯςετ
 ͜ͱ͸͡Ί

Slide 2

Slide 2 text

ࣗݾ঺հ • ֯ాɹҰฏʢ͢Έͩɹ͍ͬ΃͍ʣ • PHP, iOS, Androidɹ։ൃ΍ͬͯ·͢ • CoderDojo੢ٶɾകాɹϝϯλʔ

Slide 3

Slide 3 text

ࠓ೔ͷ໨ඪ • CodeceptionͷઃఆΛ͢Δ • ϓϥάΠϯͷςετέʔεΛ࡞੒͢Δ • ςετΛ࣮ߦ͢Δ

Slide 4

Slide 4 text

ΞδΣϯμ 1. Codeceptionʹ͍ͭͯ 2. PhpStormʹ͍ͭͯ 3. WordPress։ൃ؀ڥߏங 4. SeleniumΠϯετʔϧɾઃఆɾىಈ

Slide 5

Slide 5 text

ΞδΣϯμ 5. CodeceptionΠϯετʔϧɾઃఆ 6. σϞ༻WordPressϓϥάΠϯ࡞੒ 7. ςετϓϩάϥϜ࡞੒ 8. ςετ

Slide 6

Slide 6 text

1.Codeceptionʹ͍ͭͯ

Slide 7

Slide 7 text

Codeceptionͱ͸ • PHPͰಈ࡞͢ΔɺςεςΟϯάϑϨʔϜϫʔΫ • Unit, Functional, Acceptanceςετ͕Ͱ͖Δ • CIͱ࿈ܞՄೳ

Slide 8

Slide 8 text

Unitςετ • ͍ΘΏΔ୯ମςετ • ϝιουɺؔ਺୯Ґͷςετ • PHPUnitͱΑΓ΋ॻ͖΍͍͢

Slide 9

Slide 9 text

Functionalςετ • ػೳςετ • ਖ਼௚͔ͭΘͳ͍ɻ • Ͱ΋͖ͬͱຊ࣭Λ͔ͭΊ͹໾ཱͭ͸ͣɻ

Slide 10

Slide 10 text

Acceptanceςετ • ৼΔ෣͍ςετ • Selenium࿈ܞͰϒϥ΢βςετͰ͖Δɻ • APIͷςετ΋Ͱ͖Δɻ • ʢݸਓతʣCodeception͸͜ͷͨΊʹ͋Δɻ

Slide 11

Slide 11 text

2.PhpStormʹ͍ͭͯ

Slide 12

Slide 12 text

PhpStormͱ͸ • PHP༻IDE • Eclipseͱൺ΂͍ͯܰɻ • Git,SVNΫϥΠΞϯτඪ४૷උɻ • Vagrant΋੍ޚՄೳɻ

Slide 13

Slide 13 text

ͨͩ͠༗ྉ • ೥ֹ9,936ԁʙ • ຊՈɺαϜϥΠζϜ͔ΒߪೖՄೳɻ • ࠓͳΒαϜϥΠζϜ͔Βߪೖͷํ͕͍҆ʁ

Slide 14

Slide 14 text

ࠓճ࢖༻͢Δ΋ͷ • WordPress (Apache, MySQL, PHP>=5.4, wp-cli) • PhpStorm • Codeception • Selenium standalone-server • Firefox

Slide 15

Slide 15 text

3.WordPress։ൃ؀ڥߏங

Slide 16

Slide 16 text

wp-cliΠϯετʔϧ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh- pages/phar/wp-cli.phar

Slide 17

Slide 17 text

wp-cliΠϯετʔϧʢMacʣ brew install wp-cli

Slide 18

Slide 18 text

MySQLηοτΞοϓ mysql -uroot -p*** mysql
 create database wordpress;
 create database wordpress_test
 CREATE USER wordpress IDENTIFIED BY 'wordpress';
 CREATE USER wordpress@localhost IDENTIFIED BY 'wordpress';
 GRANT ALL PRIVILEGES ON *.* TO wordpress@localhost;
 GRANT ALL PRIVILEGES ON *.* TO wordpress;
 flush privileges;

Slide 19

Slide 19 text

VCCWΠϯετʔϧ vagrant box add miya0001/vccw
 wget https://github.com/vccw-team/vccw/archive/2.19.0.zip
 unzip 2.19.0.zip
 cd vccw-2.19.0
 vagrant up
 
 ※ผϓϩδΣΫτͰvccw.devΛ࢖͍ͬͯΔ৔߹͸ɺϗετ໊Λม ߋ͍ͯͩ͘͠͞ɻ

Slide 20

Slide 20 text

PluginηοτΞοϓ cd ***/www/wordpress/wp-content/plugins
 wp scaffold plugin cc-plugin
 cd cc-plugin
 ./bin/install-wp-tests.sh wordpress_test wordpress wordpress localhost


Slide 21

Slide 21 text

4.Selenium
 Πϯετʔϧɾઃఆ

Slide 22

Slide 22 text

SeleniumηοτΞοϓ wget http://goo.gl/qTy1IB
 java -jar selenium-server-standalone-*.jar

Slide 23

Slide 23 text

SeleniumηοτΞοϓʢMacʣ brew install selenium-server-standalone

Slide 24

Slide 24 text

※஫ҙ఺ • FirefoxɺSeleniumͱ΋࠷৽൛ʹ͢Δɻ • ͨ·ʹλΠϛϯάѱ͍ͱಈ͔ͳ͍৔߹͕͋Δɻ

Slide 25

Slide 25 text

5.Codeception
 Πϯετʔϧɾઃఆ

Slide 26

Slide 26 text

CodeceptionηοτΞοϓ cd ***/www/wordpress/wp-content/plugins/cc-plugin
 wget http://codeception.com/codecept.phar
 php codecept.phar bootstrap

Slide 27

Slide 27 text

CodeceptionηοτΞοϓ cd tests
 cp bootstrap.php _bootstrap.php

Slide 28

Slide 28 text

CodeceptionηοτΞοϓ class_name: AcceptanceTester
 modules:
 enabled:
 - PhpBrowser:
 url: http://vccw.dev
 - \Helper\Acceptance
 
 env:
 firefox:
 modules:
 enabled:
 - WebDriver:
 url: http://vccw.dev
 browser: firefox
 - \Helper\Acceptance
 tests/acceptance.suite.yml

Slide 29

Slide 29 text

6.σϞ༻WordPress
 ϓϥάΠϯ࡞੒

Slide 30

Slide 30 text

ϓϥάΠϯΛ͝༻ҙ͠·ͨ͠ɻ https://github.com/Ippey/cc-plugin

Slide 31

Slide 31 text

ϓϥάΠϯΛ͝༻ҙ͠·ͨ͠ɻ CCϓϥάΠϯ
 ʢCodeceptionςετ༻ϓϥάΠϯʣ
 
 ɾػೳɿࢦఆͷ౎ಓ෎ݝͷळ٢ҰཡΛςʔϒϧදࣔ͠·͢ɻ
 ɾར༻ྫɿγϣʔτίʔυɻ[akiyoshi ژ౎෎]
 ɾඋߟɿळ٢ళฮҰཡ͸ΦʔϓϯσʔλԽ͍ͯ͠·͢ʂ

Slide 32

Slide 32 text

7.ςετϓϩάϥϜ࡞੒

Slide 33

Slide 33 text

ςετϓϩάϥϜ࡞੒ɹ UnitTest cd ***/www/wordpress/wp-content/plugins/cc-plugin
 php codecept.phar generate:test unit AkiyoshiShopManager

Slide 34

Slide 34 text

ςετϓϩάϥϜ࡞੒ɹ UnitTest private $manager;
 
 protected function _before()
 {
 $this->manager = new AkiyoshiShopManager();
 }

Slide 35

Slide 35 text

ςετϓϩάϥϜ࡞੒ɹ UnitTest /**
 * ϓϥΠϕʔτϝιουΛݺͿͨΊͷReflectionMethodΛฦ͢
 *
 * @param $obj
 * @param $name
 *
 * @return ReflectionMethod
 */
 private function getPrivateMethod($obj, $name) {
 $method = new ReflectionMethod($obj, $name);
 $method->setAccessible(true);
 return $method;
 }

Slide 36

Slide 36 text

ςετϓϩάϥϜ࡞੒ɹ UnitTest /**
 * getListByPrefectureͷςετ
 */
 public function testGetListByPrefecture() {
 $pref = "ژ౎෎";
 $method = $this->getPrivateMethod($this->manager, "getListByPrefecture");
 $list = $method->invoke($this->manager, array($pref));
 foreach ($list as $row) {
 $this->assertEquals($pref, $row["prefecture"]);
 }
 }

Slide 37

Slide 37 text

ςετϓϩάϥϜ࡞੒ɹ AcceptanceTest cd ***/www/wordpress/wp-content/plugins/cc-plugin
 php codecept.phar generate:cest acceptance CcPlugin

Slide 38

Slide 38 text

ςετϓϩάϥϜ࡞੒ɹ AcceptanceTest public function _before(AcceptanceTester $I)
 {
 $I->amOnPage("/archives/1");
 }

Slide 39

Slide 39 text

ςετϓϩάϥϜ࡞੒ɹ AcceptanceTest public function testShowAkiyoshiShopList(AcceptanceTester $I)
 {
 $I->canSeeElement("#akiyoshi-list");
 }
 
 public function testShowKawaramachi(AcceptanceTester $I) {
 $I->canSee("Տݪொళ", "#akiyoshi-list");
 }


Slide 40

Slide 40 text

8.ςετ

Slide 41

Slide 41 text

ςετ࣮ߦ
 UnitTest cd ***/www/wordpress/wp-content/plugins/cc-plugin
 php codecept.phar run unit

Slide 42

Slide 42 text

ςετ࣮ߦԼ४උ
 AcceptanceTest ɾϓϥάΠϯΛ༗ޮʹ͢Δ
 ɾطଘϖʔδΛฤूɻ࠷ޙͷߦʹ[akiyoshi ژ౎෎]Λઃఆɻ

Slide 43

Slide 43 text

ςετ࣮ߦ
 AcceptanceTest PHPBrowser cd ***/www/wordpress/wp-content/plugins/cc-plugin
 php codecept.phar run acceptance

Slide 44

Slide 44 text

ςετ࣮ߦ
 AcceptanceTest Firefox cd ***/www/wordpress/wp-content/plugins/cc-plugin
 php codecept.phar run acceptance —env firefox

Slide 45

Slide 45 text

ςετ࣮ߦ
 શ෦·ͱΊͯ cd ***/www/wordpress/wp-content/plugins/cc-plugin
 php codecept.phar run

Slide 46

Slide 46 text

΄͔ʹ΋

Slide 47

Slide 47 text

CodeCeptionͷศརͳ࢖͍ํ ɾϓϥάΠϯҎ֎ͷςετʹ΋ར༻Մೳɻ
 ɹɹ࡞੒ͨ͠ςʔϚͷಠࣗ෦෼͕֤ը໘ʹ൓ө͞ΕͯΔ͔ʁ
 ɹɹΧελϜϑΟʔϧυͷ஋͕൓ө͞Ε͍ͯΔ͔ʁ
 
 ɾPHPϑϨʔϜϫʔΫ༻ͷϞδϡʔϧ͕༻ҙ͞Ε͍ͯΔɻ
 
 ɾ΋ͪΖΜTravisCI,CircleCIͳͲͷCIͱ࿈ܞՄೳɻ
 ɹˠ࣮ࡍʹ΍ͬͯΈΔɻ

Slide 48

Slide 48 text

ࠂ஌

Slide 49

Slide 49 text

DojoCon Japan 2016։࠵༧ఆ