HTTP½Ó¿Ú²âÊÔ¹¤¾ß£¬¼òµ¥½²¾ÍÊǸù¾Ý²âÊÔÐèÇó£¬ÏòËù²âWeb Server·¢Æð¸÷ÖÖ¸÷ÑùµÄRequestÇëÇó£¬ÍêÕûµÄ»ñÈ¡Web Server·µ»ØResponseÏìÓ¦¡£²¢Äܹ»±ã½ÝµØ¶ÔResponseÏìÓ¦µÄ¸÷¸öÄÚÈݽøÐÐÑéÖ¤¡£
ÄÇôweb·þÎñÆ÷²âÊÔ¹¤¾ßGulu¡ª¡ªHTTP½Ó¿Ú²âÊÔ¹¤¾ßÊÇÈçºÎ×öµ½µÄÄØ£¿
±¾Æª²©ÎĽ«½áºÏ´úÂëʵÏÖ¼°UMLͼʾ´ÓÇëÇóÉèÖã¬ÏìÓ¦±£´æ£¬ÏìÓ¦ÑéÖ¤£¬3¸ö²¿·ÖÕ¹¿ª½éÉÜ¡£
¡¾×÷Õß¡¿¹«Ô¶/³ÂÕð£¨gongyuan.cz$taobao.com/ 100continue$sina.com£©
¡¾Ô´ÂëÏÂÔØ¡¿
githubµØÖ·£ºhttps://github.com/100Continue/Gulu--web-server-test-tools
¡¾À©Õ¹ÔĶÁ¡¿
web·þÎñÆ÷²âÊÔ¹¤¾ßGulu¡ª¡ª¼ò½é
¡¾¹¦ÄܽéÉÜ¡¿
1. ÇëÇóÉèÖù¦ÄÜ£º
Éè¼ÆÒªÇó£º
a. ÓÉÓÚ²âÊÔÐèÇóǧ²îÍò±ð£¬Òò´ËÐèÒªÖ§³Ö¸÷ÖÖÇëÇó¹¹½¨ÐèÇó£¬Èç×ÔÓɶ¨ÖÆMethod¡¢Header£»ÇëÇóBodyÔÊÐí¸÷ÖÖÀàÐÍ¡ª¡ªform±íµ¥ÀàÐ͵ÄKey-Value¶Ô£»MultiPart·Ö¶ÎÉÏ´«µÄbodyÀàÐÍ£»ByteArrayÀàÐÍ¡¢StringÀàÐÍ¡¢InputStreamÀàÐÍ¡¢ÉÏ´«Êý¾ÝÀ´×Ô±¾µØÎļþµÈ£»Ö§³Ö°ó¶¨ÐéÄâIPµÄÇëÇóµÈµÈÐèÇó¡£
b. Ö§³Ö´úÂë±àд±ã½ÝµÄÒªÇó£»
¾ßÌåʵÏÖ£º
½áºÏÉÏÊöÉè¼ÆÒªÇó¼°±£ÕÏ¿ÉÀ©Õ¹ÐÔ£¬¿Éά»¤ÐÔµÄÒªÇó¡£²ÉÓòßÂÔģʽ¡ª¡ª½«Êý¾ÝÓëËã·¨·Ö¿ªµÄ˼·ʵÏÖ¡£ÏêÇé²Î¼ûÏ·ùUMLͼ£º
Request×÷ΪÊý¾Ý±£´æÀ࣬¸´ÔÓ±£´æRequestÇëÇóËùÉæ¼°µ½µÄËùÓÐÊý¾ÝÐÅÏ¢£»
×¢£º´Ó´úÂë±àд±ã½Ý½Ç¶È³ö·¢£¬HeaderÓëForm±íµ¥bodyÉèÖÃÖ§³ÖStringÀàÐÍ´«È룬ÈçHeaderÄ£°å£ºa:b$c:d$cookie:tt=xx;cc=pp£»±íʾHeaderΪ£ºa:b c£ºd cookie:tt=xx;cc=pp; Form±íµ¥BodyÄ£¿é£ºa=b$c=d$e=f£»±íʾForm±íµ¥BodyΪ£ºa=b c=d e=f£»
RequestExecution×÷Ϊ¸÷ÖÖÇëÇóË㷨ʵÏÖÀ࣬×éºÏRequestµÄ¸÷ÖÖÊý¾ÝÏòWeb Server·¢ÆðÇëÇó£¬Ö§³Ö±¾µØIPµØÖ·¼°°ó¶¨ÐéÄâIPµØÖ·µÄÇëÇó·¢Æð¡£
×¢£º´Ó´úÂë±àд±ã½Ý½Ç¶È³ö·¢£¬¶¨Òå¶àÖÖdoRequest¡¢doRequestInIpBinding½Ó¿Ú£¬´Ó¶øʵÏÖÒ»ÐвâÊÔ´úÂë·¢Æð²âÊÔµÄÄ¿µÄ£»
GetRequest¡¢DeleteRequest¡¢PutRequest¡¢PostRequest×÷Ϊ¾ßÌåÇëÇóÀàÐͶÔÏó£¬Í¨¹ý¸÷ÖÖµÄget*Method½Ó¿ÚʵÏÖ²»Í¬ÇëÇóÀàÐ͵ÄÇø·Ö£»
×¢£ºPutRequestÓëPostRequestÐèÒªÉèÖÃBody£¬Èç¹ûδÉèÖÃBody½«Å׳öException±¨´í£»
BodyEntity½Ó¿Ú¶¨ÒåÁ˸÷ÖÖBodyÀàÐÍËùÐèÒªÖ§³ÖµÄ¹«¹²½Ó¿Ú£¬RequestÀàµÄBodyÊý¾ÝÖ±½Ó²ÉÓøýӿÚÀàÐͽøÐж¨Ò壬´Ó¶ø²»±ØÔÙÇø·Ö¸÷ÖÖ²»Í¬µÄBodyÀàÐÍ¡£
ByteArrayBodyEntity¡¢FileBodyEntity¡¢InputStreamBodyEntity¡¢StringBodyEntity¡¢MultipartBodyEntity×÷Ϊ¾ßÌåBodyÀàÐ͵ÄʵÏÖÀà¡£
´úÂëÓ¦Óãº
-
- new GetRequest().doRequest(url, headers);
-
-
- Response response = new PostRequest().doRequest(url, headers, formBody);
-
-
- FileBodyEntity fileBody = new FileBodyEntity(filePath, null);
- Response response = new PutRequest().doRequest(url, headers, fileBody)
-
-
- StringBodyEntity stringBody = new StringBodyEntity("string body content", null, null);
-
- FileBodyEntity fileBody = new FileBodyEntity(filePath, null);
-
- ByteArrayBodyEntity byteArrayBody = new ByteArrayBodyEntity("byte array body content".getBytes(), null);
-
- InputStream inputStream = new FileInputStream(new File(filePath));
- InputStreamBodyEntity inputStreamBody = new InputStreamBodyEntity(inputStream, -2, null);
-
- MultipartBodyEntity multipartBody = new MultipartBodyEntity(stringBody, fileBody);
-
- new PostRequest().doRequest(url, multipartBody);
2. ÏìÓ¦±£´æ¹¦ÄÜ£º
Éè¼ÆÒªÇó£º
a. Äܹ»ÍêÕûµÄ±£´æWeb Server·µ»ØµÄËùÓÐÊý¾Ý£»
b. Äܹ»**ã½ÝµÄÈ¡µÃËùÐèÒªResponse¸÷¸ö²¿·ÖµÄÊý¾Ý£»
¾ßÌåʵÏÖ£º
»ùÓÚÉÏÊöÉè¼ÆÒªÇ󣬽«Web Server·µ»ØµÄËùÓÐÊý¾Ý±£´æµ½ResponseÀàÖУ¬²¢¶ÔÍâÌṩ²éѯ½Ó¿Ú£¬¾ßÌåʵÏÖ¼ûÏÂͼ£º
Response×÷ΪWeb Server·µ»ØµÄÊý¾Ý±£´æÀ࣬½«×´Ì¬Â롢״̬Ìáʾ¡¢HeaderÊý¾ÝµÈ±£´æÓÚ¶ÔÏóÖУ¬¿¼Âǵ½ÏìӦͷÖпÉÄܳöÏÖδ°üº¬Content-length»òBody³¤¶È³¬¹ý×î´óIntegerÕâÁ½ÖÖÇé¿ö£¬Òò´Ë½«Body±£´æ³É±¾µØÎļþ£¬¶ÔÍâÌṩgetResponseBodyAsStream½Ó¿Ú½øÐзÃÎÊ¡£
×¢£º³ýÁËÏìӦͷδ°üº¬Content-length»òBody³¤¶È³¬¹ý×î´óIntegerÕâÁ½ÖÖÇé¿öÍ⣬ÏìÓ¦Body¾ù¿ÉÒÔͨ¹ýgetResponseBodyAsString½Ó¿Ú½øÐзÃÎÊ¡£
´úÂëÓ¦Óãº
-
- Response response = new PostRequest().doRequest(url, headers, formBody);
- int statusCode = response.getStatusCode();
-
-
- Header[] headers = new GetRequest().doRequest(url).getHeaders();
-
-
- String body = new GetRequest().doRequest(url).getResponseBodyAsString();
3. ÏìÓ¦ÑéÖ¤¹¦ÄÜ£º
Éè¼ÆÒªÇó£º
a. Ö§³ÖËùÓÐResponse×é³É²¿·ÖµÄÆ¥ÅäÑéÖ¤£¬²¢ÇÒÖ§³ÖÈ«Æ¥Åä¼°°üº¬Æ¥ÅäÁ½ÖÖ·½Ê½£»
b. Response BodyÑéÖ¤¾¡¿ÉÄܶàµÄÖ§³Ö¸÷ÖÖÀàÐÍ£¬ÈçStringÀàÐÍ¡¢Json¶ÔÏó¡¢±¾µØÎļþ¶Ô±ÈÑéÖ¤µÈ£»
c. ´úÂë±àд±ã½Ý£¬ÀàËÆJunitµÄAssertµÄʹÓÃÏ°¹ß¼°Ñé֤ʧ°ÜºóÅ׳öException¼°Ê§°ÜÌáʾÐÅÏ¢£»
¾ßÌåʵÏÖ£º
»ùÓÚÉÏÊöÉè¼ÆÐèÇó£¬ÏìÓ¦ÑéÖ¤¹¦ÄÜÉè¼ÆÓÐÒÔÏÂ3¸öÌص㣺
a. ΪÁ˾ßÓÐÀàËÆJunitµÄAssertµÄʹÓÃÏ°¹ß¡¢ÑéÖ¤Àà¾ùΪStatic¾²Ì¬À࣬Óû§¿ÉÖ±½ÓʹÓÃÀàÐ͵÷ÓÃÑéÖ¤½Ó¿Ú½øÐвâÊÔ£»²¢ÇÒÔÚTools¹¤¾ßÀàÖÐʵÏÖComparisonFailureHandleºÍFailedHandle£¬Ê¹µÃÑéÖ¤½á¹û¼°´íÎóÐÅÏ¢µÄÕ¹ÏÖÓëJunitµÄAssertÏàËÆ£¬·½±ãBug¶¨Î»ºÍµ÷ÊÔ£»
b. ½«³ýBodyÍâµÄËùÓÐResponse×é³É²¿·ÖµÄÆ¥ÅäÑéÖ¤µ¥¶À·â×°ÔÚAssertBehaviorÖбãÓÚͳһά»¤ºÍÀ©Õ¹£»
c. ¼Ì³ÐÓÚAssertBehaviorÀà·Ö±ðʵÏÖÁË3ÖÖ²»Í¬ÀàÐ͵ÄResponse BodyÑéÖ¤À࣬ÈçAssertStringBodyרÃÅÓ¦ÓÃÓÚResponse BodyÊÇStringÀàÐ͵ÄÑéÖ¤£»AssertJsonBodyרÃÅÓ¦ÓÃÓÚResponse BodyÊÇJson¶ÔÏóµÄÑéÖ¤£»AssertFileBodyרÃÅÓ¦ÓÃÓÚResponse BodyÐèÒªÓë±¾µØÎļþ½øÐжԱÈÑéÖ¤µÄ²âÊÔ£»
×¢£ºHeadersÑéÖ¤½öÑéÖ¤Óû§Ô¤ÆÚµÄKey Value£¬¶ÔResponse°üº¬µÄÆäËûHeader²»×öÑéÖ¤´¦Àí¡£²¢ÇÒÏàÓ¦µÄHeader ValueÑé֤Ϊ°üº¬Æ¥ÅäÑéÖ¤£»
ÏêÇé²Î¼ûÏÂͼ£º
´úÂëÓ¦Óãº
-
- Response response = new PostRequest().doRequest(url, headers, formBody);
- AssertStringBody.assertStatusCode(response, 200);
- AssertJsonBody.assertStatusCode(response, 201);
-
-
- Response response = new PostRequest().doRequest(url, headers, formBody);
- AssertStringBody.assertHeaders (response, expectHeadersStr);
- AssertJsonBody. assertHeaders (response, expectHeaders);
-
-
- Response response = new PostRequest().doRequest(url, headers, formBody);
- AssertStringBody.assertBodyEQ (response, expectResponseBody);
- AssertStringBody. assertBody (response, expectResponseBody);
-
-
- Response response = new PostRequest().doRequest(url, headers, formBody);
- AssertJsonBody.assertBody (response, expectResponseJsonBodyStr);
- AssertJsonBody. assertBody (response, expectResponseJsonBodyStr);
-
-
- Response response = new PostRequest().doRequest(url, headers, formBody);
- AssertFileBody.assertBody (response, localFilePath, offset, size);
- AssertFileBody. assertBody (response, localFilePath);
-
-
- Response response1 = new PostRequest().doRequest(url, headers, formBody);
- Response response2 = new PostRequest().doRequest(url, headers, formBody);
- AssertStringBody.assertResponse (response1, response2);
- AssertJsonBody.assertResponse (response1, response2);
OK£¬web·þÎñÆ÷²âÊÔ¹¤¾ßGulu¡ª¡ªHTTP½Ó¿Ú²âÊÔ¹¤¾ß ½éÉÜÍê±Ï£¬±§Ç¸ÍÏÁËÕâô¾Ã²ÅÍê³ÉÎĵµ×«Ð´¡£