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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
¹ØÓÚ½Ó¿Ú²âÊÔ¡ª¡ª×Ô¶¯»¯¿ò¼ÜµÄÉè¼ÆÓëʵÏÖ
 
×÷Õߣºãù¿Õ
  2853  次浏览      27
 2020-7-22
 
±à¼­ÍƼö:
±¾ÎÄÖ÷ÒªÃèÊö½Ó¿Ú×Ô¶¯»¯²âÊÔ¿ò¼ÜµÄ˼ÏëºÍÉè¼Æ£¬½áºÏ¸÷¹¤¾ßÌØÐÔʹÓÃPython+RequestsºÍHttpRunnerÁ½¸ö¿ò¼Ü·Ö±ðÀ´·ÖÎöÏÂÓÃÀýÖ´Ðйý³Ì £¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚsegmentfault £¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

Ò»¡¢×Ô¶¯»¯²âÊÔ¿ò¼Ü

Ôڴ󲿷ֲâÊÔÈËÔ±ÑÛÖÐÖ»ÒªÕ´ÉÏ¡°¿ò¼Ü¡±£¬¾Í¸Ð¾õ·Ç³£ÉñÃØ£¬·Ç³£Ò£Ô¶¡£´ó¼ÒÖ®ËùÒÔ¾õµÃ¸´ÔÓ£¬ÊÇÒòΪÂ䵨ÔËÓÃÆðÀ´ºÜ¸´ÔÓ£»Ã¿¸ö¹«Ë¾£¬Ã¿¸öÒµÎñ¼°²úÆ·ÏßµÄÒµÎñÁ÷³Ì¶¼²»Ò»Ñù£¬ËùÒԾ͵¼ÖÂÁË¡°×Ô¶¯»¯²âÊÔ¿ò¼Ü¡±È¥Íê³É×Ô¶¯»¯²âÊÔµÄʱºò²úÉúºÜ¶à²»Îȶ¨ÒòËØ£¬ÕâÑù¾ÍºÜÄѶ¨Î»³ÉÒ»¸ö¹Ì¶¨µÄ¿ò¼Ü¡£Æäʵ²»È»£¬ÕæÕýµÄ×Ô¶¯»¯²âÊÔ¿ò¼Ü²»ÊÇÒ»¸öģʽ£¬¶øÊÇÒ»ÖÖ˼ÏëºÍ·½·¨µÄ¼¯ºÏ£¬Í¨Ë׵Ľ²¾ÍÊÇÒ»¸ö¼Ü¹¹¡£

¶þ¡¢×Ô¶¯»¯²âÊÔ¿ò¼Ü˼Ïë

ΪÁ˸üºÃµÄÁ˽â×Ô¶¯»¯²âÊÔ¿ò¼Ü£¬ÎÒÃÇÏÈ´Ó×Ô¶¯»¯²âÊԵķ¢Õ¹Àú³Ì˵Æð£»Ò»°ã²âÊÔ¹¤×÷ÏÞÔÚ3ÄêÒÔÉÏÇÒ½Ó´¥¹ý×Ô¶¯»¯²âÊÔµÄÓ¦¸Ã¶ÔÒÔϼ¸ÖÖ×Ô¶¯»¯²âÊÔ¿ò¼Ü˼ÏëÓÐÒ»¶¨µÄÈÏÖª£º

Ä£¿é»¯Ë¼Ïë

¿â˼Ïë

Êý¾ÝÇý¶¯Ë¼Ïë

¹Ø¼ü×ÖÇý¶¯Ë¼Ïë

ÒÔÉϽö½öÊÇ´ú±íÁËÒ»ÖÖ×Ô¶¯»¯²âÊÔµÄ˼Ï룬²¢²»Äܶ¨ÒåΪ¿ò¼Ü¡£ÉÏÃæ½²µ½¿ò¼Ü=˼Ïë+·½·¨£¬ÓÚÊÇÑÝ»¯ÁËÒÔÏÂÎåÖÖ¿ò¼Ü£º

