1.pythonè½ç¨twilioå
2.Python - pytest
3.python 随机生成号码
pythonè½ç¨twilioå
Twilio ä¸æ¯å¯ä¸çSMS ç½å ³æå¡ãå¦æä½ ä¸å欢使ç¨Twilioï¼å¯ä»¥å¨çº¿æç´¢free sms gatewayãPython sms apiï¼çè³twilio alternativesï¼å¯»æ¾æ¿ä»£æå¡ãæç¨çæ¬python3.6.1.å®è£ è¿ä¸ªæ¨¡åï¼å¨cmdä¸ï¼è¾å ¥pip install twilioå®è£ twilioã
1.访é®twilioå¡«å注å表åã注åäºæ°è´¦æ·åï¼ä½ éè¦éªè¯ä¸ä¸ªææº
å·ç ï¼çä¿¡å°åç»è¯¥å·ç ã
2.Twilio æä¾çè¯ç¨è´¦æ·å æ¬ä¸ä¸ªçµè¯å·ç ï¼å®å°ä½ä¸ºçä¿¡çåéè ãä½ å°éè¦
两个信æ¯ï¼ä½ çè´¦æ·SID åAUTHï¼è®¤è¯ï¼æ å¿ãå¨ç»å½Twilio è´¦æ·æ¶ï¼å¯ä»¥å¨
Dashboard 页é¢ä¸æ¾å°è¿äºä¿¡æ¯ãä»Python ç¨åºç»å½æ¶ï¼è¿äºå¼å°ä½ä¸ºä½ çTwilio
ç¨æ·ååå¯ç ã
3.æ°å»ºtextmyself.py.è¾å ¥å¦ä¸ä»£ç ï¼
from twilio.rest import Client
account = 'XXXXXXXXXXXXXXXXXXXX'
token = 'YYYYYYYYYYYYYY'
myNumber='+XXXXXXXXXXXXX'
twilioNumber='+XXXXXXXXXX'
def textmyself(message):
client = Client(account,手机n手 token)
message = client.messages.create(to=myNumber, from_=twilioNumber,
body=message)
å ¶ä¸è¦å°èªå·±çå·ç æ¿æ¢æ代ç ä¸çxxxxx,yyyy.
以åå°±å¯ä»¥å¨pythonä¸è°ç¨ textmyselfå½æ°ï¼æ¯å¦ï¼
import textmyselftextmyself.textmyself('ååï¼ææ¥å')
å¦æè¦ç»å«äººåçä¿¡ï¼éè¦æ¿æ¢æâmyNumberâï¼æ³¨æï¼è¿ä¸ªå·ç ä¸å®æ¯å¨twilioå®ç½ä¸éªè¯è¿çã
Python - pytest
ç®å½pytestæ¯Pythonçåå æµè¯æ¡æ¶ï¼åèªå¸¦çunittestæ¡æ¶ç±»ä¼¼ï¼ä½pytestæ¡æ¶ä½¿ç¨èµ·æ¥æ´ç®æ´ï¼æçæ´é«ã
pytestç¹ç¹
å®è£
æµè¯
å¨æµè¯ä¹åè¦åçåå¤
æçæ¼ç¤ºèæ¬å¤äºè¿æ ·ä¸ä¸ªçç®å½ä¸ï¼
踩åï¼ä½ å建çpytestèæ¬å称ä¸ä¸å 许å«æ . ï¼æ¯å¦ 1.ç®åä¸æ.py ï¼è¿æ ·ä¼æ¥éãå½ç¶ï¼å¯ä»¥è¿ä¹å 1-ç®åä¸æ.py
demo1.py ï¼
ä¸ä¾ä¸ï¼å½æ们å¨æ§è¡ï¼å°±åPython解éå¨æ§è¡æ®éçPythonèæ¬ä¸æ ·ï¼æµè¯ç¨ä¾çæ¶åï¼ pytest.main(["-s", "demo1.py"]) ä¸çä¼ åéè¦æ¯ä¸ä¸ªå ç»æè å表ï¼æçpytestæ¯5.2.2çæ¬ï¼ï¼ä¹åççæ¬å¯è½éè¦è¿ä¹è°ç¨ pytest.main("-s demo1.py") ï¼ä¼ çåæ°æ¯strçå½¢å¼ï¼è³äºä½ 使ç¨åªç§ï¼åå³äºæ¥ä¸æ¥éï¼
éå°ä¸è¿°æ¥éï¼å°±æ¯åæ°éè¦ä¸ä¸ªå表æè å ç»çå½¢å¼ï¼èæ们使ç¨çæ¯strå½¢å¼ã
ä¸è¿°ä»£ç æ£ç¡®çæ§è¡ç»ææ¯è¿æ ·çï¼
大è´çä¿¡æ¯å°±æ¯åè¯æ们:
pytest.main(["-s", "demo1.py"])åæ°è¯´æ
é¤äºä¸è¿°çå½æ°è¿ç§åæ³ï¼ä¹å¯ä»¥æç¨ä¾ç±»çåæ³ï¼
ç¨æ³è·unittestå·®ä¸å¤ï¼ç±»åè¦ä»¥ Test å¼å¤´ï¼å¹¶ä¸å ¶ä¸çç¨ä¾æ¹æ³ä¹è¦ä»¥ test å¼å¤´ï¼ç¶åæ§è¡ä¹ä¸æ ·ã
æ§è¡ç»æï¼
é£ä¹ï¼ä½ è¿ä¸ªæ¶åå¯è½ä¼é®ï¼æè®°å¾unittestä¸æsetupåteardownçæ¹æ³ï¼é¾épytestä¸æ²¡æåï¼ä½ æä¹æé½ä¸æï¼ç¨³ä½ï¼çæ¡æ¯æçã
æ¥ä¸æ¥ï¼æ们æ¥ç 究ä¸ä¸pytestä¸çsetupåteardownçç¨æ³ã
æ们ç¥éï¼å¨unittestä¸ï¼setupåteardownå¯ä»¥å¨æ¯ä¸ªç¨ä¾ååæ§è¡ï¼ä¹å¯ä»¥å¨ææçç¨ä¾éæ§è¡ååæ§è¡ãé£ä¹å¨pytestä¸ï¼æ以ä¸å ç§æ åµï¼
æ¥ä¸ä¸ççåèªçç¨æ³ã
模å级å«setup_module/teardown_module
æ§è¡ç»æï¼
类级å«çsetup_class/teardown_class
æ§è¡ç»æï¼
ç±»ä¸æ¹æ³çº§å«çsetup_method/teardown_method
æ§è¡ç»æï¼
å½æ°çº§å«çsetup_function/teardown_function
æ§è¡ç»æï¼
å°ç»
该èæ¬æå¤ç§è¿è¡æ¹å¼ï¼å¦æå¤äºPyCharmç¯å¢ï¼å¯ä»¥ä½¿ç¨å³é®æè ç¹å»è¿è¡æé®è¿è¡ï¼ä¹å°±æ¯å¨pytestä¸ç主å½æ°ä¸è¿è¡ï¼
ä¹å¯ä»¥å¨å½ä»¤è¡ä¸è¿è¡ï¼
è¿ç§æ¹å¼ï¼è·ä½¿ç¨Python解éå¨æ§è¡Pythonèæ¬æ²¡æä»ä¹ä¸¤æ ·ãä¹å¯ä»¥å¦ä¸é¢è¿ä¹æ§è¡ï¼
å½ç¶ï¼è¿æä¸ç§æ¯ä½¿ç¨é ç½®æ件è¿è¡ï¼æ¥ççæä¹ç¨ã
å¨é¡¹ç®çæ ¹ç®å½ä¸ï¼æ们å¯ä»¥å»ºç«ä¸ä¸ª pytest.ini æ件ï¼å¨è¿ä¸ªæ件ä¸ï¼æ们å¯ä»¥å®ç°ç¸å ³çé ç½®ï¼
é£è¿ä¸ªé ç½®æ件ä¸çå项é½æ¯ä»ä¹ææå¢ï¼
é¦å ï¼ pytest.ini æä»¶å¿ é¡»ä½äºé¡¹ç®çæ ¹ç®å½ï¼èä¸ä¹å¿ é¡»å«å pytest.ini ã
å ¶ä»çåæ°ï¼
OKï¼æ¥ä¸ªç¤ºä¾ã
é¦å ï¼ï¼è¯¦ç»ç®å½åèå¼å¤´çç®å½ç»æï¼å¨ scripts/test_case_.py ä¸ï¼
å¨ scripts/test_case_dir1/test_case.py ä¸ï¼
é£ä¹ï¼å¨ä¸åçç®å½æè æ件ä¸ï¼å ±æ5个ç¨ä¾å°è¢«æ§è¡ï¼èç»æåæ¯ä¸¤ä¸ªå¤±è´¥ä¸ä¸ªæåãæ¥æ§è¡éªè¯ä¸ä¸ï¼å 为æäºé ç½®æ件ï¼æ们å¨ç»ç«¯ä¸ï¼åææ¯å¨é¡¹ç®çæ ¹ç®å½ï¼ï¼ç´æ¥è¾å ¥ pytest å³å¯ã
ç±æ§è¡ç»æå¯ä»¥åç°ï¼ 2 failed, 3 passed ï¼è·æ们çé¢æä¸è´ã
åç»æ§è¡ç¸å ³é ç½®é½æ¥èªé ç½®æ件ï¼å¦ææ´æ¹ï¼ä¼æç¸åºè¯´æï¼ç»ç«¯é½æ¯ç´æ¥ä½¿ç¨ pytest æ§è¡ã
æ们ç¥éå¨unittestä¸ï¼è·³è¿ç¨ä¾å¯ä»¥ç¨ skip ï¼é£ä¹è¿åæ ·æ¯éç¨äºpytestã
æ¥çæä¹ä½¿ç¨ï¼
è·³è¿ç¨ä¾ï¼æä»¬ä½¿ç¨ @pytest.mark.skipif(condition, reason) ï¼
ç¶åå°å®è£ 饰å¨éè¦è¢«è·³è¿ç¨ä¾ççå½æ°ä¸é¢ã
ææå¦ä¸ï¼
ä¸ä¾æ§è¡ç»æç¸å¯¹è¯¦ç»ï¼å 为æ们å¨é ç½®æ件ä¸ä¸º addopts å¢å äº -v ï¼ä¹åç示ä¾ç»æä¸ï¼æ²¡æå ï¼
å¦å¤ï¼æ¤æ¶ï¼å¨è¾åºçæ§å¶å°ä¸ï¼ è¿æ æ³æå°åº reason ä¿¡æ¯ï¼å¦æéè¦æå°ï¼åå¯ä»¥å¨é ç½®æ件ä¸ç addopts åæ°ç -s å为 -rs ï¼
å¦ææ们äºå ç¥éæµè¯å½æ°ä¼æ§è¡å¤±è´¥ï¼ä½åä¸æ³ç´æ¥è·³è¿ï¼èæ¯å¸ææ¾ç¤ºçæ示ã
Pytest ä½¿ç¨ pytest.mark.xfail å®ç°é¢è§é误åè½ï¼ï¼
éè¦ææ¡çå¿ ä¼ åæ°çæ¯ï¼
é£ä¹å ³äºé¢æ失败çå ç§æ åµéè¦äºè§£ä¸ä¸ï¼
ç»æå¦ä¸ï¼
pytest ä½¿ç¨ x 表示é¢è§ç失败ï¼XFAILï¼ã
å¦æé¢è§çæ¯å¤±è´¥ï¼ä½å®é è¿è¡æµè¯å´æåéè¿ï¼pytest ä½¿ç¨ X è¿è¡æ è®°ï¼XPASSï¼ã
èå¨é¢æ失败ç两ç§æ åµä¸ï¼æ们ä¸å¸æåºç°é¢æ失败ï¼ç»æå´æ§è¡æåäºçæ åµåºç°ï¼å 为è·æ们æ³çä¸ä¸æ ·åï¼æé¢æè¿æ¡ç¨ä¾å¤±è´¥ï¼é£è¿æ¡ç¨ä¾å°±åºè¯¥æ§è¡å¤±è´¥æ对ï¼ä½ è½ç¶æ§è¡æåäºï¼ä½è·ææ³çä¸ä¸æ ·ï¼ä½ ç §æ ·æ¯å¤±è´¥çï¼
æ以ï¼æ们éè¦å°é¢æ失败ï¼ç»æå´æ§è¡æåäºçç¨ä¾æ 记为æ§è¡å¤±è´¥ï¼å¯ä»¥å¨ pytest.ini æ件ä¸ï¼å å ¥ï¼
è¿æ ·å°±å°±æä¸è¿°çæ åµæ 记为æ§è¡å¤±è´¥äºã
pytest身为强大çåå æµè¯æ¡æ¶ï¼é£ä¹åæ ·æ¯æDDTæ°æ®é©±å¨æµè¯çæ¦å¿µãä¹å°±æ¯å½å¯¹ä¸ä¸ªæµè¯å½æ°è¿è¡æµè¯æ¶ï¼é常ä¼ç»å½æ°ä¼ éå¤ç»åæ°ãæ¯å¦æµè¯è´¦å·ç»éï¼æ们éè¦æ¨¡æåç§åå¥ç¾æªçè´¦å·å¯ç ã
å½ç¶ï¼æ们å¯ä»¥æè¿äºåæ°åå¨æµè¯å½æ°å é¨è¿è¡éåãä¸è¿è½ç¶åæ°ä¼å¤ï¼ä½ä»ç¶æ¯ä¸ä¸ªæµè¯ï¼å½æç»åæ°å¯¼è´æè¨å¤±è´¥ï¼æµè¯ä¹å°±ç»æ¢äºã
éè¿å¼å¸¸æè·ï¼æ们å¯ä»¥ä¿è¯ç¨ææåæ°å®æ´æ§è¡ï¼ä½è¦åææµè¯ç»æå°±éè¦åä¸å°é¢å¤çå·¥ä½ã
å¨ pytest ä¸ï¼æ们ææ´å¥½ç解å³æ¹æ³ï¼å°±æ¯åæ°åæµè¯ï¼å³æ¯ç»åæ°é½ç¬ç«æ§è¡ä¸æ¬¡æµè¯ã使ç¨çå·¥å ·å°±æ¯ pytest.mark.parametrize(argnames, argvalues) ã
使ç¨å°±æ¯ä»¥è£ 饰å¨çå½¢å¼ä½¿ç¨ã
åªæä¸ä¸ªåæ°çæµè¯ç¨ä¾
æ¥çï¼éè¦é¨åï¼ç»æï¼ï¼
å¯ä»¥çå°ï¼å表å çæ¯ä¸ªææºå·ï¼é½æ¯ä¸æ¡æµè¯ç¨ä¾ã
å¤ä¸ªåæ°çæµè¯ç¨ä¾
ï¼éè¦é¨åï¼ç»æï¼
å¯ä»¥çå°ï¼æ¯ä¸ä¸ªææºå·ä¸æ¯ä¸ä¸ªéªè¯ç é½ç»åä¸èµ·æ§è¡äºï¼è¿æ ·å°±æ§è¡äº4次ãé£ä¹å¦ææå¾å¤ä¸ªç»åçè¯ï¼ç¨ä¾æ°å°ä¼æ´å¤ãæ们å¸æææºå·ä¸éªè¯ç ä¸ä¸å¯¹åºç»åï¼ä¹å°±æ¯åªæ§è¡ä¸¤æ¬¡ï¼æä¹æå¢ï¼
å¨å¤åæ°æ åµä¸ï¼å¤ä¸ªåæ°åæ¯ä»¥ , åå²çå符串ãåæ°å¼æ¯å表åµå¥çå½¢å¼ç»æçã
åºä»¶ï¼Fixtureï¼æ¯ä¸äºå½æ°ï¼pytest ä¼å¨æ§è¡æµè¯å½æ°ä¹åï¼æä¹åï¼å è½½è¿è¡å®ä»¬ï¼ä¹ç§°æµè¯å¤¹å ·ã
æ们å¯ä»¥å©ç¨åºä»¶åä»»ä½äºæ ï¼å ¶ä¸æ常è§çå¯è½å°±æ¯æ°æ®åºçåå§è¿æ¥åæåå ³éæä½ã
Pytest ä½¿ç¨ pytest.fixture() å®ä¹åºä»¶ï¼ä¸é¢æ¯æç®åçåºä»¶ï¼è®¿é®ä¸»é¡µåå¿ é¡»å ç»å½ï¼
ç»æï¼
å¨ä¹åç示ä¾ä¸ï¼ä½ å¯è½ä¼è§å¾ï¼è¿è·ä¹åçsetupåteardownçåè½ä¹ç±»ä¼¼åï¼ä½æ¯ï¼fixtureç¸å¯¹äºsetupåteardownæ¥è¯´æ´çµæ´»ãpytestéè¿ scope åæ°æ¥æ§å¶åºä»¶ç使ç¨èå´ï¼ä¹å°±æ¯ä½ç¨åã
æ¯å¦ä¹åçloginåºä»¶ï¼å¯ä»¥æå®å®çä½ç¨åï¼
å¾å¤æ¶åéè¦å¨æµè¯åè¿è¡é¢å¤çï¼å¦æ°å»ºæ°æ®åºè¿æ¥ï¼ï¼å¹¶å¨æµè¯å®æè¿è¡æ¸ çï¼å ³éæ°æ®åºè¿æ¥ï¼ã
å½æ大ééå¤çè¿ç±»æä½ï¼æä½³å®è·µæ¯ä½¿ç¨åºä»¶æ¥èªå¨åææé¢å¤çååå¤çã
Pytest ä½¿ç¨ yield å ³é®è¯å°åºä»¶å为两é¨åï¼ yield ä¹åç代ç å±äºé¢å¤çï¼ä¼å¨æµè¯åæ§è¡ï¼ yield ä¹åç代ç å±äºåå¤çï¼å°å¨æµè¯å®æåæ§è¡ã
以ä¸æµè¯æ¨¡ææ°æ®åºæ¥è¯¢ï¼ä½¿ç¨åºä»¶æ¥æ¨¡ææ°æ®åºçè¿æ¥å ³éï¼
ç»æï¼
å¯ä»¥çå°å¨ä¸¤ä¸ªæµè¯ç¨ä¾æ§è¡ååé½æé¢å¤çååå¤çã
pytestä¸è¿æé常å¤çæ件ä¾æ们使ç¨ï¼æ们æ¥ä»ç»å 个常ç¨çã
å æ¥çä¸ä¸ªéè¦çï¼é£å°±æ¯çææµè¯ç¨ä¾æ¥åã
æ³è¦çææµè¯æ¥åï¼é¦å è¦æä¸è½½ï¼æè½ä½¿ç¨ã
ä¸è½½
å¦æä¸è½½å¤±è´¥ï¼å¯ä»¥ä½¿ç¨PyCharmä¸è½½ï¼æä¹ç¨PyCharmä¸è½½è¿éæ éå¤è¨äºå§ã
使ç¨
å¨é ç½®æ件ä¸ï¼æ·»å åæ°ï¼
ææå¾ä¸éå§ï¼
没å®ï¼çæ大æ
Allureæ¡æ¶æ¯ä¸ä¸ªçµæ´»çè½»é级å¤è¯è¨æµè¯æ¥åå·¥å ·ï¼å®ä¸ä» 以webçæ¹å¼å±ç¤ºäºç®æ´çæµè¯ç»æï¼èä¸å 许åä¸å¼åè¿ç¨çæ¯ä¸ªäººä»æ¥å¸¸æ§è¡çæµè¯ä¸æ大é度çæåæç¨ä¿¡æ¯ã
ä»å¼å人åï¼devï¼developerï¼åè´¨éä¿è¯äººåï¼QAï¼Quality Assuranceï¼çè§åº¦æ¥çï¼Allureæ¥åç®åäºå¸¸è§ç¼ºé·çç»è®¡ï¼å¤±è´¥çæµè¯å¯ä»¥å为bugå被ä¸æçæµè¯ï¼è¿å¯ä»¥é ç½®æ¥å¿ãæ¥éª¤ãfixtureãé件ã计æ¶ãæ§è¡ åå² ä»¥åä¸TMSåBUG管çç³»ç»éæï¼æ以ï¼éè¿ä»¥ä¸é ç½®ï¼ææè´è´£çå¼å人ååæµè¯äººåå¯ä»¥å°½å¯è½çææ¡æµè¯ä¿¡æ¯ã
ä»ç®¡çè çè§åº¦æ¥çï¼Allureæä¾äºä¸ä¸ªæ¸ æ°çâ大å¾âï¼å ¶ä¸å æ¬å·²è¦ççç¹æ§ã缺é·èéçä½ç½®ãæ§è¡æ¶é´è½´çå¤è§ä»¥å许å¤å ¶ä»æ¹ä¾¿çäºæ ãallureç模åååå¯æ©å±æ§ä¿è¯äºæ们æ»æ¯è½å¤å¯¹æäºä¸è¥¿è¿è¡å¾®è°ã
å°æ¯ç¹ï¼æ¥ççæä¹ä½¿ç¨ã
Pythonçpytestä¸allureä¸è½½
ä½ç±äºè¿ä¸ª allure-pytest æ件çæçæµè¯æ¥åä¸æ¯ html ç±»åçï¼æ们è¿éè¦ä½¿ç¨allureå·¥å ·åâå å·¥âä¸ä¸ãæ以说ï¼æ们è¿éè¦ä¸è½½è¿ä¸ªallureå·¥å ·ã
allureå·¥å ·ä¸è½½
å¨ç°å¨allureå·¥å ·ä¹åï¼å®ä¾èµJavaç¯å¢ï¼æ们è¿éè¦å é ç½®Javaç¯å¢ã
注æï¼å¦æä½ ççµèå·²ç»æäºJavaç¯å¢ï¼å°±æ ééæ°é ç½®äºã
é ç½®å®äºJavaç¯å¢ï¼æ们åæ¥ä¸è½½allureå·¥å ·ï¼æè¿éç´æ¥ç»åºäºç¾åº¦äºçé¾æ¥ï¼ä½ ä¹å¯ä»¥å»å ¶ä»é¾æ¥ä¸èªè¡ä¸è½½ï¼
ä¸è½½å¹¶è§£å好äºallureå·¥å ·å ä¹åï¼è¿éè¦å°allureå å ç bin ç®å½æ·»å å°ç³»ç»çç¯å¢åéä¸ã
å®äºåæå¼ä½ çç»ç«¯æµè¯ï¼
è¿åäºçæ¬å·è¯´æå®è£ æåã
使ç¨
ä¸è¬ä½¿ç¨allureè¦ç»åå 个æ¥éª¤ï¼
æ¥çé ç½® pytest.ini ï¼
å°±æ¯ --alluredir ./report/result åæ°ã
å¨ç»ç«¯ä¸è¾å ¥ pytest æ£å¸¸æ§è¡æµè¯ç¨ä¾å³å¯ï¼
æ§è¡å®æ¯åï¼å¨é¡¹ç®çæ ¹ç®ä¸ï¼ä¼èªå¨çæä¸ä¸ª report ç®å½ï¼è¿ä¸ªç®å½ä¸æï¼
æ¥ä¸æ¥éè¦ä½¿ç¨allureå·¥å ·æ¥çæHTMLæ¥åã
æ¤æ¶æ们å¨ç»ç«¯ï¼å¦ææ¯windowså¹³å°ï¼å°±æ¯cmdï¼ï¼è·¯å¾æ¯é¡¹ç®çæ ¹ç®å½ï¼æ§è¡ä¸é¢çå½ä»¤ã
PSï¼æå¨pycharmä¸çterminalè¾å ¥allureæ示'allure' ä¸æ¯å é¨æå¤é¨å½ä»¤ï¼ä¹ä¸æ¯å¯è¿è¡çç¨åºææ¹å¤çæ件ãä½windowsçç»ç«¯æ²¡æé®é¢ã
å½ä»¤çæææ¯ï¼æ ¹æ® reportresult ç®å½ä¸çæ°æ®ï¼è¿äºæ°æ®æ¯è¿è¡pytestå产ççï¼ãå¨ report ç®å½ä¸æ°å»ºä¸ä¸ª allure_html ç®å½ï¼èè¿ä¸ªç®å½å æ index.html ææ¯æç»çallureçæ¬çHTMLæ¥åï¼å¦æä½ æ¯éå¤æ§è¡çè¯ï¼ä½¿ç¨ --clean æ¸ é¤ä¹åçæ¥åã
ç»æå¾æ¼äº®ï¼
allure open
é»è®¤çï¼allureæ¥åéè¦HTTPæå¡å¨æ¥æå¼ï¼ä¸è¬æ们å¯ä»¥éè¿pycharmæ¥å®æï¼å¦å¤ä¸ç§æ åµå°±æ¯éè¿allureèªå¸¦çopenå½ä»¤æ¥å®æã
allureçå ¶ä»ç¨æ³
å½ç¶ï¼æ äºè¿æ¯æ²¡æå®ï¼å¨ä½¿ç¨allureçææ¥åçæ¶åï¼å¨ç¼åç¨ä¾é¶æ®µï¼è¿å¯ä»¥æä¸äºåæ°å¯ä»¥ä½¿ç¨ï¼
allure.titleä¸allure.description
featureåstory
ç±ä¸å¾å¯ä»¥çå°ï¼ä¸åçç¨ä¾è¢«å为ä¸åçåè½ä¸ã
allure.severity
allure.severity ç¨æ¥æ è¯æµè¯ç¨ä¾æè æµè¯ç±»ç级å«ï¼å为blockerï¼criticalï¼normalï¼minorï¼trivial5个级å«ã
severityçé»è®¤çº§å«æ¯normalï¼æ以ä¸é¢çç¨ä¾5å¯ä»¥ä¸æ·»å è£ é¥°å¨äºã
allure.dynamic
å¨ä¹åï¼ç¨ä¾çæ§è¡é¡ºåºæ¯ä»ä¸å°ä¸ä¾æ¬¡æ§è¡ï¼
æ£å¦ä¸ä¾çæ§è¡é¡ºåºæ¯ 3 1 2 ã
ç°å¨ï¼æ¥ççæ们å¦ä½æå¨æ§å¶å¤ä¸ªç¨ä¾çæ§è¡é¡ºåºï¼è¿éä¹ä¾èµä¸ä¸ªæ件ã
ä¸è½½
使ç¨
æå¨æ§å¶ç¨ä¾æ§è¡é¡ºåºçæ¹æ³æ¯å¨ç»åç¨ä¾æ·»å ä¸ä¸ªè£ 饰å¨ï¼
é£ä¹ï¼ ç°å¨çæ§è¡é¡ºåºæ¯ 2 1 3 ï¼æç §orderæå®çæåºæ§è¡çã
å¦ææ人è¾å²ä¼ 个0æè è´æ°å¥çï¼é£ä¹å®ä»¬çæåºå ³ç³»åºè¯¥æ¯è¿æ ·çï¼
失败éè¯æææ¯æå®æ个ç¨ä¾æ§è¡å¤±è´¥å¯ä»¥éæ°è¿è¡ã
ä¸è½½
使ç¨
éè¦å¨ pytest.ini æ件ä¸ï¼ é ç½®ï¼
ç» addopts å段æ°å¢ï¼å ¶ä»åæä¿æä¸åï¼ --reruns=3 å段ï¼è¿æ ·å¦ææç¨ä¾æ§è¡å¤±è´¥ï¼åå次æ§è¡ï¼å°è¯3次ã
æ¥ç示ä¾ï¼
ç»æï¼
æ们ä¹å¯ä»¥ä»ç¨ä¾æ¥åä¸çåºéè¯çç»æï¼
ä¸é¢æ¼ç¤ºäºç¨ä¾å¤±è´¥äºï¼ç¶åéæ°æ§è¡å¤å°æ¬¡é½æ²¡ææåï¼è¿æ¯ä¸ç§æ åµã
æ¥ä¸æ¥ï¼æ¥çå¦ä¸ç§æ åµï¼é£å°±æ¯ç¨ä¾æ§è¡å¤±è´¥ï¼éæ°æ§è¡æ¬¡æ°å éè¿äºï¼é£ä¹å©ä½çéæ°æ§è¡ç次æ°å°ä¸åæ§è¡ã
éè¿ random 模å帮å©æ们æ¼ç¤ºåºå¨æ次æ§è¡ä¸åºç°å¤±è´¥çæ åµï¼èå¨éæ°æ§è¡çæ¶åï¼ä¼åºç°æåçæ åµï¼çç»æï¼
å¯ä»¥çå°ï¼ç¨ä¾ éæ°æ§è¡äºä¸æ¬¡å°±æåäºï¼å©ä½ç两次æ§è¡å°±ç»æ¢äºã
ä¸æ¡ä¸æ¡ç¨ä¾çæ§è¡ï¼è¯å®ä¼å¾æ ¢ï¼æ¥çå¦ä½å¹¶åçæ§è¡æµè¯ç¨ä¾ï¼å½ç¶è¿éè¦ç¸åºçæ件ã
ä¸è½½
使ç¨
å¨é ç½®æ件ä¸æ·»å ï¼
å°±æ¯è¿ä¸ª -n=auto ï¼
并åçé ç½®å¯ä»¥åå¨é ç½®æ件ä¸ï¼ç¶åå ¶ä»æ£å¸¸çæ§è¡ç¨ä¾èæ¬å³å¯ãå¦å¤ä¸ç§å°±æ¯å¨ç»ç«¯ä¸æå®ï¼å æ¥ç示ä¾ï¼
ç»æï¼
pytest-sugar æ¹åäº pytest çé»è®¤å¤è§ï¼æ·»å äºä¸ä¸ªè¿åº¦æ¡ï¼å¹¶ç«å³æ¾ç¤ºå¤±è´¥çæµè¯ãå®ä¸éè¦é ç½®ï¼åªé ä¸è½½æ件å³å¯ï¼ç¨ pytest è¿è¡æµè¯ï¼æ¥äº«åæ´æ¼äº®ãæ´æç¨çè¾åºã
ä¸è½½
å ¶ä»ç §æ§æ§è¡ç¨ä¾å³å¯ã
pytest-cov å¨ pytest ä¸å¢å äºè¦ççæ¯æï¼æ¥æ¾ç¤ºåªäºä»£ç è¡å·²ç»æµè¯è¿ï¼åªäºè¿æ²¡æãå®è¿å°å æ¬é¡¹ç®çæµè¯è¦ççã
ä¸è½½
使ç¨
å¨é ç½®æ件ä¸ï¼
ä¹å°±æ¯é ç½® --cov=./scripts ï¼è¿æ ·ï¼å®å°±ä¼ç»è®¡ææ scripts ç®å½ä¸ææ符åè§åçèæ¬çæµè¯è¦ççã
æ§è¡çè¯ï¼å°±ç §å¸¸æ§è¡å°±è¡ã
ç»æï¼
æ´å¤æ件åèï¼/p/
æçæ¶åï¼å¨ pytest.ini ä¸é ç½®äº pytest-html å allure æ件ä¹åï¼æ§è¡åæ¥éï¼
åºç°äºè¿ä¸ªæ¥éï¼æ£æ¥ä½ é ç½®ç解éå¨ä¸æ¯å¦åå¨ pytest-html å allure-pytest è¿ä¸¤ä¸ªæ¨¡åãå¦ææ¯ä½¿ç¨çpycharm ideï¼é£ä¹ä½ é¤äºæ£æ¥settingsä¸ç解éå¨é ç½®ä¹å¤ï¼è¿éè¦ä¿è¯è¿è¡èæ¬çç¼è¾å¨é ç½®æ¯å¦è·settingsä¸é ç½®ä¸è´ã
python 随机生成号码
from numpy import randomrandArray = random.random(size=(2,4)) #输出#array([[0.,0.,0.,0.],[0.,0.,0.,0.]])
random函数接收需要生成随机矩阵的形状的元组作为唯一参数。上面的号源沪深300 源码代码将会返回一个两行四列的随机矩阵,随机数的码p码用confluence源码值位于0到1之间,矩阵是机号jobscheduler 源码numpy.array类型。除了random函数外,代替sarp源码还有生成整数随机矩阵的手机n手audiomanager源码函数randint。
from numpy import randomrandom.randint(1,号源,size=(3,3)) #输出#array([[,,],[,,8],[,,]])