เจฒเจพเจ—เฉ‚ เจ•เจฐเฉ‹, เจธเจ•เฉ‡เจฒ: VTB 'เจคเฉ‡ เจธเจตเฉˆเจšเจฒเจฟเจค เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเจพ เจ…เจจเฉเจญเจต

เจธเจพเจกเจพ เจกเจฟเจตเฉ€เจœเจผเจจ เจ‰เจคเจชเจพเจฆเจจ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจš เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ‡ เจจเจตเฉ‡เจ‚ เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจชเจพเจˆเจชเจฒเจพเจˆเจจเจพเจ‚ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค เจฌเฉ‡เจธเจผเฉฑเจ•, เจ‡เจธ เจฒเจˆ เจธเจตเฉˆเจšเจฒเจฟเจค เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ•เฉฑเจŸ เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจ‡เฉฑเจ• เจ•เจนเจพเจฃเฉ€ เจนเฉˆ เจ•เจฟ เจ•เจฟเจตเฉ‡เจ‚, เจ‡เฉฑเจ• เจธเจฅเจพเจจเจ• เจฎเจธเจผเฉ€เจจ 'เจคเฉ‡ เจธเจฟเฉฐเจ—เจฒ-เจฅเฉเจฐเฉˆเจก เจŸเฉˆเจธเจŸเจฟเฉฐเจ— เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจ…เจธเฉ€เจ‚ เจ—เฉ€เจŸเจฒเฉˆเจฌ เจชเฉฐเจจเจฟเจ†เจ‚ 'เจคเฉ‡ เจ‡เฉฑเจ• เจเจฒเฉ‚เจฐ เจฐเจฟเจชเฉ‹เจฐเจŸ เจฆเฉ‡ เจจเจพเจฒ เจฌเจฟเจฒเจก เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจตเจฟเฉฑเจš เจธเฉ‡เจฒเฉ‡เจจเฉ‹เจ‡เจก 'เจคเฉ‡ เจšเฉฑเจฒ เจฐเจนเฉ‡ เจฎเจฒเจŸเฉ€-เจฅเฉเจฐเฉˆเจกเจก เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจฆเฉ‡ เจฌเจฟเฉฐเจฆเฉ‚ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจ—เจ เจ…เจคเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจตเจงเฉ€เจ† เจ†เจŸเฉ‹เจฎเฉ‡เจธเจผเจจ เจŸเฉ‚เจฒ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพเฅค เจ•เจฟ เจญเจตเจฟเฉฑเจ– เจฆเฉ‡ เจฒเฉ‹เจ• เจŸเฉ€เจฎเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจเฅค

เจฒเจพเจ—เฉ‚ เจ•เจฐเฉ‹, เจธเจ•เฉ‡เจฒ: VTB 'เจคเฉ‡ เจธเจตเฉˆเจšเจฒเจฟเจค เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเจพ เจ…เจจเฉเจญเจต

เจ…เจธเฉ€เจ‚ เจ•เจฟเฉฑเจฅเฉ‡ เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเจพ?

เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจตเจฟเฉฑเจš เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจ เจฒเจˆ, เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ†เจŸเฉ‹เจฎเฉ‡เจธเจผเจจ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจฆเฉ€ เจฒเฉ‹เฉœ เจธเฉ€ เจœเจฟเจธ เจจเฉ‚เฉฐ เจธเจพเจกเฉ€เจ†เจ‚ เจฒเฉ‹เฉœเจพเจ‚ เจฎเฉเจคเจพเจฌเจ• เจฒเจšเจ•เจฆเจพเจฐ เจขเฉฐเจ— เจจเจพเจฒ เจฌเจฆเจฒเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ†เจฆเจฐเจธเจผเจ• เจคเฉŒเจฐ 'เจคเฉ‡, เจฎเฉˆเจ‚ เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸเจฟเฉฐเจ— เจ‡เฉฐเจœเจฃ เจฒเจˆ เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ เจธเจŸเฉˆเจ‚เจกเจฐเจก เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจธเฉ€, เจœเฉ‹ เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจตเจฟเฉฑเจš เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจเจฎเจฌเฉˆเจก เจ•เจฐเจจ เจฒเจˆ เจ…เจจเฉเจ•เฉ‚เจฒเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ€เจ†เจ‚ เจคเจ•เจจเฉ€เจ•เจพเจ‚ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เฉ€เจคเฉ€:

  • เจœเจพเจตเจพ,
  • เจฎเจพเจตเฉ‡เจจ,
  • เจธเฉ‡เจฒเฉ‡เจจเจฟเจ…เจฎ,
  • เจ–เฉ€เจฐเจพ+เจœเฉ‚เจจเจŸ 4,
  • เจฒเฉเจญเจพเจ‰เจฃเจพ,
  • เจ—เฉ€เจŸเจฒเฉˆเจฌ.

เจฒเจพเจ—เฉ‚ เจ•เจฐเฉ‹, เจธเจ•เฉ‡เจฒ: VTB 'เจคเฉ‡ เจธเจตเฉˆเจšเจฒเจฟเจค เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเจพ เจ…เจจเฉเจญเจต

เจ‡เจน เจ–เจพเจธ เจธเฉˆเฉฑเจŸ เจ•เจฟเจ‰เจ‚? เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจŸเฉˆเจธเจŸเจพเจ‚ เจฒเจˆ Java เจธเจญ เจคเฉ‹เจ‚ เจชเฉเจฐเจธเจฟเฉฑเจง เจญเจพเจธเจผเจพเจตเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจนเฉˆ, เจ…เจคเฉ‡ เจŸเฉ€เจฎ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจฎเฉˆเจ‚เจฌเจฐ เจ‡เจธเจจเฉ‚เฉฐ เจฌเฉ‹เจฒเจฆเฉ‡ เจนเจจเฅค เจธเฉ‡เจฒเฉ‡เจจเจฟเจ…เจฎ เจธเจชเฉฑเจธเจผเจŸ เจนเฉฑเจฒ เจนเฉˆ. เจ–เฉ€เจฐเฉ‡, เจนเฉ‹เจฐ เจšเฉ€เจœเจผเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ, เจฎเฉˆเจจเฉ‚เจ…เจฒ เจŸเฉˆเจธเจŸเจฟเฉฐเจ— เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจตเจฟเจญเจพเจ—เจพเจ‚ เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ 'เจคเฉ‡ เจธเจตเฉˆเจšเจฒเจฟเจค เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ‡ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจตเจฟเจธเจผเจตเจพเจธ เจตเจงเจพเจ‰เจฃเจพ เจธเฉ€เฅค