1¡¢Ä£¿é»¯²âÊԽű¾¿ò¼Ü

ÐèÒª´´½¨Ð¡¶ø¶ÀÁ¢µÄ¿ÉÒÔÃèÊöµÄÄ£¿é¡¢Æ¬¶ÏÒÔ¼°´ý²âÓ¦ÓóÌÐòµÄ½Å±¾¡£ÕâЩÊ÷×´½á¹¹µÄС½Å±¾×éºÏÆðÀ´£¬¾ÍÄÜ×é³ÉÄÜÓÃÓÚÌØ¶¨µÄ²âÊÔÓÃÀýµÄ½Å±¾¡£

2¡¢²âÊÔ¿â¿ò¼Ü

ÓëÄ£¿é»¯²âÊԽű¾¿ò¼ÜºÜÀàËÆ£¬²¢ÇÒ¾ßÓÐͬÑùµÄÓŵ㡣²»Í¬µÄÊDzâÊÔ¿â¿ò¼Ü°Ñ´ý²âÓ¦ÓóÌÐò·Ö½âΪ¹ý³ÌºÍº¯Êý¶ø²»Êǽű¾¡£Õâ¸ö¿ò¼ÜÐèÒª´´½¨ÃèÊöÄ£¿é¡¢Æ¬¶ÏÒÔ¼°´ý²âÓ¦ÓóÌÐòµÄ¹¦ÄÜ¿âÎļþ¡£

3¡¢¹Ø¼ü×ÖÇý¶¯»ò±íÇý¶¯µÄ²âÊÔ¿ò¼Ü

Õâ¸ö¿ò¼ÜÐèÒª¿ª·¢Êý¾Ý±íºÍ¹Ø¼ü×Ö¡£ÕâЩÊý¾Ý±íºÍ¹Ø¼ü×Ö¶ÀÁ¢ÓÚÖ´ÐÐËüÃǵIJâÊÔ×Ô¶¯»¯¹¤¾ß£¬²¢¿ÉÒÔÓÃÀ´¡°Çý¶¯£¢´ý²âÓ¦ÓóÌÐòºÍÊý¾ÝµÄ²âÊԽű¾´úÂ룬¹Ø¼üÓîÇý¶¯²âÊÔ¿´ÉÏÈ¥ÓëÊÖ¹¤²âÊÔÓÃÀýºÜÀàËÆ¡£ÔÚÒ»¸ö¹Ø¼ü×ÖÇý¶¯²âÊÔÖУ¬°Ñ´ý²âÓ¦ÓóÌÐòµÄ¹¦ÄܺÍÿ¸ö²âÊÔµÄÖ´Ðв½ÖèÒ»Æðдµ½Ò»¸ö±íÖС£

Õâ¸ö²âÊÔ¿ò¼Ü¿ÉÒÔͨ¹ýºÜÉٵĴúÂëÀ´²úÉú´óÁ¿µÄ²âÊÔÓÃÀý¡£Í¬ÑùµÄ´úÂëÔÚÓÃÊý¾Ý±íÀ´²úÉú¸÷¸ö²âÊÔÓÃÀýµÄͬʱ±»¸´Óá£

4¡¢Êý¾ÝÇý¶¯²âÊÔ¿ò¼Ü

