Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÃæÏò¿ª·¢µÄ²âÊÔ¼¼Êõ£¨¶þ£©£ºÐÔÄܲâÊÔ
 
À´Ô´£ºcsdn ·¢²¼ÓÚ£º 2017-8-15
  2937  次浏览      27
 

Òý×Ó£º×ÔÉÏÊÀ¼ÍÄ©Kent BeckÌá³öTDD(Test-Driven Development)¿ª·¢ÀíÄîÒÔÀ´£¬¿ª·¢ºÍ²âÊԵı߽ç±äµÄÔ½À´Ô½Ä£ºý£¬´ÓÔ­±¾ÉÏÏÂÓεÄÒÀÀµ¹ØÏµ£¬Öð²½Ñݱä³ÉÄãÖÐÓÐÎÒ¡¢ÎÒÖÐÓÐÄãµÄ»¥Àµ¹ØÏµ£¬ÉõÖÁºÜ¶à¹«Ë¾ÉèÁ¢ÁËеÄQE(Quality Engineer)ְλ¡£ºÍ´«Í³µÄQA(Quality Assurance)²»Í¬£¬QEµÄÖ÷ÒªÖ°ÔðÊÇͨ¹ý¹¤³Ì»¯µÄÊֶα£Ö¤ÏîÄ¿ÖÊÁ¿£¬ÕâЩÊֶΰüÀ¨µ«²»½öÏÞÓÚ±àдµ¥Ôª²âÊÔ¡¢¼¯³É²âÊÔ£¬´î½¨×Ô¶¯»¯²âÊÔÁ÷³Ì£¬Éè¼ÆÐÔÄܲâÊԵȡ£¿ÉÒÔ˵£¬QEÉíÉϼæ¾ßÁËQAµÄÖÊÁ¿ÒâʶºÍ¿ª·¢µÄ¹¤³ÌÄÜÁ¦¡£´ÓÕâÆª¿ªÊ¼£¬ÎÒ»á´Ó¿ª·¢µÄ½Ç¶È·ÖÈýÆÚÁÄÁÄQEÕâ¸öÒà²âÊÔÒ࿪·¢µÄ½ÇÉ«ËùÐèµÄ»ù±¾¼¼ÄÜ¡£

ǰÇé¸ÅÒª£º - ÃæÏò¿ª·¢µÄ²âÊÔ¼¼Êõ£¨Ò»£©£ºMock

1 ʲôÊÇÐÔÄܲâÊÔ£¿

ÏÈÀ´¿´Ò»ÏÂά»ù°Ù¿ÆÀï¶ÔÐÔÄܲâÊԵ͍Ò壬

In software engineering, performance testing is in general, a testing practice performed to determine how a system performs in terms of responsiveness and stability under a particular workload. - Wikipedia

×¢ÒâÉÏÊö¶¨ÒåÖÐÓÐÈý¸ö¹Ø¼ü´Ê£º

responsiveness£¬¼´ÏìӦʱ¼ä£¬ÇëÇó·¢³öÈ¥Ö®ºó£¬·þÎñ¶ËÐèÒª¶à¾Ã²ÅÄÜ·µ»Ø½á¹û£¬ÏÔÈ»ÏìӦʱ¼äÔ½¶Ì£¬ÐÔÄÜÔ½ºÃ¡£

stability£¬¼´Îȶ¨ÐÔ£¬Í¬ÑùµÄÇëÇ󣬲»Í¬Ê±¿Ì·¢³öÈ¥£¬ÏìӦʱ¼ä²î±ðԽС£¬Îȶ¨ÐÔÔ½ºÃ£¬ÐÔÄÜÒ²Ô½ºÃ¡£

workload£¬¼´¸ºÔØ£¬Í¬Ò»Ê±¿Ì·þÎñ¶ËÊÕµ½µÄÇëÇóÊýÁ¿£¬ÆäÖе¥Î»Ê±¼äÄڳɹ¦´¦ÀíµÄÇëÇóÊýÁ¿¼´ÍÌÍÂÁ¿£¬ÍÌÍÂÁ¿Ô½´ó£¬ÐÔÄÜÔ½ºÃ¡£