เจธเจฟเฉฐเจ—เจฒ เจฅเจฐเจฟเฉฑเจกเจก เจŸเฉˆเจธเจŸ

เจชเจนเฉ€เจ เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจจเจพ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจฆเฉ‡ เจ…เจงเจพเจฐ เจตเจœเฉ‹เจ‚ เจ—เจฟเจŸเจนเจฌ 'เจคเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจคเฉ‹เจ‚ เจตเจฟเจ•เจพเจธ เจฒเจฟเจ† เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจฒเจˆ เจ…เจจเฉเจ•เฉ‚เจฒ เจฌเจฃเจพเจ‡เจ†เฅค เจ…เจธเฉ€เจ‚ เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจฆเฉ‡ เจ•เฉ‹เจฐ เจฆเฉ‡ เจจเจพเจฒ เจฎเฉเฉฑเจ– เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฒเจˆ เจ‡เฉฑเจ• เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฌเจฃเจพเจˆ เจนเฉˆ เจ…เจคเฉ‡ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฐ 'เจคเฉ‡ เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจ‡เฉฑเจ• เจ—เฉ‹เจฒเจก เจ‰เจฆเจพเจนเจฐเจจ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฌเจฃเจพเจˆ เจนเฉˆเฅค เจนเจฐเฉ‡เจ• เจŸเฉ€เจฎ เจจเฉ‚เฉฐ เจ—เฉ‹เจฒเจก เจšเจฟเฉฑเจคเจฐ เจฒเฉˆเจฃเจพ เจธเฉ€ เจ…เจคเฉ‡ เจ‡เจธ เจตเจฟเฉฑเจš เจŸเฉˆเจธเจŸ เจตเจฟเจ•เจธเจค เจ•เจฐเจจเจพ เจธเฉ€, เจ‡เจธ เจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš เจขเจพเจฒเจฃเจพ เจธเฉ€เฅค เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ GitLab-CI เจฌเฉˆเจ‚เจ• เจตเจฟเฉฑเจš เจคเฉˆเจจเจพเจค เจ•เฉ€เจคเจพ, เจœเจฟเจธ 'เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเจพ เจนเฉˆ:

  • เจนเจฐเฉ‡เจ• เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฒเจˆ เจธเจพเจฐเฉ‡ เจฒเจฟเจ–เจคเฉ€ เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ‡ เจฐเฉ‹เจœเจผเจพเจจเจพ เจฐเจจ;
  • เจฌเจฟเจฒเจก เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจตเจฟเฉฑเจš เจฒเจพเจ‚เจš เจ•เฉ€เจคเจพเฅค

เจชเจนเจฟเจฒเจพเจ‚ เจ•เฉเจ เจŸเฉˆเจธเจŸ เจธเจจ, เจ…เจคเฉ‡ เจ‰เจน เจ‡เฉฑเจ• เจธเจŸเฉเจฐเฉ€เจฎ เจตเจฟเฉฑเจš เจ•เฉ€เจคเฉ‡ เจ—เจ เจธเจจเฅค เจตเจฟเฉฐเจกเฉ‹เจœเจผ เจฐเจจเจฐ เจ—เจฟเจŸเจฒเฉˆเจฌ 'เจคเฉ‡ เจธเจฟเฉฐเจ—เจฒ-เจฅเฉเจฐเฉˆเฉฑเจกเจก เจšเฉฑเจฒเจฃเจพ เจธเจพเจกเฉ‡ เจฒเจˆ เจฌเจนเฉเจค เจตเจงเฉ€เจ† เจนเฉˆ: เจŸเฉˆเจธเจŸเจพเจ‚ เจจเฉ‡ เจŸเฉˆเจธเจŸ เจฌเฉˆเจ‚เจš เจจเฉ‚เฉฐ เจฌเจนเฉเจค เจนเจฒเจ•เจพ เจฒเฉ‹เจก เจ•เฉ€เจคเจพ เจ…เจคเฉ‡ เจฒเจ—เจญเจ— เจ•เฉ‹เจˆ เจธเจฐเฉ‹เจค เจจเจนเฉ€เจ‚ เจตเจฐเจคเฉ‡เฅค

เจธเจฎเฉ‡เจ‚ เจฆเฉ‡ เจจเจพเจฒ, เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจนเฉเฉฐเจฆเฉ€ เจ—เจˆ, เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจšเจฒเจพเจ‰เจฃ เจฌเจพเจฐเฉ‡ เจธเฉ‹เจšเจฟเจ†, เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจชเฉ‚เจฐเฉ€ เจฆเฉŒเฉœ เจจเฉ‚เฉฐ เจฒเจ—เจญเจ— เจคเจฟเฉฐเจจ เจ˜เฉฐเจŸเฉ‡ เจฒเฉฑเจ—เจฃเฉ‡ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจ. เจนเฉ‹เจฐ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจตเฉ€ เจธเจพเจนเจฎเจฃเฉ‡ เจ†เจˆเจ†เจ‚:

  • เจ…เจธเฉ€เจ‚ เจ‡เจน เจชเฉเจธเจผเจŸเฉ€ เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เฉ‡ เจ•เจฟ เจŸเฉˆเจธเจŸ เจธเจฅเจฟเจฐ เจธเจจ;
  • เจธเจฅเจพเจจเจ• เจฎเจธเจผเฉ€เจจ 'เจคเฉ‡ เจฒเจ—เจพเจคเจพเจฐ เจ•เจˆ เจตเจพเจฐ เจšเจฒเจพเจ เจ—เจ เจŸเฉˆเจธเจŸ เจ•เจˆ เจตเจพเจฐ CI เจตเจฟเฉฑเจš เจ•เจฐเฉˆเจธเจผ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค

เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ:

<plugins>
	
<plugin>
    	
<groupId>org.apache.maven.plugins</groupId>
    	
<artifactId>maven-surefire-plugin</artifactId>
    	
<version>2.20</version>
    	
<configuration>
        	
<skipTests>${skipTests}</skipTests>
        	
<testFailureIgnore>false</testFailureIgnore>
        	
<argLine>
            	
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
            	
-Dcucumber.options="--tags ${TAGS} --plugin io.qameta.allure.cucumber2jvm.AllureCucumber2Jvm --plugin pretty"
        	
</argLine>
    	
</configuration>
	
    <dependencies>
        	
<dependency>
            	
<groupId>org.aspectj</groupId>
            	
<artifactId>aspectjweaver</artifactId>
            	
<version>${aspectj.version}</version>
        	
</dependency>
    	
</dependencies>
	
</plugin>
	
<plugin>
    	
<groupId>io.qameta.allure</groupId>
    	
<artifactId>allure-maven</artifactId>
    	
<version>2.9</version>
	
</plugin>
</plugins>

 เจฒเจพเจ—เฉ‚ เจ•เจฐเฉ‹, เจธเจ•เฉ‡เจฒ: VTB 'เจคเฉ‡ เจธเจตเฉˆเจšเจฒเจฟเจค เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเจพ เจ…เจจเฉเจญเจต
เจฒเฉเจญเจพเจ‰เจฃ เจฆเฉ€ เจฐเจฟเจชเฉ‹เจฐเจŸ เจ‰เจฆเจพเจนเจฐเจจ

 เจฒเจพเจ—เฉ‚ เจ•เจฐเฉ‹, เจธเจ•เฉ‡เจฒ: VTB 'เจคเฉ‡ เจธเจตเฉˆเจšเจฒเจฟเจค เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเจพ เจ…เจจเฉเจญเจต
เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉŒเจฐเจพเจจ เจฐเจจเจฐ เจฒเฉ‹เจก (8 เจ•เฉ‹เจฐ, 8 เจœเฉ€เจฌเฉ€ เจฐเฉˆเจฎ, 1 เจฅเจฐเจฟเฉฑเจก)
 
เจธเจฟเฉฐเจ—เจฒ-เจฅเฉเจฐเฉˆเจกเจก เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ‡ เจซเจพเจ‡เจฆเฉ‡:

  • เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจ†เจธเจพเจจ;
  • CI เจตเจฟเฉฑเจš เจฒเจพเจ‚เจš เจ…เจฎเจฒเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจฅเจพเจจเจ• เจฒเจพเจ‚เจšเจพเจ‚ เจคเฉ‹เจ‚ เจตเฉฑเจ– เจจเจนเฉ€เจ‚ เจนเจจ;
  • เจŸเฉˆเจธเจŸ เจ‡เฉฑเจ• เจฆเฉ‚เจœเฉ‡ เจจเฉ‚เฉฐ เจชเฉเจฐเจญเจพเจตเจฟเจค เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡;
  • เจฆเฉŒเฉœเจพเจ• เจธเจฐเฉ‹เจคเจพเจ‚ เจฒเจˆ เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจฒเฉ‹เฉœเจพเจ‚เฅค

เจธเจฟเฉฐเจ—เจฒ-เจฅเจฐเจฟเฉฑเจกเจก เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ‡ เจจเฉเจ•เจธเจพเจจ:

  • เจชเฉ‚เจฐเจพ เจ•เจฐเจจ เจฒเจˆ เจฌเจนเฉเจค เจฒเฉฐเจฎเจพ เจธเจฎเจพเจ‚ เจฒเจ“;
  • เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจฒเฉฐเจฎเฉ€ เจธเจฅเจฟเจฐเจคเจพ;
  • เจฆเฉŒเฉœเจพเจ• เจธเจฐเฉ‹เจคเจพเจ‚ เจฆเฉ€ เจ…เจ•เฉเจธเจผเจฒ เจตเจฐเจคเฉ‹เจ‚, เจฌเจนเฉเจค เจ˜เฉฑเจŸ เจตเจฐเจคเฉ‹เจ‚เฅค

JVM เจซเฉ‹เจฐเจ• 'เจคเฉ‡ เจŸเฉˆเจธเจŸ

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ…เจธเฉ€เจ‚ เจฌเฉ‡เจธ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจฅเฉเจฐเฉˆเจก-เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เฉ‹เจก เจฆเฉ€ เจฆเฉ‡เจ–เจญเจพเจฒ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€, เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจตเจฟเฉฑเจš เจšเฉฑเจฒเจฃ เจฆเจพ เจธเจญ เจคเฉ‹เจ‚ เจธเจชเฉฑเจธเจผเจŸ เจคเจฐเฉ€เจ•เจพ เจธเฉ€ cucumber-jvm-parallel-plugin Maven เจฒเจˆ. เจชเจฒเฉฑเจ—เจ‡เจจ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจเจพ เจ†เจธเจพเจจ เจนเฉˆ, เจชเจฐ เจธเจนเฉ€ เจธเจฎเจพเจ‚เจคเจฐ เจ•เจพเจฐเจตเจพเจˆ เจฒเจˆ, เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจตเฉฑเจ–เจฐเฉ‡ เจฌเฉเจฐเจพเจ‰เจœเจผเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจšเจฒเจพเจ‰เจฃเฉ‡ เจšเจพเจนเฉ€เจฆเฉ‡ เจนเจจเฅค เจ•เจฐเจจ เจฒเจˆ เจ•เฉเจ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจฎเฉˆเจจเฉ‚เฉฐ เจธเฉ‡เจฒเฉ‡เจจเฉ‹เจ‡เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเฉ€ เจชเจˆ.