ÔÚÕâÀï²âÊÔµÄÊäÈëºÍÊä³öÊý¾ÝÊÇ´ÓÊý¾ÝÎļþÖжÁÈ¡£¨Êý¾Ý³Ø£¬ODBCÔ´£¬CSVÎļþ£¬EXCELÎļþ£¬JsonÎļþ£¬YamlÎļþ£¬ADO¶ÔÏóµÈ£©²¢ÇÒͨ¹ý²¶»ñ¹¤¾ßÉú³É»òÕßÊÖ¹¤Éú³ÉµÄ´úÂë½Å±¾±»ÔØÈëµ½±äÁ¿ÖС£ÔÚÕâ¸ö¿ò¼ÜÖУ¬±äÁ¿²»½ö±»ÓÃÀ´´æ·ÅÊäÈëÖµ»¹±»ÓÃÀ´´æ·ÅÊä³öµÄÑéÖ¤Öµ¡£Õû¸ö³ÌÐòÖУ¬²âÊԽű¾À´¶ÁÈ¡ÊýÖµÎļþ£¬¼ÇÔØ²âÊÔ״̬ºÍÐÅÏ¢¡£ÕâÀàËÆÓÚ±íÇý¶¯²âÊÔ£¬ÔÚ±íÇý¶¯²â ÊÔÖУ¬ËüµÄ²âÊÔÓÃÀýÊǰüº¬ÔÚÊý¾ÝÎļþ¶ø²»ÊÇÔڽű¾ÖУ¬¶ÔÓÚÊý¾Ý¶øÑÔ£¬½Å±¾½ö½öÊÇÒ»¸ö¡°Çý¶¯Æ÷¡±£¬»òÕßÊÇÒ»¸ö´«ËÍ»ú¹¹¡£È»¶ø£¬Êý¾ÝÇý¶¯²âÊÔ²»Í¬ÓÚ±íÇý¶¯²âÊÔ£¬¾¡¹Üµ¼º½Êý¾Ý²¢²»°üº¬ÔÚ±í½á¹¹ÖС£ÔÚÊý¾ÝÇý¶¯²âÊÔÖУ¬Êý¾ÝÎļþÖÐÖ»°üº¬²âÊÔÊý¾Ý¡£

5¡¢»ìºÏ²âÊÔ×Ô¶¯»¯¿ò¼Ü

×îÆÕ±éµÄÖ´Ðпò¼ÜÊÇÉÏÃæ½éÉܵÄËùÓм¼ÊõµÄÒ»¸ö½áºÏ£¬È¡Æä³¤´¦£¬ÃÖ²¹Æä²»×ã¡£Õâ¸ö»ìºÏ²âÊÔ¿ò¼ÜÊÇÓɴ󲿷ֿò¼ÜËæ×Åʱ¼ä²¢¾­¹ýÈô¸ÉÏîÄ¿ÑÝ»¯¶øÀ´µÄ¡£

Èý¡¢½Ó¿Ú×Ô¶¯»¯²âÊÔ¿ò¼Ü²ßÂÔ

Éè¼Æ³öÀ´µÄ¿ò¼ÜÊÇÖ±½Ó¸ø²âÊÔÈËÔ±£¬¶øÇÒÆäËûµÄ²âÊÔÈËÔ±Ö»ÐèÒª¼òµ¥µÄÏòÀïÃæ²»¶ÏµÄ²¹³ä²âÊÔÓÃÀý¼´¿É£»ËùÒÔÎÒÃǵĿò¼ÜÉè¼Æ±ØÐëÈý¼ò»¯¼´²Ù×÷¼òµ¥£¬Î¬»¤¼òµ¥£¬À©Õ¹¼òµ¥¡£

Éè¼Æ¿ò¼ÜµÄͬʱһ¶¨Òª½áºÏÒµÎñÁ÷³Ì£¬¶øÇÒ²»½ö½ö¿¿¼¼ÊõʵÏÖ£¬Æäʵ¼¼ÊõʵÏÖ²»ÄÑ£¬Äѵã¶ÔÒµÎñÁ÷³ÌµÄÀí½âºÍ°ÑÎÕ¡£

Éè¼Æ¿ò¼ÜʱҪ½«»ù´¡µÄ·â×°³É¹«Óõģ¬È磺getÇëÇó¡¢postÇëÇóºÍ¶ÏÑÔ·â×°³Éͬ»ù´¡Í¨ÓÃÀà¡£

