SlideShare a Scribd company logo
1 of 14
PHP Faker 활용
빠르고 간편하게 의미 있는 테스트 데이터 만들기
정광섭
• lesstif@gmail.com
• http://lesstif.com
목차
 테스트 데이터의 필요성
 PHP Faker 란?
 사용 예제
 Laravel 과 연동
의미있는 테스트 데이터의 필요성 #1
 설계와 개발 업무를 진행하면서 여러 단계에서 테스트 데이터가 필요
 설계한 DB 스키마 검증 및 쿼리 코드의 정상 동작 여부 확인
 API 의 동작 여부 확인
 View 를 만들면서 데이터에 맞게 뷰 조정(레이아웃, 그리드, 페이징등)
 단위 테스트, 성능 및 스트레스 테스트
 위 요구사항을 만족하는 의미 있는 테스트 데이터(Real Test data)가 필요
 필요하지만 이런 데이터를 만들기 위해 시간을 투자할 수는 없음
의미있는 테스트 데이터의 필요성 #2
 테스트 데이터 만드는 법
 수작업(SQL 직접 입력등)
 운영 데이터를 테스트 환경으로 복제
 개인 정보가 포함되었을 경우 정보통신망법, 개인정보보호법 준수 필요
 신규 개발 서비스일 경우 운영 데이터가 없음
 툴을 사용하여 테스트 데이터 생성
 Ex: DBSchema 의 random data generation 기능