เจธเฉ‡เจฒเฉ‡เจจเฉ‹เจ‡เจก เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ 32 เจ•เฉ‹เจฐ เจ…เจคเฉ‡ 24 เจœเฉ€เจฌเฉ€ เจฐเฉˆเจฎ เจตเจพเจฒเฉ€ เจฎเจธเจผเฉ€เจจ 'เจคเฉ‡ เจฒเจพเจ‚เจš เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค เจธเฉ€เจฎเจพ 48 เจฌเฉเจฐเจพเจŠเจœเจผเจฐเจพเจ‚ 'เจคเฉ‡ เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจธเฉ€ - 1,5 เจฅเฉเจฐเฉˆเจก เจชเฉเจฐเจคเฉ€ เจ•เฉ‹เจฐ เจ…เจคเฉ‡ เจฒเจ—เจญเจ— 400 MB RAMเฅค เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจŸเฉˆเจธเจŸ เจฆเจพ เจธเจฎเจพเจ‚ เจคเจฟเฉฐเจจ เจ˜เฉฐเจŸเฉ‡ เจคเฉ‹เจ‚ เจ˜เจŸเจพ เจ•เฉ‡ 40 เจฎเจฟเฉฐเจŸ เจ•เจฐ เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ†เฅค เจฆเฉŒเฉœเจพเจ‚ เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผ เจ•เจฐเจจ เจจเจพเจฒ เจธเจฅเจฟเจฐเจคเจพ เจฆเฉ€ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจฎเจฆเจฆ เจฎเจฟเจฒเฉ€: เจนเฉเจฃ เจ…เจธเฉ€เจ‚ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจจเจตเฉ‡เจ‚ เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ 20-30 เจตเจพเจฐ เจšเจฒเจพ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจธเจพเจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ เจ•เจฟ เจ‰เจน เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ— เจขเฉฐเจ— เจจเจพเจฒ เจšเฉฑเจฒ เจฐเจนเฉ‡ เจนเจจเฅค
เจนเฉฑเจฒ เจฆเฉ€ เจชเจนเจฟเจฒเฉ€ เจ•เจฎเจœเจผเฉ‹เจฐเฉ€ เจฅเฉ‹เฉœเฉเจนเฉ‡ เจœเจฟเจนเฉ‡ เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจฅเจฐเจฟเฉฑเจกเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจฐเจจเจฐ เจธเจฐเฉ‹เจคเจพเจ‚ เจฆเฉ€ เจ‰เฉฑเจš เจตเจฐเจคเฉ‹เจ‚ เจธเฉ€: 4 เจ•เฉ‹เจฐ เจ…เจคเฉ‡ 8 GB RAM 'เจคเฉ‡, เจŸเฉˆเจธเจŸ 6 เจคเฉ‹เจ‚ เจตเฉฑเจง เจฅเฉเจฐเฉˆเจกเจพเจ‚ เจตเจฟเฉฑเจš เจธเจฅเจฟเจฐเจคเจพ เจจเจพเจฒ เจšเฉฑเจฒเฉ‡เฅค เจฆเฉ‚เจœเจพ เจจเฉเจ•เจธเจพเจจ: เจชเจฒเฉฑเจ—เจ‡เจจ เจนเจฐเฉ‡เจ• เจฆเฉเจฐเจฟเจธเจผ เจฒเจˆ เจฆเฉŒเฉœเจพเจ• เจ•เจฒเจพเจธเจพเจ‚ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเฉ€ เจนเฉˆ, เจญเจพเจตเฉ‡เจ‚ เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ•เจฟเฉฐเจจเฉ‡ เจตเฉ€ เจฒเจพเจ‚เจš เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเฉ‹เจฃเฅค

เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ! เจจเฉ‚เฉฐ เจŸเฉˆเจ—เจธ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจชเจพเจธ เจจเจพ เจ•เจฐเฉ‹ argLine, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚:

<argLine>-Dcucumber.options="--tags ${TAGS} --plugin io.qameta.allure.cucumber2jvm.AllureCucumber2Jvm --plugin pretty"</argLine>
โ€ฆ
Mvn โ€“DTAGS="@smoke"

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจŸเฉˆเจ— เจชเจพเจธ เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจชเจฒเฉฑเจ—เจ‡เจจ เจธเจพเจฐเฉ‡ เจŸเฉˆเจธเจŸเจพเจ‚ เจฒเจˆ เจฆเฉŒเฉœเจพเจ• เจคเจฟเจ†เจฐ เจ•เจฐเฉ‡เจ—เฉ€, เจฏเจพเจจเฉ€, เจ‡เจน เจธเจพเจฐเฉ‡ เจŸเฉˆเจธเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ‡เจ—เฉ€, เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เจฐเจจ เจคเฉ‹เจ‚ เจคเฉเจฐเฉฐเจค เจฌเจพเจ…เจฆ เจ›เฉฑเจก เจ•เฉ‡ เจ…เจคเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ JVM เจซเฉ‹เจฐเจ• เจฌเจฃเจพเจเจ—เฉ€เฅค

เจŸเฉˆเจ— เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจจเฉ‚เฉฐ เจ…เฉฐเจฆเจฐ เจธเฉเฉฑเจŸเจฃเจพ เจธเจนเฉ€ เจนเฉˆ เจŸเฉˆเจ— เจชเจฒเฉฑเจ—เจ‡เจจ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจฟเฉฑเจš, เจนเฉ‡เจ เจพเจ‚ เจ‰เจฆเจพเจนเจฐเจจ เจฆเฉ‡เจ–เฉ‹เฅค เจนเฉ‹เจฐ เจตเจฟเจงเฉ€เจ†เจ‚ เจœเจฟเจจเฉเจนเจพเจ‚ เจฆเฉ€ เจ…เจธเฉ€เจ‚ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจนเฉˆ เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจš Allure เจชเจฒเฉฑเจ—เจ‡เจจ เจจเฉ‚เฉฐ เจ•เจจเฉˆเจ•เจŸ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจนเจจเฅค

เจ—เจฒเจค เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ 6 เจ›เฉ‹เจŸเฉ‡ เจŸเฉˆเจธเจŸเจพเจ‚ เจฒเจˆ เจšเฉฑเจฒเจฃ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ:

[INFO] Total time: 03:17 min

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจŸเฉˆเจ— เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเจพ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเจฆเฉ‡ เจนเฉ‹ เจคเจพเจ‚ เจŸเฉˆเจธเจŸ เจฐเจจ เจŸเจพเจˆเจฎ เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ mvn... -Dcucumber.options:

[INFO] Total time: 44.467 s

เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ:

<profiles>
	
<profile>
    	
<id>parallel</id>
    	
<build>
        	
<plugins>
            	
<plugin>
                	
<groupId>com.github.temyers</groupId>
                	
<artifactId>cucumber-jvm-parallel-plugin</artifactId>
                	
<version>5.0.0</version>
                	
<executions>
                    	
<execution>
                        	
<id>generateRunners</id>
                        	
<phase>generate-test-sources</phase>
                        	
<goals>
                            	
<goal>generateRunners</goal>
                        	
</goals>
                        	
<configuration>
                	
            <tags>
                            	
<tag>${TAGS}</tag>
                            	
</tags>
                            	
<glue>
                                	
<package>stepdefs</package>
                            	
</glue>
                        	
</configuration>
     	
               </execution>
                	
</executions>
    	
        </plugin>
            	
<plugin>
                	
<groupId>org.apache.maven.plugins</groupId>
                	
<artifactId>maven-surefire-plugin</artifactId>
        	
        <version>2.21.0</version>
                	
<configuration>
                    	
<forkCount>12</forkCount>
                    	
<reuseForks>false</reuseForks>
                    	
<includes>**/*IT.class</includes>
                   	
 <testFailureIgnore>false</testFailureIgnore>
                    	
<!--suppress UnresolvedMavenProperty -->
                    	
<argLine>
  	
 -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar" -Dcucumber.options="--plugin io.qameta.allure.cucumber2jvm.AllureCucumber2Jvm TagPFAllureReporter --plugin pretty"
                    	
</argLine>
                	
</configuration>
                	
<dependencies>
                    	
<dependency>
                        	
<groupId>org.aspectj</groupId>
                        	
<artifactId>aspectjweaver</artifactId>
                        	
<version>${aspectj.version}</version>
                 	
   </dependency>
                	
</dependencies>
         	
   </plugin>
        	
</plugins>
    	
</build>
	
</profile>

เจฒเจพเจ—เฉ‚ เจ•เจฐเฉ‹, เจธเจ•เฉ‡เจฒ: VTB 'เจคเฉ‡ เจธเจตเฉˆเจšเจฒเจฟเจค เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเจพ เจ…เจจเฉเจญเจต
เจเจฒเฉ‚เจฐ เจฐเจฟเจชเฉ‹เจฐเจŸ เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ (เจธเจญ เจคเฉ‹เจ‚ เจ…เจธเจฅเจฟเจฐ เจŸเฉˆเจธเจŸ, 4 เจฐเฉ€เจฐเจจ)

เจฒเจพเจ—เฉ‚ เจ•เจฐเฉ‹, เจธเจ•เฉ‡เจฒ: VTB 'เจคเฉ‡ เจธเจตเฉˆเจšเจฒเจฟเจค เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเจพ เจ…เจจเฉเจญเจตเจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉŒเจฐเจพเจจ เจฐเจจเจฐ เจฒเฉ‹เจก (8 เจ•เฉ‹เจฐ, 8 เจœเฉ€เจฌเฉ€ เจฐเฉˆเจฎ, 12 เจฅเฉเจฐเฉˆเจก)
 
เจชเฉเจฐเฉ‹:

  • เจ†เจธเจพเจจ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช - เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจชเจฒเฉฑเจ—เจ‡เจจ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ;
  • เจ‡เฉฑเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจตเฉฑเจกเฉ€ เจ—เจฟเจฃเจคเฉ€ เจตเจฟเฉฑเจš เจŸเฉˆเจธเจŸ เจ•เจฐเจจ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ;
  • เจชเฉœเจพเจ… 1 เจฆเฉ‡ เจฒเจˆ เจงเฉฐเจจเจตเจพเจฆ เจŸเฉˆเจธเจŸ เจธเจฅเจฟเจฐเจคเจพ เจฆเจพ เจชเฉเจฐเจตเฉ‡เจ—เฅค 

เจจเฉเจ•เจธเจพเจจ:

  • เจฎเจฒเจŸเฉ€เจชเจฒ OS/เจ•เฉฐเจŸเฉ‡เจจเจฐเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ;
  • เจนเจฐเฉ‡เจ• เจซเฉ‹เจฐเจ• เจฒเจˆ เจ‰เฉฑเจš เจธเจฐเฉ‹เจค เจฆเฉ€ เจ–เจชเจค;
  • เจชเจฒเฉฑเจ—เจ‡เจจ เจชเฉเจฐเจพเจฃเจพ เจนเฉˆ เจ…เจคเฉ‡ เจนเฉเจฃ เจธเจฎเจฐเจฅเจฟเจค เจจเจนเฉ€เจ‚ เจนเฉˆเฅค 

เจ…เจธเจฅเจฟเจฐเจคเจพ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจฆเฉ‚เจฐ เจ•เจฐเจจเจพ เจนเฉˆ 

เจŸเฉˆเจธเจŸ เจฌเฉˆเจ‚เจš เจ†เจฆเจฐเจธเจผ เจจเจนเฉ€เจ‚ เจนเจจ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ–เฉเจฆ เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจ‡เจน เจ•เฉ‹เจˆ เจนเฉˆเจฐเจพเจจเฉ€ เจฆเฉ€ เจ—เฉฑเจฒ เจจเจนเฉ€เจ‚ เจนเฉˆ เจ•เจฟ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจซเจฒเฉˆเจ•เฉ€ เจŸเฉˆเจธเจŸ เจนเจจ. เจฌเจšเจพเจ… เจฒเจˆ เจ†เจ‡เจ† maven surefire เจชเจฒเฉฑเจ—เจ‡เจจ, เจœเฉ‹ เจ•เจฟ เจซเฉ‡เจฒเฉเจน เจนเฉ‹เจ เจŸเฉˆเจธเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เจฐเจจ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจคเฉเจนเจพเจจเฉ‚เฉฐ เจชเจฒเฉฑเจ—เจ‡เจจ เจธเฉฐเจธเจ•เจฐเจฃ เจจเฉ‚เฉฐ เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ 2.21 เจตเจฟเฉฑเจš เจ…เฉฑเจชเจกเฉ‡เจŸ เจ•เจฐเจจ เจ…เจคเฉ‡ เจชเฉ‹เจฎ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจฐเฉ€เจธเจŸเจพเจฐเจŸ เจฆเฉ€ เจธเฉฐเจ–เจฟเจ† เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฒเจพเจˆเจจ เจฒเจฟเจ–เจฃ เจœเจพเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจฎเจพเจตเฉ‡เจจ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฆเจฒเฉ€เจฒ เจตเจœเฉ‹เจ‚ เจชเจพเจธ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ:

   	
<plugin>
        	
<groupId>org.apache.maven.plugins</groupId>
  	
      <artifactId>maven-surefire-plugin</artifactId>
        	
<version>2.21.0</version>
        	
<configuration>
           	
โ€ฆ.
            	
<rerunFailingTestsCount>2</rerunFailingTestsCount>
            	
โ€ฆ.
            	
</configuration>
</plugin>

เจœเจพเจ‚ เจธเจŸเจพเจฐเจŸเจ…เจช 'เจคเฉ‡: mvn โ€ฆ -Dsurefire.rerunFailingTestsCount=2 โ€ฆ
เจ‡เฉฑเจ• เจตเจฟเจ•เจฒเจช เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡, PowerShell เจธเจ•เฉเจฐเจฟเจชเจŸ (PS1) เจฒเจˆ Maven เจตเจฟเจ•เจฒเจช เจธเฉˆเฉฑเจŸ เจ•เจฐเฉ‹:

  
Set-Item Env:MAVEN_OPTS "-Dfile.encoding=UTF-8 -Dsurefire.rerunFailingTestsCount=2"

เจชเฉเจฐเฉ‹:

  • เจ‡เฉฑเจ• เจ…เจธเจฅเจฟเจฐ เจŸเฉˆเจธเจŸ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจธเจฎเจพเจ‚ เจฌเจฐเจฌเจพเจฆ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจˆ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจœเจฆเฉ‹เจ‚ เจ‡เจน เจ•เจฐเฉˆเจธเจผ เจนเฉเฉฐเจฆเจพ เจนเฉˆ;
  • เจŸเฉˆเจธเจŸ เจฌเฉˆเจ‚เจš เจธเจฅเจฟเจฐเจคเจพ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจ˜เฉฑเจŸ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจจเฉเจ•เจธเจพเจจ:

  • เจซเจฒเฉ‹เจŸเจฟเฉฐเจ— เจจเฉเจ•เจธ เจจเฉ‚เฉฐ เจ–เฉเฉฐเจเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ;
  • เจšเจฒเจพเจ‰เจฃ เจฆเจพ เจธเจฎเจพเจ‚ เจตเจงเจฆเจพ เจนเฉˆเฅค

เจ–เฉ€เจฐเฉ‡ 4 เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจธเจฎเจพเจ‚เจคเจฐ เจŸเฉˆเจธเจŸ

เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจนเจฐ เจฆเจฟเจจ เจตเจงเจฆเฉ€ เจ—เจˆเฅค เจ…เจธเฉ€เจ‚ เจซเจฟเจฐ เจคเฉ‹เจ‚ เจฆเฉŒเฉœเจพเจ‚ เจคเฉ‡เจœเจผ เจ•เจฐเจจ เจฌเจพเจฐเฉ‡ เจธเฉ‹เจšเจฟเจ†เฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจฎเฉˆเจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจตเจฟเฉฑเจš เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจŸเฉˆเจธเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจธเฉ€เฅค เจจเจพเจœเจผเฉเจ• เจ•เจพเจฐเจ• เจ‡เจน เจธเฉ€ เจ•เจฟ เจฎเจพเจตเฉ‡เจจ เจชเจฒเฉฑเจ—เจ‡เจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจตเจฟเฉฑเจš เจฆเฉŒเฉœเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจฆเฉŒเฉœเจพเจ•เจพเจ‚ เจฆเฉ€ เจชเฉ€เฉœเฉเจนเฉ€ เจจเฉ‡ เจฌเจนเฉเจค เจธเจฎเจพเจ‚ เจฒเจฟเจ†เฅค

เจ‰เจธ เจธเจฎเฉ‡เจ‚, เจ–เฉ€เจฐเจพ 4 เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจœเจพเจฐเฉ€ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจ‡เจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจ‡เจธ เจธเฉฐเจธเจ•เจฐเจฃ เจฒเจˆ เจ•เจฐเจจเจฒ เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจฒเจฟเจ–เจฃ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ เจนเฉˆเฅค เจฐเฉ€เจฒเฉ€เจœเจผ เจจเฉ‹เจŸเจธ เจตเจฟเฉฑเจš เจธเจพเจจเฉ‚เฉฐ เจฅเจฐเจฟเฉฑเจก เจชเฉฑเจงเจฐ 'เจคเฉ‡ เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจฒเจพเจ‚เจš เจ•เจฐเจจ เจฆเจพ เจตเจพเจ…เจฆเจพ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค เจธเจฟเจงเจพเจ‚เจคเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เจน เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ:

  • เจฅเจฐเจฟเฉฑเจกเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจตเจงเจพ เจ•เฉ‡ เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจฆเฉ‡ เจšเฉฑเจฒเจฃ เจจเฉ‚เฉฐ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจคเฉŒเจฐ 'เจคเฉ‡ เจคเฉ‡เจœเจผ เจ•เจฐเฉ‹;
  • เจนเจฐเฉ‡เจ• เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจฒเจˆ เจฆเฉŒเฉœเจพเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ 'เจคเฉ‡ เจธเจฎเฉ‡เจ‚ เจฆเฉ‡ เจจเฉเจ•เจธเจพเจจ เจจเฉ‚เฉฐ เจ–เจคเจฎ เจ•เจฐเฉ‹เฅค

เจฎเจฒเจŸเฉ€-เจฅเฉเจฐเฉˆเจกเจก เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸเจพเจ‚ เจฒเจˆ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจจเฉ‚เฉฐ เจ…เจจเฉเจ•เฉ‚เจฒ เจฌเจฃเจพเจ‰เจฃเจพ เจ‡เฉฐเจจเจพ เจฎเฉเจธเจผเจ•เจฒ เจจเจนเฉ€เจ‚ เจนเฉ‹เจ‡เจ†. เจ–เฉ€เจฐเจพ 4 เจนเจฐเฉ‡เจ• เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจŸเฉˆเจธเจŸ เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚ เจคเฉ‹เจ‚ เจฒเฉˆ เจ•เฉ‡ เจ…เฉฐเจค เจคเฉฑเจ• เจธเจฎเจฐเจชเจฟเจค เจฅเจฐเจฟเฉฑเจก 'เจคเฉ‡ เจšเจฒเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ, เจ‡เจธเจฒเจˆ เจ•เฉเจ เจ†เจฎ เจธเจฅเจฟเจฐ เจšเฉ€เจœเจผเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจฅเฉเจฐเฉˆเจกเจฒเฉ‹เจ•เจฒ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจตเจฟเฉฑเจš เจฌเจฆเจฒ เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค 
เจ†เจˆเจกเฉ€เจ† เจฐเฉ€เจซเฉˆเจ•เจŸเจฐเจฟเฉฐเจ— เจŸเฉ‚เจฒเจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจฎเฉเฉฑเจ– เจ—เฉฑเจฒ เจ‡เจน เจนเฉˆ เจ•เจฟ เจ‰เจนเจจเจพเจ‚ เจธเจฅเจพเจจเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจเจพ เจœเจฟเฉฑเจฅเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฆเฉ€ เจคเฉเจฒเจจเจพ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจธเฉ€ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจจเฉฑเจฒ เจฒเจˆ เจœเจพเจ‚เจš เจ•เจฐเจจเจพ)เฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจœเฉ‚เจจเจฟเจŸ เจฐเจจเจฐ เจ•เจฒเจพเจธ เจเจจเฉ‹เจŸเฉ‡เจธเจผเจจ เจตเจฟเฉฑเจš เจเจฒเฉ‚เจฐ เจชเจฒเฉฑเจ—เจ‡เจจ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ:

 
<profile>
	
<id>parallel</id>
	
<build>
    	
<plugins>
        	
<plugin>
            	
<groupId>org.apache.maven.plugins</groupId>
 	
           <artifactId>maven-surefire-plugin</artifactId>
            	
<version>3.0.0-M3</version>
   	
         <configuration>
                	
<useFile>false</useFile>
                	
<testFailureIgnore>false</testFailureIgnore>
        	
        <parallel>methods</parallel>
                	
<threadCount>6</threadCount>
                	
<perCoreThreadCount>true</perCoreThreadCount>
                	
<argLine>
                    	
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                	
</argLine>
            	
</configuration>
            	
<dependencies>
                	
<dependency>
                    	
<groupId>org.aspectj</groupId>
   	
                 <artifactId>aspectjweaver</artifactId>
                    	
<version>${aspectj.version}</version>
                	
</dependency>
            	
</dependencies>
        	
</plugin>
    	
</plugins>
	
</build>
</profile>

เจฒเจพเจ—เฉ‚ เจ•เจฐเฉ‹, เจธเจ•เฉ‡เจฒ: VTB 'เจคเฉ‡ เจธเจตเฉˆเจšเจฒเจฟเจค เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเจพ เจ…เจจเฉเจญเจตเจเจฒเฉ‚เจฐ เจฐเจฟเจชเฉ‹เจฐเจŸ เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ (เจธเจญ เจคเฉ‹เจ‚ เจ…เจธเจฅเจฟเจฐ เจŸเฉˆเจธเจŸ, 5 เจฐเฉ€เจฐเจจ)

เจฒเจพเจ—เฉ‚ เจ•เจฐเฉ‹, เจธเจ•เฉ‡เจฒ: VTB 'เจคเฉ‡ เจธเจตเฉˆเจšเจฒเจฟเจค เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเจพ เจ…เจจเฉเจญเจตเจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉŒเจฐเจพเจจ เจฐเจจเจฐ เจฒเฉ‹เจก (8 เจ•เฉ‹เจฐ, 8 เจœเฉ€เจฌเฉ€ เจฐเฉˆเจฎ, 24 เจฅเฉเจฐเฉˆเจก)

เจชเฉเจฐเฉ‹:

  • เจ˜เฉฑเจŸ เจธเจฐเฉ‹เจค เจฆเฉ€ เจ–เจชเจค;
  • เจ–เฉ€เจฐเฉ‡ เจคเฉ‹เจ‚ เจฎเฉ‚เจฒ เจธเจนเจพเจ‡เจคเจพ - เจ•เฉ‹เจˆ เจตเจพเจงเฉ‚ เจธเจพเจงเจจเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚;
  • เจชเฉเจฐเจคเฉ€ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฐ เจ•เฉ‹เจฐ 6 เจคเฉ‹เจ‚ เจตเฉฑเจง เจฅเฉเจฐเฉˆเจก เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจธเจฎเจฐเฉฑเจฅเจพเฅค

เจจเฉเจ•เจธเจพเจจ:

  • เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจน เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจ•เจฟ เจ•เฉ‹เจก เจฎเจฒเจŸเฉ€-เจฅเจฐเจฟเฉฑเจกเจก เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ;
  • เจฆเจพเจ–เจฒเจพ เจฅเฉเจฐเฉˆเจธเจผเจนเฉ‹เจฒเจก เจตเจงเจฆเจพ เจนเฉˆเฅค

GitLab เจชเฉฐเจจเจฟเจ†เจ‚ 'เจคเฉ‡ เจฒเฉเจญเจพเจ‰เจฃ เจตเจพเจฒเฉ€เจ†เจ‚ เจฐเจฟเจชเฉ‹เจฐเจŸเจพเจ‚

เจฎเจฒเจŸเฉ€-เจฅเฉเจฐเฉˆเฉฑเจกเจก เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจฆเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ…เจธเฉ€เจ‚ เจฐเจฟเจชเฉ‹เจฐเจŸเจพเจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจ เจฒเจˆ เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจธเจฎเจพเจ‚ เจฌเจฟเจคเจพเจ‰เจฃเจพ เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเจพเฅค เจ‰เจธ เจธเจฎเฉ‡เจ‚, เจธเจพเจจเฉ‚เฉฐ เจนเจฐ เจ‡เฉฑเจ• เจฐเจฟเจชเฉ‹เจฐเจŸ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ†เจฐเจŸเฉ€เจซเฉˆเจ•เจŸ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš GitLab 'เจคเฉ‡ เจ…เฉฑเจชเจฒเฉ‹เจก เจ•เจฐเจจเจพ เจชเฉˆเจ‚เจฆเจพ เจธเฉ€, เจซเจฟเจฐ เจ‡เจธเจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ…เจจเจชเฉˆเจ• เจ•เจฐเจจเจพ เจชเฉˆเจ‚เจฆเจพ เจธเฉ€เฅค เจ‡เจน เจฌเจนเฉเจค เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจจเจนเฉ€เจ‚ เจนเฉˆ เจ…เจคเฉ‡ เจฒเฉฐเจฌเจพ เจธเจฎเจพเจ‚ เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆเฅค เจ…เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจ•เฉ‹เจˆ เจนเฉ‹เจฐ เจ†เจชเจฃเฉ‡ เจฒเจˆ เจฐเจฟเจชเฉ‹เจฐเจŸ เจฆเฉ‡เจ–เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‰เจนเฉ€ เจ“เจชเจฐเฉ‡เจธเจผเจจ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค เจ…เจธเฉ€เจ‚ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจซเฉ€เจกเจฌเฉˆเจ• เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจธเฉ€, เจ…เจคเฉ‡ เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจนเฉฑเจฒ เจฒเฉฑเจญเจฟเจ† - GitLab เจชเฉฐเจจเฉ‡เฅค เจ‡เจน เจ‡เฉฑเจ• เจฌเจฟเจฒเจŸ-เจ‡เจจ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจนเฉˆ เจœเฉ‹ GitLab เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจคเจพเจœเจผเจพ เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚ เจตเจฟเฉฑเจš เจฌเจพเจ•เจธ เจคเฉ‹เจ‚ เจฌเจพเจนเจฐ เจ‰เจชเจฒเจฌเจง เจนเฉˆเฅค เจคเฉเจนเจพเจจเฉ‚เฉฐ เจคเฉเจนเจพเจกเฉ‡ เจธเจฐเจตเจฐ 'เจคเฉ‡ เจธเจฅเจฟเจฐ เจธเจพเจˆเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจคเฉˆเจจเจพเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจฒเจฟเฉฐเจ• เจฐเจพเจนเฉ€เจ‚ เจเจ•เจธเฉˆเจธ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค

Allure เจฐเจฟเจชเฉ‹เจฐเจŸเจพเจ‚ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจธเจ•เฉเจฐเฉ€เจจเจธเจผเจพเจŸ เจ—เจฟเฉฑเจŸเจฒเฉˆเจฌ เจชเฉฐเจจเจฟเจ†เจ‚ 'เจคเฉ‡ เจฒเจ เจ—เจ เจธเจจเฅค เจตเจฟเฉฐเจกเฉ‹เจœเจผ เจชเจพเจตเจฐเจธเจผเฉ‡เจฒ เจตเจฟเฉฑเจš - GitLab เจชเฉฐเจจเจฟเจ†เจ‚ 'เจคเฉ‡ เจฐเจฟเจชเฉ‹เจฐเจŸ เจคเฉˆเจจเจพเจค เจ•เจฐเจจ เจฒเจˆ เจธเจ•เฉเจฐเจฟเจชเจŸ (เจ‡เจธ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ):

New-Item -ItemType directory -Path $testresulthistory | Out-Null

try {Invoke-WebRequest -Uri $hst -OutFile $outputhst}
Catch{echo "fail copy history"}
try {Invoke-WebRequest -Uri $hsttrend -OutFile $outputhsttrnd}
Catch{echo "fail copy history trend"}

mvn allure:report
#mvn assembly:single -PzipAllureReport
xcopy $buildlocationtargetsiteallure-maven-plugin* $buildlocationpublic /s /i /Y

เจจเจคเฉ€เจœเจพ เจ•เฉ€ เจนเฉˆ 

เจ‡เจธ เจฒเจˆ, เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจธเฉ‹เจš เจฐเจนเฉ‡ เจธเฉ€ เจ•เจฟ เจ•เฉ€ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ–เฉ€เจฐเฉ‡ เจฆเฉ‡ เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจตเจฟเฉฑเจš เจฅเฉเจฐเฉˆเจก เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เฉ‹เจก เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจคเจพเจ‚ เจนเฉเจฃ เจœเจตเจพเจฌ เจธเจชเฉฑเจธเจผเจŸ เจนเฉˆ - เจ–เฉ€เจฐเฉ‡ 4 เจฆเฉ‡ เจจเจพเจฒ เจ‡เจธเจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ เจ†เจธเจพเจจ เจนเฉˆ, เจœเจฟเจธ เจจเจพเจฒ เจ‡เฉฑเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจฒเจพเจ‚เจš เจ•เฉ€เจคเฉ‡ เจ—เจ เจฅเจฐเจฟเฉฑเจกเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจตเจฟเฉฑเจš เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจตเจพเจงเจพ เจนเฉ‹เจ‡เจ† เจนเฉˆเฅค เจŸเฉˆเจธเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจ‡เจธ เจตเจฟเจงเฉ€ เจจเจพเจฒ, เจธเจตเจพเจฒ เจนเฉเจฃ เจธเฉ‡เจฒเฉ‡เจจเฉ‹เจ‡เจก เจ…เจคเฉ‡ เจŸเฉˆเจธเจŸ เจฌเฉˆเจ‚เจš เจตเจพเจฒเฉ€ เจฎเจธเจผเฉ€เจจ เจฆเฉ€ เจ•เจพเจฐเจ—เฉเจœเจผเจพเจฐเฉ€ เจฌเจพเจฐเฉ‡ เจฌเจฃ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจ…เจญเจฟเจ†เจธ เจจเฉ‡ เจฆเจฟเจ–เจพเจ‡เจ† เจนเฉˆ เจ•เจฟ เจฅเจฐเจฟเฉฑเจกเจพเจ‚ 'เจคเฉ‡ เจ†เจŸเฉ‹เจŸเฉˆเจธเจŸ เจšเจฒเจพเจ‰เจฃเจพ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจญ เจคเฉ‹เจ‚ เจตเจงเฉ€เจ† เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจฆเฉ‡ เจจเจพเจฒ เจธเจฐเฉ‹เจค เจฆเฉ€ เจ–เจชเจค เจจเฉ‚เฉฐ เจ˜เฉฑเจŸ เจคเฉ‹เจ‚ เจ˜เฉฑเจŸ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ—เฉเจฐเจพเจซเจพเจ‚ เจคเฉ‹เจ‚ เจฆเฉ‡เจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจงเจพเจ—เฉ‡ เจจเฉ‚เฉฐ เจฆเฉเฉฑเจ—เจฃเจพ เจ•เจฐเจจ เจจเจพเจฒ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจŸเฉˆเจธเจŸเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจฎเจพเจจ เจชเฉเจฐเจตเฉ‡เจ— เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ…เจธเฉ€เจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฌเจฟเจฒเจก เจตเจฟเฉฑเจš 2 เจคเฉ‹เจ‚ เจตเฉฑเจง เจธเจตเฉˆเจšเจฒเจฟเจค เจŸเฉˆเจธเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจธเฉ€, เจœเฉ‹ เจ•เจฟ 200 เจฐเฉ€เจฐเจจ เจฆเฉ‡ เจจเจพเจฒ เจตเฉ€ เจฒเจ—เจญเจ— 5 เจฎเจฟเฉฐเจŸ เจตเจฟเฉฑเจš เจšเฉฑเจฒเจฆเฉ‡ เจนเจจเฅค เจ‡เจน เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เจนเจจเจพเจ‚ เจคเฉ‹เจ‚ เจคเฉเจฐเฉฐเจค เจซเฉ€เจกเจฌเฉˆเจ• เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡, เจœเฉ‡ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡, เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจฆเฉเจนเจฐเจพเจ“เฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