ÏìӦʱ¼äºÍÍÌÍÂÁ¿ÊǺâÁ¿Ó¦ÓÃÐÔÄܺûµ×îÖØÒªµÄÁ½¸öÖ¸±ê¡£¶ÔÓÚ¾ø´ó¶àÊýÓ¦Ó㬸տªÊ¼µÄʱºò£¬ÏìӦʱ¼ä×î¶Ì£»Ëæ×ŸºÔصÄÔö´ó£¬ÍÌÍÂÁ¿¿ìËÙÉÏÉý£¬ÏìӦʱ¼äÒ²Ö𽥱䳤£»µ±¸ºÔس¬¹ýijһ¸öÖµÖ®ºó£¬ÏìӦʱ¼ä»áͻȻ³ÊÖ¸Êý¼¶·Å´ó£¬Í¬Ê±ÍÌÍÂÁ¿Ò²Ó¦Éùϵø£¬Ó¦ÓÃÐÔÄܼ±¾çϽµ£¬Õû¸ö¹ý³ÌÈçÏ£º

ͼƬ³ö´¦£ºÐÔÄܲâÊÔÓ¦¸ÃÔõô×ö£¿

2 ÐÔÄܲâÊÔµÄÄ¿µÄ

Á˽âÁËÓ¦ÓÃÐÔÄܱ仯µÄÆÕ±é¹æÂÉ£¬ÐÔÄܲâÊÔµÄÄ¿µÄÒ²¾ÍÓÐÁ˴𰸣ºÕë¶ÔijһӦÓã¬ÕÒ³öÏìӦʱ¼äºÍÍÌÍÂÁ¿µÄÁ¿»¯¹ØÏµ£¬ÕÒµ½Ó¦ÓÃÐÔÄܱ仯µÄÁÙ½çµã¡£Äã¿ÉÄÜ»áÎÊ£¬ÖªµÀÁËÕâЩÓÐʲôÓÃÄØ£¿ÔÚÎÒ¿´À´£¬ÖÁÉÙÓÐ3¸ö²ãÃæµÄºÃ´¦£º

µÚÒ»£¬ÓеķÅʸ£¬Ìá¸ß×ÊÔ´ÀûÓÃÂÊ¡£ÐÔÄܲâÊԵĹý³Ì¾ÍÊÇÁ¿»¯ÐÔÄܵĹý³Ì£¬ÓÐÁ˸÷ÖÖÐÔÄÜÊý¾Ý£¬Äã²ÅÄܶÔÓ¦ÓÃÐÔÄܽøÐж¨Á¿·ÖÎö£¬ÕÒµ½²¢½â¾öDZÔÚµÄÐÔÄÜÎÊÌ⣬´Ó¶øÌá¸ß×ÊÔ´ÀûÓÃÂÊ¡£

µÚ¶þ£¬¿ÆÑ§µÄ½øÐÐÈÝÁ¿¹æ»®¡£ÕÒµ½ÁËÓ¦ÓÃÐÔÄܱ仯µÄÁÙ½çµã£¬Ò²¾ÍºÜÈÝÒ×ÕÒµ½µ¥½ÚµãµÄÐÔÄܼ«ÏÞ£¬ÕâÊǽøÐÐÈÝÁ¿¹æ»®µÄÖØÒª¾ö²ßÒÀ¾Ý¡£±ÈÈçijһӦÓÃÔÚµ¥½Úµãϵļ«ÏÞÍÌÍÂÁ¿ÊÇ2000 QPS£¬ÄÇ̫̾¶Ô10000 QPSµÄÁ÷Á¿£¬ÖÁÉÙÐèÒª²¿Êð5¸ö½Úµã¡£

µÚÈý£¬¸ÄÉÆQoS£¨Quality of Service£©¡£ºÜ¶àʱºò£¬×ÊÔ´ÊÇÓÐÏ޵ģ¬Ãæ¶Ô³¬³ö·þÎñÄÜÁ¦µÄÁ÷Á¿£¬ÎªÁ˱£Ö¤QoS£¬±ØÐë×ö³öÈ¡Éᣨ±ÈÈçÏÞÁ÷½µ¼¶£¬¿ª¹ØÔ¤°¸µÈ£©£¬Ó¦ÓÃÐÔÄÜÊý¾ÝÊÇÉè¼ÆQoS·½°¸µÄÖØÒªÒÀ¾Ý¡£

3 ÐÔÄܲâÊÔµÄÈý¸ö³£¼ûÎóÇø

ÎóÇø1£ºÖ»¿´Æ½¾ùÖµ£¬²»¶®TP95/TP99

