SlideShare a Scribd company logo
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

PPTX
레거시 시스템에 Django 들이밀기
PDF
처음배우는 자바스크립트, 제이쿼리 #1
ODP
Django와 flask
PPT
예제로 맛보는 Backbone 연습
PDF
처음배우는 자바스크립트, 제이쿼리 #3
PPTX
Web vulnerability seminar2
PDF
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_5차_데이터분석_조범석_20120613
PPTX
Hacosa j query 4th
레거시 시스템에 Django 들이밀기
처음배우는 자바스크립트, 제이쿼리 #1
Django와 flask
예제로 맛보는 Backbone 연습
처음배우는 자바스크립트, 제이쿼리 #3
Web vulnerability seminar2
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_5차_데이터분석_조범석_20120613
Hacosa j query 4th

Viewers also liked (20)

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

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

PDF
테스트가 뭐예요?
PPTX
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
PDF
Laravel 로 배우는 서버사이드 #3
PPTX
코드리뷰 짝 매칭 프로그램 구현기
PPTX
수업환경 구축 - 웹데이터베이스 구축 밀 실습
PPTX
PHP 기초 문법
PDF
Laravel 로 배우는 서버사이드 #4
PPT
Web Application Testing Patterns
PDF
IBM developer day 2018 - hyperledger composer
PDF
php 시작하기
PDF
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
PDF
Xe 구조에 대한 이해
PDF
(독서광 2024년 5월) 요즘 AI 페어 프로그래밍
PDF
Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.]
PDF
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
PPTX
추천시스템 구축을 위한 빅데이터 분석기법과 사례
PPTX
PHP에서 객체와 데이터 연결 유지
PDF
Composer
PDF
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
테스트가 뭐예요?
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
Laravel 로 배우는 서버사이드 #3
코드리뷰 짝 매칭 프로그램 구현기
수업환경 구축 - 웹데이터베이스 구축 밀 실습
PHP 기초 문법
Laravel 로 배우는 서버사이드 #4
Web Application Testing Patterns
IBM developer day 2018 - hyperledger composer
php 시작하기
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
Xe 구조에 대한 이해
(독서광 2024년 5월) 요즘 AI 페어 프로그래밍
Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.]
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
추천시스템 구축을 위한 빅데이터 분석기법과 사례
PHP에서 객체와 데이터 연결 유지
Composer
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
Ad

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