PHP Faker 란?
 의미있는 Faker 데이터를 만들어 주는 패키지(주소, 이름, 문장, 카드 번호등)
 Github 6,500 Star 에 빛나는 패키지 (https://github.com/fzaninotto/Faker)
 Perl 의 Data::Faker, ruby 의 Faker 로부터 강한 영향을 받음
 python 의 Faker(https://github.com/joke2k/faker) 는 PHP Faker 의 영향을 받아 개발
 언어/프레임워크 마다 별도의 Faker 패키지가 있고 모두가 많은 별점을 받았다는 것은 테스트 데이
터 생성이 필요한 경우가 많았음을 의미함.
사용 예제 #1
composer require fzaninotto/faker
 설치
 사용
 $faker->property 를 사용하면 __get magic method 에 의해 FakerGenerator-
>format($property) 실행
 Address, Name, Company, DateTime, Text 등 특정 영역의 데이터를 생성하는
Provider 클래스에서 실제 데이터 생성(src/Faker/Provider/)
<?php
require_once ‘vendor/autoload.php';
$faker = FakerFactory::create();
// generate data by accessing properties
echo $faker->name; // 'Lucy Cechtelar';
echo $faker->address; // "426 Jordy Lodge Cartwrightshire, SC 88120-6700"
echo $faker->text;
사용 예제 #2 – 사용자 정보 생성
public function testUserCreate()
{
$faker = FakerFactory::create();
$user = [
'id' => $faker->randomNumber($nbDigits = NULL), //numberBetween($min = 1000, $max = 9000)
'name' => $faker->name($gender = 'female'),
'country' =>$faker->country,
'address' => $faker->address,
'phoneNumber' => $faker->phoneNumber,
'company' => $faker->company,
'birthDay' => $faker->dateTimeBetween('-50 years', '-20 years'),
'email' => $faker->email, // safeEmail,freeEmail, etc..
'homePage' => $faker->url,
'creditCardType' => $faker->creditCardType,
'creditCardNumber' => $faker->creditCardNumber,
];
dump($user);
}
사용 예제 #3 – 첨부 파일 정보 생성
public function testAttachmentCreate()
{
$faker = FakerFactory::create();
$attachment = [
'id' => $faker->randomNumber($nbDigits = NULL),
'user_id' => $faker->numberBetween($min = 1000, $max = 9000),
'mimeType' => $faker->mimeType,
'size' => (1024 * $faker->numberBetween($min = 12345678, $max = 987654321)),
'path' => $faker->file($srcDir = '.' , $destDir = 'storage', $fullPath = false),
];
dump($attachment);
}
라라벨과 연동 #1 - Model Factory 선언
 라라벨 5.1 부터 Faker 와 연동한 Model Factories 기능이 추가됨
(http://laravel.com/docs/5.1/testing#model-factories)
 모델 팩터리 지정 - database/factories/ModelFactory.php
 $factory->define 메소드에 사용할 Model 클래스를 전달하고 클로저에 $faker
데이터 지정
$factory->define(AppAuthor::class, function ($faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
‘country' => $faker->country,
‘birthDay' => $faker->dateTimeBetween('-50 years', '-20 years'),
'password' => str_random(10),
'remember_token' => str_random(10),
];
});
라라벨과 연동 #2 - Faker data 생성
 factory() 헬퍼의 make() 메소드를 사용하여 Faker 데이터 생성
 첫 번째 파라미터 – 모델 클래스
 두 번째 파라미터(옵션) – 생성할 갯수
>>> factory('AppAuthor‘, 1)->make();
=> <AppUser #00000000439a1a48000000001f1fd334> {
name: "Darrin Farrell",
email: "Seth37@Schaden.com"
}
라라벨과 연동 #3 - DB 에 입력
 make() 메소드는 DB 에 입력하지 않고 모델만 생성
 DB 에 입력하려면 create() 메소드 사용
>>> factory('AppAuthor‘, 10)->create();
=> <AppUser #00000000439a1a48000000001f1fd334> {
name: "Darrin Farrell",
email: "Seth37@Schaden.com"
}
라라벨과 연동 #4 - Model Relation
 Factory Model 생성후 each() 로 자식 모델 생성
$authors = factory(AppAuthor::class, 3) ->create()
->each(function($u) {
$u->books()->save(
factory(AppBook::class, 10)->make());
});
라라벨과 연동 #5 - Model Relation
 자식 factory 에서 부모의 id 값을 가져와서 범위 지정
$factory->define(AppBook::class, function ($faker) use($factory){
// 최대값과 최소값 가져오기
$max = AppAuthor::max('id');
$min = AppAuthor::min('id');
return [
'name' => $faker->text,
‘isbn' => $faker->isbn13,
// Author id 참조
'author_id' => $faker->numberBetween($min, $max),
'created_at' => $faker->dateTimeBetween($startDate = '-2 years', $endDate = '-1 years'),
'updated_at' => $faker->dateTimeBetween($startDate = '-1 years', $endDate = 'now'),
];
});
참고 자료 & QnA
 Faker 홈 페이지 - https://github.com/fzaninotto/Faker
 Laravel Model Factory - http://laravel.com/docs/5.1/testing#model-
factories
 더 자세한 내용은 http://lesstif.com/x/7QKOAQ 참고
Q&A

More Related Content

Viewers also liked

처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포KwangSeob Jeong
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기KwangSeob Jeong
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with AngularJT Jintae Jung
 
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성KwangSeob Jeong
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
LAPP/SELinux - A secure web application stack powered by SELinux
LAPP/SELinux - A secure web application stack powered by SELinuxLAPP/SELinux - A secure web application stack powered by SELinux
LAPP/SELinux - A secure web application stack powered by SELinuxKohei KaiGai
 
XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개Jung soo Ahn
 
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN정호 전
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여Jin wook
 
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록라한사 아
 
엔터프라이즈 웹 동향 및 적용사례
엔터프라이즈 웹 동향 및 적용사례엔터프라이즈 웹 동향 및 적용사례
엔터프라이즈 웹 동향 및 적용사례욱래 김
 
응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angularredribbon1307
 
LG fashion's new SPA brand launching
LG fashion's new SPA brand launchingLG fashion's new SPA brand launching
LG fashion's new SPA brand launchingnceo
 
Mysql old password 깨기
Mysql old password 깨기Mysql old password 깨기
Mysql old password 깨기HyunSeung Kim
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1현찬 양
 
쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정Yoonwhan Lee
 

Viewers also liked (20)

처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with Angular
 
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
LAPP/SELinux - A secure web application stack powered by SELinux
LAPP/SELinux - A secure web application stack powered by SELinuxLAPP/SELinux - A secure web application stack powered by SELinux
LAPP/SELinux - A secure web application stack powered by SELinux
 
XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개
 
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
 
AngularJs Crash Course
AngularJs Crash CourseAngularJs Crash Course
AngularJs Crash Course
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여
 
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
 
엔터프라이즈 웹 동향 및 적용사례
엔터프라이즈 웹 동향 및 적용사례엔터프라이즈 웹 동향 및 적용사례
엔터프라이즈 웹 동향 및 적용사례
 
응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular
 
LG fashion's new SPA brand launching
LG fashion's new SPA brand launchingLG fashion's new SPA brand launching
LG fashion's new SPA brand launching
 
Benefits of developing single page web applications using angular js
Benefits of developing single page web applications using angular jsBenefits of developing single page web applications using angular js
Benefits of developing single page web applications using angular js
 
Mysql old password 깨기
Mysql old password 깨기Mysql old password 깨기
Mysql old password 깨기
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1
 
쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정
 

Similar to Php faker 를 활용한 의미있는 테스트 데이타 생성

[113]LINExNAVER 개발 보안 취약점 이야기
[113]LINExNAVER 개발 보안 취약점 이야기[113]LINExNAVER 개발 보안 취약점 이야기
[113]LINExNAVER 개발 보안 취약점 이야기NAVER D2
 
Unity cookbook 20
Unity cookbook 20Unity cookbook 20
Unity cookbook 20Jihun Soh
 
Html5&css 3장
Html5&css 3장Html5&css 3장
Html5&css 3장홍준 김
 
Python server-101
Python server-101Python server-101
Python server-101Huey Park
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011Esun Kim
 
Apache solr소개 20120629
Apache solr소개 20120629Apache solr소개 20120629
Apache solr소개 20120629Dosang Yoon
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4성일 한
 
Servlet design pattern
Servlet design patternServlet design pattern
Servlet design patternSukjin Yun
 
(Ficon2016) #2 침해사고 대응, 이렇다고 전해라
(Ficon2016) #2 침해사고 대응, 이렇다고 전해라(Ficon2016) #2 침해사고 대응, 이렇다고 전해라
(Ficon2016) #2 침해사고 대응, 이렇다고 전해라INSIGHT FORENSIC
 
안드로이드 오픈소스 패턴 - 0.1
안드로이드 오픈소스 패턴 - 0.1안드로이드 오픈소스 패턴 - 0.1
안드로이드 오픈소스 패턴 - 0.1YoungSu Son
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?Kyoung Up Jung
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 
Xe3.0 frontend validator
Xe3.0 frontend validatorXe3.0 frontend validator
Xe3.0 frontend validator승훈 오
 
03주차 ddl- table을 만들자
03주차 ddl- table을 만들자03주차 ddl- table을 만들자
03주차 ddl- table을 만들자Yoonwhan Lee
 

Similar to Php faker 를 활용한 의미있는 테스트 데이타 생성 (20)

Hacosa j query 11th
Hacosa j query 11thHacosa j query 11th
Hacosa j query 11th
 
[113]LINExNAVER 개발 보안 취약점 이야기
[113]LINExNAVER 개발 보안 취약점 이야기[113]LINExNAVER 개발 보안 취약점 이야기
[113]LINExNAVER 개발 보안 취약점 이야기
 
Unity cookbook 20
Unity cookbook 20Unity cookbook 20
Unity cookbook 20
 
Html5&css 3장
Html5&css 3장Html5&css 3장
Html5&css 3장
 
Python server-101
Python server-101Python server-101
Python server-101
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011
 
Apache solr소개 20120629
Apache solr소개 20120629Apache solr소개 20120629
Apache solr소개 20120629
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4
 
Servlet design pattern
Servlet design patternServlet design pattern
Servlet design pattern
 
(Ficon2016) #2 침해사고 대응, 이렇다고 전해라
(Ficon2016) #2 침해사고 대응, 이렇다고 전해라(Ficon2016) #2 침해사고 대응, 이렇다고 전해라
(Ficon2016) #2 침해사고 대응, 이렇다고 전해라
 
Xe hack
Xe hackXe hack
Xe hack
 
안드로이드 오픈소스 패턴 - 0.1
안드로이드 오픈소스 패턴 - 0.1안드로이드 오픈소스 패턴 - 0.1
안드로이드 오픈소스 패턴 - 0.1
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
테스트
테스트테스트
테스트
 
Nodejs express
Nodejs expressNodejs express
Nodejs express
 
Xe3.0 frontend validator
Xe3.0 frontend validatorXe3.0 frontend validator
Xe3.0 frontend validator
 
R project_pt1
R project_pt1R project_pt1
R project_pt1
 
03주차 ddl- table을 만들자
03주차 ddl- table을 만들자03주차 ddl- table을 만들자
03주차 ddl- table을 만들자
 

Php faker 를 활용한 의미있는 테스트 데이타 생성

  • 1. PHP Faker 활용 빠르고 간편하게 의미 있는 테스트 데이터 만들기 정광섭 • lesstif@gmail.com • http://lesstif.com
  • 2. 목차  테스트 데이터의 필요성  PHP Faker 란?  사용 예제  Laravel 과 연동
  • 3. 의미있는 테스트 데이터의 필요성 #1  설계와 개발 업무를 진행하면서 여러 단계에서 테스트 데이터가 필요  설계한 DB 스키마 검증 및 쿼리 코드의 정상 동작 여부 확인  API 의 동작 여부 확인  View 를 만들면서 데이터에 맞게 뷰 조정(레이아웃, 그리드, 페이징등)  단위 테스트, 성능 및 스트레스 테스트  위 요구사항을 만족하는 의미 있는 테스트 데이터(Real Test data)가 필요  필요하지만 이런 데이터를 만들기 위해 시간을 투자할 수는 없음
  • 4. 의미있는 테스트 데이터의 필요성 #2  테스트 데이터 만드는 법  수작업(SQL 직접 입력등)  운영 데이터를 테스트 환경으로 복제  개인 정보가 포함되었을 경우 정보통신망법, 개인정보보호법 준수 필요  신규 개발 서비스일 경우 운영 데이터가 없음  툴을 사용하여 테스트 데이터 생성  Ex: DBSchema 의 random data generation 기능
  • 5. PHP Faker 란?  의미있는 Faker 데이터를 만들어 주는 패키지(주소, 이름, 문장, 카드 번호등)  Github 6,500 Star 에 빛나는 패키지 (https://github.com/fzaninotto/Faker)  Perl 의 Data::Faker, ruby 의 Faker 로부터 강한 영향을 받음  python 의 Faker(https://github.com/joke2k/faker) 는 PHP Faker 의 영향을 받아 개발  언어/프레임워크 마다 별도의 Faker 패키지가 있고 모두가 많은 별점을 받았다는 것은 테스트 데이 터 생성이 필요한 경우가 많았음을 의미함.
  • 6. 사용 예제 #1 composer require fzaninotto/faker  설치  사용  $faker->property 를 사용하면 __get magic method 에 의해 FakerGenerator- >format($property) 실행  Address, Name, Company, DateTime, Text 등 특정 영역의 데이터를 생성하는 Provider 클래스에서 실제 데이터 생성(src/Faker/Provider/) <?php require_once ‘vendor/autoload.php'; $faker = FakerFactory::create(); // generate data by accessing properties echo $faker->name; // 'Lucy Cechtelar'; echo $faker->address; // "426 Jordy Lodge Cartwrightshire, SC 88120-6700" echo $faker->text;
  • 7. 사용 예제 #2 – 사용자 정보 생성 public function testUserCreate() { $faker = FakerFactory::create(); $user = [ 'id' => $faker->randomNumber($nbDigits = NULL), //numberBetween($min = 1000, $max = 9000) 'name' => $faker->name($gender = 'female'), 'country' =>$faker->country, 'address' => $faker->address, 'phoneNumber' => $faker->phoneNumber, 'company' => $faker->company, 'birthDay' => $faker->dateTimeBetween('-50 years', '-20 years'), 'email' => $faker->email, // safeEmail,freeEmail, etc.. 'homePage' => $faker->url, 'creditCardType' => $faker->creditCardType, 'creditCardNumber' => $faker->creditCardNumber, ]; dump($user); }
  • 8. 사용 예제 #3 – 첨부 파일 정보 생성 public function testAttachmentCreate() { $faker = FakerFactory::create(); $attachment = [ 'id' => $faker->randomNumber($nbDigits = NULL), 'user_id' => $faker->numberBetween($min = 1000, $max = 9000), 'mimeType' => $faker->mimeType, 'size' => (1024 * $faker->numberBetween($min = 12345678, $max = 987654321)), 'path' => $faker->file($srcDir = '.' , $destDir = 'storage', $fullPath = false), ]; dump($attachment); }
  • 9. 라라벨과 연동 #1 - Model Factory 선언  라라벨 5.1 부터 Faker 와 연동한 Model Factories 기능이 추가됨 (http://laravel.com/docs/5.1/testing#model-factories)  모델 팩터리 지정 - database/factories/ModelFactory.php  $factory->define 메소드에 사용할 Model 클래스를 전달하고 클로저에 $faker 데이터 지정 $factory->define(AppAuthor::class, function ($faker) { return [ 'name' => $faker->name, 'email' => $faker->email, ‘country' => $faker->country, ‘birthDay' => $faker->dateTimeBetween('-50 years', '-20 years'), 'password' => str_random(10), 'remember_token' => str_random(10), ]; });
  • 10. 라라벨과 연동 #2 - Faker data 생성  factory() 헬퍼의 make() 메소드를 사용하여 Faker 데이터 생성  첫 번째 파라미터 – 모델 클래스  두 번째 파라미터(옵션) – 생성할 갯수 >>> factory('AppAuthor‘, 1)->make(); => <AppUser #00000000439a1a48000000001f1fd334> { name: "Darrin Farrell", email: "Seth37@Schaden.com" }
  • 11. 라라벨과 연동 #3 - DB 에 입력  make() 메소드는 DB 에 입력하지 않고 모델만 생성  DB 에 입력하려면 create() 메소드 사용 >>> factory('AppAuthor‘, 10)->create(); => <AppUser #00000000439a1a48000000001f1fd334> { name: "Darrin Farrell", email: "Seth37@Schaden.com" }
  • 12. 라라벨과 연동 #4 - Model Relation  Factory Model 생성후 each() 로 자식 모델 생성 $authors = factory(AppAuthor::class, 3) ->create() ->each(function($u) { $u->books()->save( factory(AppBook::class, 10)->make()); });
  • 13. 라라벨과 연동 #5 - Model Relation  자식 factory 에서 부모의 id 값을 가져와서 범위 지정 $factory->define(AppBook::class, function ($faker) use($factory){ // 최대값과 최소값 가져오기 $max = AppAuthor::max('id'); $min = AppAuthor::min('id'); return [ 'name' => $faker->text, ‘isbn' => $faker->isbn13, // Author id 참조 'author_id' => $faker->numberBetween($min, $max), 'created_at' => $faker->dateTimeBetween($startDate = '-2 years', $endDate = '-1 years'), 'updated_at' => $faker->dateTimeBetween($startDate = '-1 years', $endDate = 'now'), ]; });
  • 14. 참고 자료 & QnA  Faker 홈 페이지 - https://github.com/fzaninotto/Faker  Laravel Model Factory - http://laravel.com/docs/5.1/testing#model- factories  더 자세한 내용은 http://lesstif.com/x/7QKOAQ 참고 Q&A