ÓÃÆ½¾ùÖµÀ´ºâÁ¿ÏìӦʱ¼äÊÇÐÔÄܲâÊÔÖÐ×î³£¼ûµÄÎóÇø¡£´ÓµÚ1С½ÚµÄ²åͼ¿ÉÒÔ¿´³ö£¬Ëæ×ÅÍÌÍÂÁ¿µÄÔö´ó£¬ÏìӦʱ¼ä»áÖ𽥱䳤£¬µ±´ïµ½×î´óÍÌÍÂÁ¿Ö®ºó£¬ÏìӦʱ¼ä»á¿ªÊ¼¼ÓËÙÉÏÉý£¬ÓÈÆäÊÇÅÅÔÚºóÃæµÄÇëÇó¡£ÔÚÕâ¸öʱ¿Ì£¬Èç¹ûÖ»¿´Æ½¾ùÖµ£¬ÄãÍùÍù²ì¾õ²»µ½ÎÊÌ⣬ÒòΪ´ó²¿·ÖÇëÇóµÄÏìӦʱ¼ä»¹ÊǺ̵ܶģ¬ÂýÇëÇóÖ»Õ¼Ò»¸öºÜСµÄ±ÈÀý£¬ËùÒÔÆ½¾ùÖµ±ä»¯²»´ó¡£µ«Êµ¼ÊÉÏ£¬¿ÉÄÜÒѾ­Óг¬¹ý1%£¬ÉõÖÁ5%µÄÇëÇóµÄÏìӦʱ¼äÒѾ­³¬³öÉè¼ÆµÄ·¶Î§ÁË¡£

¸ü¿ÆÑ§¡¢¸üºÏÀíµÄÖ¸±êÊÇ¿´TP95»òÕßTP99ÏìӦʱ¼ä¡£TPÊÇTop PercentileµÄËõд£¬ÊÇÒ»¸öͳ¼ÆÑ§ÊõÓÓÃÀ´ÃèÊöÒ»×éÊýÖµµÄ·Ö²¼ÌØÕ÷¡£ÒÔTP95ΪÀý£¬¼ÙÉèÓÐ100¸öÊý×Ö£¬´ÓСµ½´óÅÅÐòÖ®ºó£¬µÚ95¸öÊý×ÖµÄÖµ¾ÍÊÇÕâ×éÊý×ÖµÄTP95Öµ£¬±íʾÖÁÉÙÓÐ95%µÄÊý×ÖÊÇСÓÚ»òÕßµÈÓÚÕâ¸öÖµ¡£

ÒÔÒ»´Î¾ßÌåµÄÐÔÄܲâÊÔΪÀý£¬

×ܹ²ÓÐ1000´ÎÇëÇ󣬯½¾ùÏìӦʱ¼äÊÇ58.9ms£¬TP95ÊÇ123.85ms£¨Æ½¾ùÏìӦʱ¼äµÄ2.1±¶£©£¬TP99ÊÇ997.99ms£¨Æ½¾ùÏìӦʱ¼äµÄ16.9±¶£©¡£¼ÙÉèÓ¦ÓÃÉè¼ÆµÄ×î´óÏìӦʱ¼äÊÇ100ms£¬µ¥¿´Æ½¾ùʱ¼äÊÇÍêÈ«·ûºÏÒªÇóµÄ£¬µ«Êµ¼ÊÉÏÒѾ­Óг¬¹ý50¸öÇëÇóʧ°ÜÁË¡£Èç¹û¿´TP95»òÕßTP99£¬ÎÊÌâ¾ÍºÜÇå³þÁË¡£

ÎóÇø2£ºÖ»¹Ø×¢ÏìӦʱ¼äºÍÍÌÍÂÁ¿£¬ºöÊÓÇëÇó³É¹¦ÂÊ

Ëä˵ºâÁ¿Ó¦ÓÃÐÔÄܺûµ×îÖ÷ÒªÊÇ¿´ÏìӦʱ¼äºÍÍÌÍÂÁ¿£¬µ«ÕâÀïÓиö´óǰÌᣬËùÓÐÇëÇó£¨Èç¹û×ö²»µ½ËùÓУ¬ÖÁÉÙÒ²Òª¾ø´ó¶àÊýÇëÇ󣬱ÈÈç99.9%£©¶¼±»³É¹¦´¦ÀíÁË£¬¶ø²»ÊÇ·µ»ØÒ»¶Ñ´íÎóÂë¡£Èç¹û²»Äܱ£Ö¤ÕâÒ»µã£¬ÄÇôÔٵ͵ÄÏìӦʱ¼ä£¬ÔٸߵÄÍÌÍÂÁ¿¶¼ÊÇûÓÐÒâÒåµÄ¡£

