phpunit에서 작성한 테스트 케이스를 기반으로 테스트 항목 테이블 작성
19578 단어 PHPUnit라라벨phpunit.xml
목적
제가 이전에 소속했던 팀에서는
1. 단위 시험표 작성(EXCEL 등의 문서)
2. 단위 테스트 작성
3. 구현
4. 테스트 실시
라고 하는 흐름으로 개발을 실시하고 있었습니다만, 단체 시험의 시험표를 작성과 보수해 가는 비용이 걸리게 되어
할 수 없는지 검토해 보았습니다.
절차
phpunit.xml에서 테스트 결과를 junit 형식으로 출력
phpunit 매뉴얼 에 의하면 phpunit.xml에 type="junit"를 지정하면 테스트 실행시에 자동으로 로그를 출력해 주기 때문에 추기합니다.
이번은 tests하에 log라는 폴더를 마련해 그쪽으로 출력합니다.
phpunit.xml <logging>
<log type="junit" target="./tests/log/logfile.xml"/>
</logging>
시도해보십시오.
vendor/bin/phpunit
PHPUnit 7.5.13 by Sebastian Bergmann and contributors.
... 3 / 3 (100%)
Time: 1.33 seconds, Memory: 14.00 MB
logfile.xml<testsuites>
<testsuite name="" tests="3" assertions="3" errors="0" failures="0" skipped="0" time="1.102644">
<testsuite name="Unit" tests="2" assertions="2" errors="0" failures="0" skipped="0" time="0.806409">
<testsuite name="Tests\Unit\Auth\RegisterControllerTest" file="/var/www/html/tests/Unit/Auth/RegisterControllerTest.php" tests="1" assertions="1" errors="0" failures="0" skipped="0" time="0.768928">
<testcase name="testExample" class="Tests\Unit\Auth\RegisterControllerTest" classname="Tests.Unit.Auth.RegisterControllerTest" file="/var/www/html/tests/Unit/Auth/RegisterControllerTest.php" line="16" assertions="1" time="0.768928"/>
</testsuite>
<testsuite name="Tests\Unit\ExampleTest" file="/var/www/html/tests/Unit/ExampleTest.php" tests="1" assertions="1" errors="0" failures="0" skipped="0" time="0.037481">
<testcase name="testBasicTest" class="Tests\Unit\ExampleTest" classname="Tests.Unit.ExampleTest" file="/var/www/html/tests/Unit/ExampleTest.php" line="15" assertions="1" time="0.037481"/>
</testsuite>
</testsuite>
<testsuite name="Feature" tests="1" assertions="1" errors="0" failures="0" skipped="0" time="0.296235">
<testsuite name="Tests\Feature\ExampleTest" file="/var/www/html/tests/Feature/ExampleTest.php" tests="1" assertions="1" errors="0" failures="0" skipped="0" time="0.296235">
<testcase name="testBasicTest" class="Tests\Feature\ExampleTest" classname="Tests.Feature.ExampleTest" file="/var/www/html/tests/Feature/ExampleTest.php" line="15" assertions="1" time="0.296235"/>
</testsuite>
</testsuite>
</testsuite>
</testsuites>
... 꽤 이해하기 어렵지만 일단 시험 내용을 출력할 수 있었습니다.
보기 쉬운 형식으로 변환
여기 의 XMLT 템플릿을 바탕으로 XML을 HTML로 변환하면 꽤 보기 쉬워지는 것 같기 때문에, 변환해 보겠습니다.
※xsltproc가 들어 있지 않은 경우는 다음의 커맨드로 인스톨 해 주세요.
sudo apt-get install xsltproc
여기가 HTML 변환용 명령입니다.
xsltproc phpunit.xslt tests/log/logfile.xml > output.html
여기가 출력된 HTML입니다, 꽤 보기 쉬워진 것이 아닐까요.
다만, 그대로 사용하는 것만으로는 테스트 케이스가 출력되지 않기 때문에 시험의 내용을 알기 어렵게 느꼈으므로 템플릿의 내용을 조금 수정했습니다.
수정 된 phpunit.xslt는 여기에도 배치되어 있으므로 좋아하게 사용하십시오.
htps : // st. 기주 b. 코 m / 야마모토 타쿠 / 아 3cf2 6d498 a5 a855c0f948 a29scd
실례
샘플로 laravel 회원 등록 양식의 유효성 검증에 대한 단위 테스트를 작성하고 어떤 느낌이 드는지보십시오.
먼저 다음 명령으로 laravel의 회원 기능 세트를 작성합니다.
php artisan make:auth
위의 명령으로 작성된 다음 함수를 테스트하는 테스트 코드를 작성하려고합니다.
RegisterController.php /**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
//デフォルトのバリデーションだとひらがなでも登録できるので末尾の正規表現は追記しています。
'name' => ['required', 'string', 'max:255', 'regex:/^[a-zA-Z0-9-_]+$/'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
RegisterControllerTest.php
<?php
namespace Tests\Unit\Auth;
use App\Http\Controllers\Auth\RegisterController;
use Tests\TestCase;
class RegisterControllerTest extends TestCase
{
protected $target;
/**
* @return void
*/
public function setUp(): void
{
parent::setUp();
$this->target = new RegisterController();
}
/**
* @test
* @throws \ReflectionException
*/
public function 正常系()
{
$method = $this->changeAccessible('validator');
$input = [
'name' => 'yamamoto-taku',
'email' => '[email protected]',
'password' => 'password',
'password_confirmation' => 'password',
];
$validator = $method->invoke($this->target, $input);
$this->assertTrue($validator->passes());
}
/**
* @param array $input
* @dataProvider validatorProviderForFailure
* @test
* @throws \ReflectionException
*/
public function 異常系(array $input)
{
$method = $this->changeAccessible('validator');
$validator = $method->invoke($this->target, $input);
$this->assertFalse($validator->passes());
}
/**
* @return array
*/
public function validatorProviderForFailure()
{
$input = [
'name' => 'あいうえお',
'email' => '[email protected]',
'password' => 'password',
'password_confirmation' => 'password',
];
$null = [
'name' => null,
'email' => null,
'password' => null,
'password_confirmation' => null,
];
return [
'必須入力チェック' => [$null],
'日本語入力ひらがな' => [$input],
];
}
/**
* @param $object
* @return mixed
* @throws \ReflectionException
*/
public function changeAccessible($methodName)
{
$reflection = new \ReflectionClass($this->target);
$method = $reflection->getMethod($methodName);
$method->setAccessible(true);
return $method;
}
}
phpunit을 실행하여 HTML로 변환을 처리합니다.
vendor/bin/phpunit tests/Unit/Auth/RegisterControllerTest.php
xsltproc phpunit.xslt tests/log/logfile.xml > output.html
생성된 결과가 여기입니다.
데이터 세트가 있는 시험 항목은 데이터 라벨로, 단일 시험 항목에 대해서는 함수명으로 검토자에게 어떤 시험을 실시할 것인지를 전할 수 있을 것 같습니다!
끝에
상기와 같은 자동 리포트의 기능을 사용해 단체 시험표를 별도로 쓰지 않아도 OK가 되면 좋다고 생각합니다. 그리고 변환의 처리도 맞추어 자동으로 할 수 있을 것 같은 생각도 하므로 그쪽도 별도 검토해 보려고 생각합니다.
→ PHPUnit 테스트 러너를 확장하고 자동화 할 수 있었기 때문에 계속 작성했습니다.
참고
PHPUnit 테스트 결과를 인간 친화적 인 느낌으로 출력
자동화 대상의 유닛 테스트(단체 테스트)의 사양서를 쓰는 것은 완전한 낭비이다
Reference
이 문제에 관하여(phpunit에서 작성한 테스트 케이스를 기반으로 테스트 항목 테이블 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yamamoto-taku/items/7541af2d8db82ef591ed
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<logging>
<log type="junit" target="./tests/log/logfile.xml"/>
</logging>
vendor/bin/phpunit
PHPUnit 7.5.13 by Sebastian Bergmann and contributors.
... 3 / 3 (100%)
Time: 1.33 seconds, Memory: 14.00 MB
<testsuites>
<testsuite name="" tests="3" assertions="3" errors="0" failures="0" skipped="0" time="1.102644">
<testsuite name="Unit" tests="2" assertions="2" errors="0" failures="0" skipped="0" time="0.806409">
<testsuite name="Tests\Unit\Auth\RegisterControllerTest" file="/var/www/html/tests/Unit/Auth/RegisterControllerTest.php" tests="1" assertions="1" errors="0" failures="0" skipped="0" time="0.768928">
<testcase name="testExample" class="Tests\Unit\Auth\RegisterControllerTest" classname="Tests.Unit.Auth.RegisterControllerTest" file="/var/www/html/tests/Unit/Auth/RegisterControllerTest.php" line="16" assertions="1" time="0.768928"/>
</testsuite>
<testsuite name="Tests\Unit\ExampleTest" file="/var/www/html/tests/Unit/ExampleTest.php" tests="1" assertions="1" errors="0" failures="0" skipped="0" time="0.037481">
<testcase name="testBasicTest" class="Tests\Unit\ExampleTest" classname="Tests.Unit.ExampleTest" file="/var/www/html/tests/Unit/ExampleTest.php" line="15" assertions="1" time="0.037481"/>
</testsuite>
</testsuite>
<testsuite name="Feature" tests="1" assertions="1" errors="0" failures="0" skipped="0" time="0.296235">
<testsuite name="Tests\Feature\ExampleTest" file="/var/www/html/tests/Feature/ExampleTest.php" tests="1" assertions="1" errors="0" failures="0" skipped="0" time="0.296235">
<testcase name="testBasicTest" class="Tests\Feature\ExampleTest" classname="Tests.Feature.ExampleTest" file="/var/www/html/tests/Feature/ExampleTest.php" line="15" assertions="1" time="0.296235"/>
</testsuite>
</testsuite>
</testsuite>
</testsuites>
여기 의 XMLT 템플릿을 바탕으로 XML을 HTML로 변환하면 꽤 보기 쉬워지는 것 같기 때문에, 변환해 보겠습니다.
※xsltproc가 들어 있지 않은 경우는 다음의 커맨드로 인스톨 해 주세요.
sudo apt-get install xsltproc
여기가 HTML 변환용 명령입니다.
xsltproc phpunit.xslt tests/log/logfile.xml > output.html
여기가 출력된 HTML입니다, 꽤 보기 쉬워진 것이 아닐까요.
다만, 그대로 사용하는 것만으로는 테스트 케이스가 출력되지 않기 때문에 시험의 내용을 알기 어렵게 느꼈으므로 템플릿의 내용을 조금 수정했습니다.
수정 된 phpunit.xslt는 여기에도 배치되어 있으므로 좋아하게 사용하십시오.
htps : // st. 기주 b. 코 m / 야마모토 타쿠 / 아 3cf2 6d498 a5 a855c0f948 a29scd
실례
샘플로 laravel 회원 등록 양식의 유효성 검증에 대한 단위 테스트를 작성하고 어떤 느낌이 드는지보십시오.
먼저 다음 명령으로 laravel의 회원 기능 세트를 작성합니다.
php artisan make:auth
위의 명령으로 작성된 다음 함수를 테스트하는 테스트 코드를 작성하려고합니다.
RegisterController.php
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
//デフォルトのバリデーションだとひらがなでも登録できるので末尾の正規表現は追記しています。
'name' => ['required', 'string', 'max:255', 'regex:/^[a-zA-Z0-9-_]+$/'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
RegisterControllerTest.php
<?php
namespace Tests\Unit\Auth;
use App\Http\Controllers\Auth\RegisterController;
use Tests\TestCase;
class RegisterControllerTest extends TestCase
{
protected $target;
/**
* @return void
*/
public function setUp(): void
{
parent::setUp();
$this->target = new RegisterController();
}
/**
* @test
* @throws \ReflectionException
*/
public function 正常系()
{
$method = $this->changeAccessible('validator');
$input = [
'name' => 'yamamoto-taku',
'email' => '[email protected]',
'password' => 'password',
'password_confirmation' => 'password',
];
$validator = $method->invoke($this->target, $input);
$this->assertTrue($validator->passes());
}
/**
* @param array $input
* @dataProvider validatorProviderForFailure
* @test
* @throws \ReflectionException
*/
public function 異常系(array $input)
{
$method = $this->changeAccessible('validator');
$validator = $method->invoke($this->target, $input);
$this->assertFalse($validator->passes());
}
/**
* @return array
*/
public function validatorProviderForFailure()
{
$input = [
'name' => 'あいうえお',
'email' => '[email protected]',
'password' => 'password',
'password_confirmation' => 'password',
];
$null = [
'name' => null,
'email' => null,
'password' => null,
'password_confirmation' => null,
];
return [
'必須入力チェック' => [$null],
'日本語入力ひらがな' => [$input],
];
}
/**
* @param $object
* @return mixed
* @throws \ReflectionException
*/
public function changeAccessible($methodName)
{
$reflection = new \ReflectionClass($this->target);
$method = $reflection->getMethod($methodName);
$method->setAccessible(true);
return $method;
}
}
phpunit을 실행하여 HTML로 변환을 처리합니다.
vendor/bin/phpunit tests/Unit/Auth/RegisterControllerTest.php
xsltproc phpunit.xslt tests/log/logfile.xml > output.html
생성된 결과가 여기입니다.
데이터 세트가 있는 시험 항목은 데이터 라벨로, 단일 시험 항목에 대해서는 함수명으로 검토자에게 어떤 시험을 실시할 것인지를 전할 수 있을 것 같습니다!
끝에
상기와 같은 자동 리포트의 기능을 사용해 단체 시험표를 별도로 쓰지 않아도 OK가 되면 좋다고 생각합니다. 그리고 변환의 처리도 맞추어 자동으로 할 수 있을 것 같은 생각도 하므로 그쪽도 별도 검토해 보려고 생각합니다.
→ PHPUnit 테스트 러너를 확장하고 자동화 할 수 있었기 때문에 계속 작성했습니다.
참고
PHPUnit 테스트 결과를 인간 친화적 인 느낌으로 출력
자동화 대상의 유닛 테스트(단체 테스트)의 사양서를 쓰는 것은 완전한 낭비이다
Reference
이 문제에 관하여(phpunit에서 작성한 테스트 케이스를 기반으로 테스트 항목 테이블 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yamamoto-taku/items/7541af2d8db82ef591ed
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
PHPUnit 테스트 결과를 인간 친화적 인 느낌으로 출력
자동화 대상의 유닛 테스트(단체 테스트)의 사양서를 쓰는 것은 완전한 낭비이다
Reference
이 문제에 관하여(phpunit에서 작성한 테스트 케이스를 기반으로 테스트 항목 테이블 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yamamoto-taku/items/7541af2d8db82ef591ed텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)