²âÊÔÓÃÀýÒªÓë´úÂë·ÖÏí£¬ÕâÑù±ãÓÚÓÃÀý¹ÜÀí£¬ËùÒÔ½«ÎÒÃÇÑ¡ÔñÉÏÃæµÄÊý¾ÝÇý¶¯Ë¼Ïë¡£

ËÄ¡¢½Ó¿Ú×Ô¶¯»¯²âÊÔ¿ò¼ÜÉè¼Æ

1¡¢½øÐнӿڿò¼ÜÉè¼ÆÇ°£¬ÎÒÃÇÏÈ¿´¿´µ±Ç°µÄһЩÖ÷Á÷½Ó¿Ú×Ô¶¯»¯¹¤¾ß¿ò¼Ü

 

2¡¢ÒÔÉϸ÷¹¤¾ßÌØÐÔ

 

¸ù¾ÝÒÔÉϵÄÌØÐԿɵÃÎÒÃÇÓÅÏÈ¿¼ÂÇPython+RequestsºÍHttpRunner£»ÏÂÃæÎÒÃǸù¾ÝÆäÁ½¸ö¿ò¼Ü·Ö±ðÀ´·ÖÎöÏÂÓÃÀýÖ´Ðйý³Ì¡£

3¡¢ÓÃÀýÖ´ÐнâÎö

PythonµÄRequests¿âÕë¶ÔËùÓеÄHTTPÇëÇó·½·¨£¬²ÉÓõÄÊÇͳһµÄ½Ó¿Ú

requests.request(method, url, **kwargs)

ÆäÖУ¬kwargs¿ÉÒÔ±£»¤HTTPÇëÇóËùÓпÉÄÜÓõ½µÄÐÅÏ¢£¬ÀýÈ磺headers¡¢cookies¡¢params¡¢data¡¢authµÈ¡£ËùÒÔ£¬Ö»Òª×ñÑ­RequestsµÄ²ÎÊý¹æ·¶£¬ÔÚ½Ó¿Ú²âÊÔÓÃÀýÖи´ÓÃRequests²ÎÊýµÄ¸ÅÄî¼´¿É¡£¶øHttpRunner´¦ÀíÂß¼­ºÜ¼òµ¥£¬Ö±½Ó¶ÁÈ¡²âÊÔÓÃÀýÖеĸ÷Ïî²ÎÊý£¬´«µÝ¸øRequests·¢ÆðÇëÇó¡£

1£©Requests½Ó¿ÚÇëÇóʾÀý

def test_login(self):
url = "www.xxx.com/api/users/login"
data = {
"name": "user1",
"password": "123456"
}
resp = requests.post(url, json=data)
self.assertEqual(200, resp.status_code)
self.assertEqual(True, resp.json()["success"])

ÔÚ¸ÃÓÃÀýÖУ¬ÊµÏÖÁËHTTP POSTÇëÇó£¬È»ºó¶ÔÏìÓ¦½á¹û½øÐÐÅжϣ¬¼ì²éÏìÓ¦codeµÈÊÇ·ñ·ûºÏÔ¤ÆÚ¡£

ÕâÑùµÄÓÃÀýÔÚʵ¼ÊÏîÄ¿ÖÐ»á´æÔÚÁ½¸öÎÊÌ⣺

ÓÃÀýģʽ»ù±¾¹Ì¶¨£¬»á´æÔÚ´óÁ¿ÏàËÆ»òÖØ¸´µÄÓÃÀý£¬ÓÃÀýά»¤ÓкܴóÎÊÌâ

ÓÃÀýÓëÖ´ÐдúÂë²»·ÖÀ룬²ÎÊýÊý¾ÝҲδ·ÖÀ룬ͬÑù²»Ò×ά»¤

2£©HttpRunnerʹÓÃjson/yaml¸ñʽ´¦Àí²âÊÔÓÃÀý£¬·ÖÀëºóµÄÓÃÀýÃèÊöÈçÏÂ

{
"name": "test login",
"request": {
"url": "www.xxx.com/api/users/login",
"method": "POST",
"headers": {
"content-type": "application/json"
},
"json": {
"name": "user1",
"password": "123456"
}
},
"response": {
"status_code": 200,
"headers": {
"Content-Type": "application/json"
},
"body": {
"success": true,
"msg": "user login successfully."
}
}
}

3£©HttpRunnerÓÃÀýÖ´ÐÐÒýÇæ

def run_testcase(testcase):
req_kwargs = testcase['request']try:
url = req_kwargs.pop('url')
method = req_kwargs.pop('method')
except KeyError:
raise exception.ParamsError("Params Error")
resp_obj = requests.request(url=url, method=method, **req_kwargs)
diff_content = utils.diff_response(resp_obj, testcase['response'])
success = False if diff_content else True
return success, diff_content

4£©´Ó²âÊÔÓÃÀýÖлñÈ¡HTTP½Ó¿ÚÇëÇó²ÎÊý£¬testcase['request']

{
"url": "www.xxx.com/api/users/login",
"method": "POST",
"headers": {
"content-type": "application/json"
},
"json": {
"name": "user1",
"password": "123456"
}
}

5£©·¢ÆðHttpÇëÇó

requests.request(url=url, method=method, **req_kwargs)

6£©¼ì²â²âÊÔ½á¹û£¬¼´¶ÏÑÔ

utils.diff_response(resp_obj, testcase['response'])

Îå¡¢½Ó¿Ú×Ô¶¯»¯²âÊÔ¿ò¼ÜÂ䵨

¸ù¾Ý¼òµ¥Ò×ÓÃÒ×ά»¤Ô­ÔòÎÒÃÇʹÓÃHttpRunner¹¤¾ßÉè¼Æ¿ò¼Ü¡£

1¡¢HttpRunner¼ò½é

Ö÷ÒªÌØÐÔ£º

¼¯³ÉÁËRequestsµÄÈ«²¿ÌØÐÔ£¬Âú×ã¶Ôhttp¡¢httpsµÄ¸÷ÖÖ²âÊÔÐèÇó

²âÊÔÓÃÀýÓë´úÂë·ÖÀ룬²ÉÓÃYAML/JSONµÄÐÎʽÃèÊö²âÊÔ³¡¾°£¬±£ÕϲâÊÔÓÃÀý¾ß±¸¿Éά»¤ÐÔ

²âÊÔÓÃÀýÖ§³Ö²ÎÊý»¯ºÍÊý¾ÝÇý¶¯»úÖÆ

»ùÓÚ HAR ʵÏÖ½Ó¿ÚÂ¼ÖÆºÍÓÃÀýÉú³É¹¦ÄÜ

½áºÏ Locust ¿ò¼Ü£¬ÎÞÐè¶îÍâµÄ¹¤×÷¼´¿ÉʵÏÖ·Ö²¼Ê½ÐÔÄܲâÊÔ

Ö´Ðз½Ê½²ÉÓà CLI µ÷Ó㬿ÉÓë Jenkins µÈ³ÖÐø¼¯³É¹¤¾ßÍêÃÀ½áºÏ

²âÊÔ½á¹ûͳ¼Æ±¨¸æ¼ò½àÇåÎú£¬¸½´øÏ꾡ͳ¼ÆÐÅÏ¢ºÍÈÕÖ¾¼Ç¼

¾ßÓпÉÀ©Õ¹ÐÔ£¬±ãÓÚÀ©Õ¹ÊµÏÖ Web ƽ̨»¯

2¡¢»·¾³×¼±¸

°²×°HomeBrew£¨MacOsÈí¼þ°ü¹ÜÀí¹¤¾ß£¬ÀàËÆapt-get¡¢yum£©

ÖÕ¶ËÖ´ÐÐ

/usr/bin/ruby -e "$(curl -fsSL
https://raw.githubusercontent.com/
Homebrew/install/master/install)"