ÎóÇø3£ºÍüÁ˲âÊÔ¶ËÒ²´æÔÚÐÔÄÜÆ¿¾±

ÐÔÄܲâÊԵĵÚÈý¸öÎóÇøÊÇÖ»¹Ø×¢·þÎñ¶Ë£¬¶øºöÂÔÁ˲âÊԶ˱¾Éí¿ÉÄÜÒ²´æÔÚÏÞÖÆ¡£±ÈÈç²âÊÔÓÃÀýÉèÖÃÁË10000²¢·¢Êý£¬µ«Êµ¼ÊÔËÐÐÓÃÀýµÄ»úÆ÷×î´óÖ»Ö§³Ö5000²¢·¢Êý£¬Èç¹ûÖ»¿´·þÎñ¶ËµÄÊý¾Ý£¬Äã¿ÉÄÜ»áÎóÒÔΪ·þÎñ¶Ë×î´ó¾ÍÖ»Ö§³Ö5000²¢·¢Êý¡£Èç¹ûÓöµ½ÕâÖÖÇé¿ö£¬»òÕß»»Óøü¸ßÐÔÄܵIJâÊÔ»úÆ÷£¬»òÕßÔö¼Ó²âÊÔ»úÆ÷µÄÊýÁ¿¡£

4 ÈçºÎ½øÐÐÐÔÄܲâÊÔ£¿

½éÉÜÍêÐÔÄܲâÊÔÏà¹ØµÄһЩ¸ÅÄîÖ®ºó£¬ÔÙÀ´¿´Ò»ÏÂÓÐÄÄЩ¹¤¾ß¿ÉÒÔ½øÐÐÐÔÄܲâÊÔ¡£

4.1 JMeter

JMeter¿ÉÄÜÊÇ×î³£ÓõÄÐÔÄܲâÊÔ¹¤¾ß¡£Ëü¼ÈÖ§³ÖͼÐνçÃæ£¬Ò²Ö§³ÖÃüÁîÐУ¬ÊôÓںںвâÊԵķ¶³ë£¬¶Ô·Ç¿ª·¢ÈËÔ±±È½ÏÓѺã¬ÉÏÊÖÒ²·Ç³£ÈÝÒס£Í¼ÐνçÃæÒ»°ãÓÃÓÚ±àд¡¢µ÷ÊÔ²âÊÔÓÃÀý£¬¶øÊµ¼ÊµÄÐÔÄܲâÊÔ½¨Ò黹ÊÇÔÚÃüÁîÐÐÏÂÔËÐС£

²¢·¢ÉèÖÃ

ÇëÇó²ÎÊý

½á¹û±¨±í

ÃüÁîÐÐϵij£ÓÃÃüÁ

ÉèÖÃJVM²ÎÊý£ºJVM_ARGS=¡±-Xms2g -Xmx2g¡±

ÔËÐвâÊÔ£ºjmeter -n -t <jmx_file>

ÔËÐвâÊÔͬʱÉú³É±¨±í£ºjmeter -n -t <jmx_file> -l <log_file> -e -o <report_dir>

³ýÁËJMeter£¬ÆäËû³£ÓõÄÐÔÄܲâÊÔ¹¤¾ß»¹ÓÐab, http_load, wrkÒÔ¼°ÉÌÓõÄLoaderRunner¡£

4.2 JMH

Èç¹û²âÊÔÓÃÀý±È½Ï¸´ÔÓ£¬»òÕ߸ºÔðÐÔÄܲâÊÔµÄÈËÔ±¾ßÓÐÒ»¶¨µÄ¿ª·¢ÄÜÁ¦£¬Ò²¿ÉÒÔ¿¼ÂÇʹÓÃһЩ¿ò¼Ü±àдµ¥¶ÀµÄÐÔÄܲâÊÔ³ÌÐò¡£¶ÔÓÚJava¿ª·¢ÈËÔ±¶øÑÔ£¬JMHÊÇÒ»¸öÍÆ¼öµÄÑ¡Ôñ¡£ÀàËÆÓÚJUnit£¬JMHÌṩÁËһϵÁÐ×¢½âÓÃÓÚ±àд²âÊÔÓÃÀý£¬ÒÔ¼°Ò»¸öÔËÐвâÊÔµÄÒýÇæ¡£ÊÂʵÉÏ£¬¼´½«·¢²¼µÄJDK 9ĬÈϾͻá°üº¬JMH¡£

