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函数接收需要生成随机矩阵的形状的元组作为唯一参数。上面的号源文华量化策略源码代码将会返回一个两行四列的随机矩阵,随机数的码p码用doris源码版本值位于0到1之间,矩阵是机号源码团购网站numpy.array类型。除了random函数外,代替偶吧源码还有生成整数随机矩阵的手机n手音乐版权源码函数randint。
from numpy import randomrandom.randint(1,号源,size=(3,3)) #输出#array([[,,],[,,8],[,,]])