°²×°pyenv²¢ÅäÖû·¾³±äÁ¿£ºpython°æ±¾¹ÜÀíÆ÷£¬¿Éͬʱ¹ÜÀí¶à¸öPython°æ±¾£¨HttpRunnerÊÇ»ùÓÚPython¿ª·¢£¬µ«ÊÇÖ§³ÖPython3.6.0ÒÔÉÏ£©

brew install pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
exec $SHELL -l

°²×°Python3.6

pyenv install --list //²é¿´¿É°²×°µÄPython°æ±¾
pyenv install 3.6.0 //°²×°3.6.0°æ±¾
pyenv rehash //¸üÐÂpyenv
pyenv versions //²é¿´ÒѾ­°²×°µÄpython°æ±¾£¬´ø*ºÅµÄÊǵ±Ç°Ê¹Óõİ汾

Ñ¡ÔñPyhton

pyenv global 3.6.0 //ÉèÖÃÈ«¾Ö°æ±¾£¬¼´µ±Ç°ÏµÍ³Ê¹Óõİ汾½«Çл»Îª3.6.0

°²×°HttpRunner²¢Ð£Ñé

pip install httprunner
//ÔËÐÐÈçÏÂÃüÁÈôÕý³£ÏÔʾ°æ±¾ºÅ£¬Ôò˵Ã÷httprunner°²×°³É¹¦£º
hrun -V
0.9.8

ÖÁ´ËHttpRunnerÒѴÍê³É

3¡¢ÓÃÀý¹ÜÀí

ÔÚHttpRunnerÖУ¬²âÊÔÓÃÀýÒýÇæ×î´óµÄÌØÉ«¾ÍÊÇÖ§³ÖYaml/Json¸ñʽµÄÓÃÀýÃèÊöÐÎʽ£»

²ÉÓÃYAML/JSON¸ñʽ±àдά»¤²âÊÔÓÃÀý£¬ÓÅÊÆ»¹ÊǺÜÃ÷ÏԵģº

Ïà±ÈÓÚ±í¸ñÐÎʽ£¬¾ßÓиü¼ÓÇ¿´óµÄÁé»îÐԺ͸ü·á¸»µÄÐÅÏ¢³ÐÔØÄÜÁ¦£»

Ïà±ÈÓÚ´úÂëÐÎʽ£¬¼õÉÙÁ˲»±ØÒªµÄ±à³ÌÓïÑÔÓï·¨ÖØ¸´£¬²¢×î´ó»¯µØÍ³Ò»ÁËÓÃÀýÃèÊöÐÎʽ£¬Ìá¸ßÁËÓÃÀýµÄ¿Éά»¤ÐÔ¡£

Yaml¸ñʽ

 

Json¸ñʽ

 

ÒÔÏÂÒÔÊýÀ½--ÊýÆÜƽ̨2.XÖеÄÑз¢Æ½Ì¨ÎªÀý£¨²ÉÈ¡Json¸ñʽ£©

³¡¾°£ºÏîÄ¿¿Õ¼äºó£¬ÐèÒª¿ìËÙÖ§³Ö´´½¨DemoʾÀý£¬¼´×Ô¶¯´´½¨¸÷ÖÖĿ¼ºÍÈÎÎñ¡£

1£©È·¶¨ÒµÎñÁ÷³ÌËùʹÓõ½µÄ½Ó¿Ú²¢Í¨¹ýPostman»òJmeterµ÷ÊÔͨ¹ý¼°·ÖºÃÀà

²éѯÀࣨGetÇëÇ󣩽ӿڣº²éѯÈÎÎñĿ¼¡¢²éѯ×ÊÔ´×é¡¢²éѯ¹¤×÷Á÷µÈ

ÐÂÔöÀࣨPostÇëÇ󣩽ӿڣºÐ½¨Ä¿Â¼¡¢Ð½¨ÈÎÎñµÈ

2£©¸ù¾ÝÒµÎñÁ÷³ÌÈ·¶¨½Ó¿Ú˳Ðò

ÈçÒªÔÚij¸öĿ¼ÏÂн¨ÈÎÎñ£ºÔòÏÈÒªµ÷ÓÃн¨Ä¿Â¼½Ó¿ÚÔÙµ÷ÓÃ×÷½¨ÈÎÎñ½Ó¿Ú

3£©ÏòJsonÎļþÀï°´ÕÕ¹æÔòÌîд½Ó¿ÚÏà¹ØÐÅÏ¢

½Ó¿ÚBase_Url

½Ó¿Ú·¾¶

½Ó¿ÚÇëÇó·½Ê½

½Ó¿ÚÇëÇó²ÎÊý

½Ó¿Ú¶ÏÑÔ

½Ó¿Ú·µ»Ø²ÎÊý£¨¹ØÁª½Ó¿Úʱ»áÓõ½ÉÏÒ»½Ó¿Ú·µ»ØµÄ²ÎÊý£©

ÒÔÏÂÊDz¿·ÖÓÃÀýʾÀý

4£©ÓÃÀýÌîдÍê³Éºó£¬Ö´ÐÐÓÃÀýÎļþ£¬ÈçJsonÎļþΪtask.json

hrun task.json

5£©²é¿´ÔËÐнá¹û

ÔÚ´ËĿ¼Ï»á×Ô¶¯Éú³ÉÒ»¸öreportsÎļþ£¬½øÈë¸ÃÎļþ¼Ð¿É¿´µ½Éú³É´øÊ±¼äµÄhtml£¨Ö´ÐÐÒ»´Î¾Í»áÉú³ÉÒ»¸öHtmlÎļþ£©

£©

 

´ò¿ª´ËHtml²é¿´

 

È«²¿Í¨¹ý

 

²¿·Öͨ¹ý

µã»÷Log£¬¿É²é¿´¾ßÌåÇëÇóÐÅÏ¢ºÍ·µ»ØÐÅÏ¢

µã»÷trackback¿É²é¿´¶¨Î»´íÎóÐÅÏ¢

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

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

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

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
´óÊý¾Ýƽ̨²âÊÔ
΢·þÎñ¼Ü¹¹ÏµIJâÊÔÖ®µÀ
´ÓÁã¿ªÊ¼ÕÆÎÕ΢·þÎñÈí¼þ²âÊÔ
ÈçºÎ½øÐвâÊÔÐèÇó·ÖÎö£º´Ó½ÓÊÕÐèÇóµ½ÓÃÀýÉè¼Æ
python_selenium×Ô¶¯»¯²âÊÔ¿ò¼Ü
×îпγÌ
²âÊÔÐèÇó·ÖÎöÓë²âÊÔÓÃÀýÉè¼Æ
ÐÔÄܲâÊÔ·½·¨Óë¼¼Êõ
×Ô¶¯»¯²âÊÔ¿ò¼ÜÉè¼Æ¸ß¼¶Êµ¼ù
½Ó¿Ú×Ô¶¯»¯²âÊÔ·½·¨Ó빤¾ß
Èí¼þ²âÊÔ·½·¨Óëʵ¼ù(¹á´©°¸Àý)
³É¹¦°¸Àý
ij֧¸¶ÆóÒµ µ¥Ôª²âÊÔÓëÖØ¹¹Åàѵ
±±¾© Óû§ÌåÑé¡¢¿ÉÓÃÐÔ²âÊÔÓëÆÀ¹À
ij¾ü¹¤Ñо¿µ¥Î» ×Ô¶¯»¯²âÊÔ·½·¨¡¢°¸ÀýÓ빤¾ß
ÖªÃûÏû·Ñ½ðÈÚ¹«Ë¾ ̽Ë÷ÐÔ²âÊÔÓë²âÊÔ·ÖÎö
±±¾© º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Èí¼þ²âÊԼܹ¹Ê¦