ÏÂÃæÊÇÎÒGitHubÉϵÄʾÀý¹¤³ÌÀïµÄÒ»¸öÀý×Ó£¬

@BenchmarkMode(Mode.Throughput)
@Fork(1)
@Threads(Threads.MAX)
@State(Scope.Benchmark)
@Warmup(iterations = 1, time = 3)
@Measurement(iterations = 3, time = 3)
public class VacationClientBenchmark {
private VacationClient vacationClient;
@Setup
public void setUp() {
VacationClientConfig clientConfig = new VacationClientConfig("http://localhost:3000");
vacationClient = new VacationClient( clientConfig);
}
@Benchmark
public void benchmarkIsWeekend() {
VacationRequest request = new VacationRequest();
request.setType(PERSONAL);
OffsetDateTime lastSunday = OffsetDateTime.now().with( TemporalAdjusters.previous(SUNDAY));
request.setStart(lastSunday);
request.setEnd(lastSunday.plusDays(1));
Asserts.isTrue(vacationClient. isWeekend(request).isSuccess());
}
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(VacationClientBenchmark. class.getSimpleName())
.build();
new Runner(opt).run();
}
}

ÆäÖУº

@BenchmarkMode: ÐÔÄܲâÊÔģʽ£¬Ö§³ÖThroughput£¬AverageTime£¬SingleShotTimeµÈ¶àÖÖģʽ¡£

@Fork: ÉèÖÃÔËÐÐÐÔÄܲâÊÔµÄFork½ø³ÌÊý£¬Ä¬ÈÏÊÇ0£¬±íʾ¹²ÓÃJMHÖ÷½ø³Ì¡£

@Threads: ²¢·¢Êý£¬Threads.MAX±íʾͬϵͳµÄCPUºËÊý¡£

@WarmupºÍ@Measurement: ·Ö±ðÉèÖÃÔ¤ÈȺÍʵ¼ÊÐÔÄܲâÊÔµÄÔËÐÐÂÖÊý£¬Ã¿ÂÖ³ÖÐøµÄʱ¼äµÈ

@SetupºÍ@Benchmark: µÈͬÓÚJUnitÀïµÄ@BeforeClassºÍ@Test

ÓÉÓÚʹÓÃJMH¿ò¼Ü±àдµÄÐÔÄܲâÊÔ³ÌÐòÖ»ÄÜÒÔJar°üµÄÐÎʽÔËÐУ¨Mainº¯Êý¹Ì¶¨Îªorg.openjdk.jmh.Main£©£¬Ò»°ã»áÕë¶Ôÿ¸öJMH³ÌÐòµ¥¶Àά»¤Ò»¸öÏîÄ¿¡£Èç¹ûÊÇMavenÏîÄ¿£¬¿ÉÒÔʹÓùٷ½ÌṩµÄjmh-java-benchmark-archetype£¬Èç¹ûÊÇGradleÏîÄ¿£¬¿ÉÒÔʹÓÃjmh-gradle-plugin²å¼þ¡£

4 С½á

ÒÔÉϾÍÊÇÎÒ¶ÔÐÔÄܲâÊÔµÄһЩ¼û½â£¬»¶Ó­Äãµ½ÎÒµÄÁôÑÔ°å·ÖÏí£¬ºÍ´ó¼ÒÒ»Æð¹ý¹ýÕС£ÏÂһƪÎÒ½«ÁÄÒ»ÏÂWebµÄ×Ô¶¯»¯²âÊÔ£¬¾´ÇëÆÚ´ý¡£

   
2937 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

΢·þÎñ²âÊÔÖ®µ¥Ôª²âÊÔ
һƪͼÎÄ´øÄãÁ˽â°×ºÐ²âÊÔÓÃÀýÉè¼Æ·½·¨
È«ÃæµÄÖÊÁ¿±£ÕÏÌåϵ֮»Ø¹é²âÊÔ²ßÂÔ
È˹¤ÖÇÄÜ×Ô¶¯»¯²âÊÔ̽Ë÷
Ïà¹ØÎĵµ

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
jenkins³ÖÐø¼¯³É²âÊÔ
ÐÔÄܲâÊÔÕï¶Ï·ÖÎöÓëÓÅ»¯
ÐÔÄܲâÊÔʵÀý
Ïà¹Ø¿Î³Ì

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù